Passer au contenu

Comment récupérer un objet Amazon S3 que j'ai supprimé dans un compartiment à usage général activé pour la gestion des versions ?

Lecture de 6 minute(s)
0

Je souhaite récupérer un objet qui a été supprimé de mon compartiment à usage général Amazon Simple Storage Service (Amazon S3) avec gestion des versions activée.

Brève description

Remarque : La gestion des versions S3 n'est disponible que pour les compartiments à usage général. Les compartiments de répertoire et de table ne prennent pas en charge la gestion des versions S3.

Lorsque vous supprimez un objet d’un compartiment activé pour la gestion des versions, Amazon S3 crée un marqueur de suppression pour l’objet. Le marqueur de suppression devient la version actuelle de l’objet, ce dernier devenant la version précédente. Avec le marqueur de suppression, Amazon S3 répond aux requêtes relatives à l’objet comme si vous l’aviez supprimé. Par exemple, si vous envoyez une requête GET pour l’objet, Amazon S3 renvoie un message d’erreur.

Pour récupérer un objet qui a été supprimé d’un compartiment activé pour la gestion des versions, effectuez l’une des actions suivantes :

  • Téléchargez la version précédente de l’objet. Vous devez disposer de l'autorisation s3:GetObjectVersion.
  • Utilisez un compte AWS disposant de l'autorisation s3:DeleteObjectVersion pour supprimer un marqueur de suppression. La version non supprimée la plus récente devient alors la version actuelle de l'objet afin que vous puissiez accéder à l'objet précédemment supprimé dans un compartiment à versions gérées.
  • Remarque : Si vous avez configuré la suppression de l'authentification multifactorielle (MFA) sur le compartiment, vous devez utiliser la fonction de suppression de MFA pour supprimer le marqueur de suppression.

Résolution

Important : Il n’est pas possible de récupérer les données que vous supprimez définitivement d’un compartiment.

Utiliser la console Amazon S3 pour télécharger la version précédente de l’objet

Procédez comme suit :

  1. Ouvrez la console Amazon S3.
  2. Dans le volet de navigation, choisissez Compartiments, puis sélectionnez le compartiment de l'objet supprimé.
  3. Pour afficher la liste des versions de l'objet, activez Afficher les versions.
  4. Sélectionnez la version de l'objet supprimé que vous souhaitez récupérer.
  5. Choisissez Actions, puis Télécharger.

Utilisez l’AWS CLI pour télécharger la version précédente de l’objet

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'AWS CLI. Dans les commandes suivantes, remplacez DOC-EXAMPLE-BUCKET par le nom de votre compartiment.

Procédez comme suit :

  1. Exécutez la commande list-object-versions pour répertorier les versions de l’objet :

    aws s3api list-object-versions --bucket DOC-EXAMPLE-BUCKET --prefix examplefolder/

    Remarque : La commande précédente inclut l’option --prefix pour filtrer les résultats sur le préfixe de nom de clé spécifié. Utilisez cette option pour réduire le nombre de résultats lorsque votre compartiment contient de nombreuses versions d'objet.

  2. À partir de la sortie de la commande, notez l'ID de version de la version précédente de l'objet.

  3. Exécutez la commande get-object pour récupérer la version :

    aws s3api get-object --bucket DOC-EXAMPLE-BUCKET --key example.txt --version-id example.d6tjAKF1iObKbEnNQkIMPjj filename.txt

Utiliser la console Amazon S3 pour supprimer le marqueur de suppression

Procédez comme suit :

  1. À partir du compte propriétaire du compartiment de l’objet supprimé, ouvrez la console Amazon S3.
  2. Dans le volet de navigation, choisissez Compartiments, puis sélectionnez le compartiment de l'objet supprimé.
  3. Pour afficher la liste des versions de l'objet, activez Afficher les versions.
  4. Sélectionnez le marqueur de suppression de l’objet.
    Important : Assurez-vous de sélectionner le marqueur de suppression et non l'objet même. Sinon, vous ne pourrez pas récupérer l'objet.
  5. Sur la page Supprimer des objets, dans Supprimer définitivement des objets ?, saisissez Supprimer définitivement.
  6. Choisissez Supprimer.
    Important : Vous ne pouvez pas utiliser la console Amazon S3 pour annuler la suppression de dossiers. Vous devez plutôt utiliser l’interface de la ligne de commande AWS ou le kit SDK AWS.

Utiliser l’interface de la ligne de commande AWS pour supprimer le marqueur de suppression

Vous pouvez utiliser l’interface de la ligne de commande AWS pour supprimer le marqueur de suppression de plusieurs objets, de milliers d’objets ou de millions d’objets.

Supprimer le marqueur de suppression sur plusieurs objets

Procédez comme suit :

  1. Exécutez la commande list-object-versions suivante avec le paramètre --query :

    aws s3api list-object-versions --bucket DOC-EXAMPLE-BUCKET --prefix examplefolder/ --query 'DeleteMarkers[*].{Key: Key, VersionId: VersionId}'

    Remarque : L’exemple de commande précédent inclut l’option --prefix pour filtrer les résultats sur le préfixe de nom de clé spécifié.

  2. Dans la sortie de commande, notez l’ID de version du marqueur de suppression.
    Important : Assurez-vous d’avoir noté l’ID de version du marqueur de suppression. Si vous supprimez une version d’objet, vous ne pouvez pas récupérer l’objet.

  3. Exécutez la commande delete-object pour supprimer le marqueur de suppression :

    aws s3api delete-object --bucket DOC-EXAMPLE-BUCKET --key example.txt --version-id 'example.d6tjAKF1iObKbEnNQkIMPjj'
  4. Pour vérifier que le marqueur de suppression a bien été supprimé, exécutez la commande ls :

    aws s3 ls s3://DOC-EXAMPLE-BUCKET

Supprimer le marqueur de suppression sur des milliers d’objets

Avertissement : Il est recommandé de sauvegarder vos données avant d'exécuter la commande list-object-versions suivante. La commande utilise l'action d'API s3api delete-object pour supprimer les objets de marqueur de suppression supprimés. La suppression d'objets est une action définitive. Les modifications apportées à cette structure de commande peuvent entraîner des pertes de données inattendues.

Procédez comme suit :

  1. Ouvrez la console AWS CloudShell.
  2. Exécutez la commande list-object-versions :
    aws s3api list-object-versions --bucket DOC-EXAMPLE-BUCKET --prefix examplefolder/ --output json --query 'DeleteMarkers[?IsLatest==`true`].[Key, VersionId]' | jq -r '.[] | "--key " + "'\\\"'" + .[0] + "'\\\"'" + " --version-id " + .[1]' | xargs -L1 -t aws s3api delete-object --bucket DOC-EXAMPLE-BUCKET
    Remarque : La commande précédente utilise l'outil jq pour analyser la réponse ListObjectVersions pour la version actuelle de DeleteMarkers. Par défaut, jq est installé sur AWS CloudShell. Si vous n’interagissez pas avec l’environnement shell, votre session shell se termine. Pour plus d'informations sur l'outil jq, consultez la page ./jq sur le site Web de jq.

Supprimer le marqueur de suppression sur des millions d’objets

Pour supprimer le marqueur de suppression sur des millions d’objets d’un compartiment, utilisez un script personnalisé avec le kit AWS SDK. Pour plus d'informations, développez l'onglet Utilisation des kits SDK AWS.

Remarque : Lorsque vous exécutez list-object-versions sur un compartiment contenant des millions d'objets, une erreur de délai d'expiration peut s’afficher.

AWS OFFICIELA mis à jour il y a 2 mois