Comment puis-je copier tous les objets d’un compartiment Amazon S3 vers un autre compartiment ?

Lecture de 7 minute(s)
0

Je souhaite copier ou déplacer tous mes objets d’un compartiment Amazon Simple Storage Service (Amazon S3) vers un autre compartiment. Je souhaite procéder à la migration d’objets entre mes compartiments S3.

Brève description

Pour copier des objets d’un compartiment S3 vers un autre, procédez comme suit :

1.    Créez un nouveau compartiment S3.

2.    Installez et configurez l’interface de la ligne de commande AWS (AWS CLI).

3.    Copiez les objets entre des compartiments S3.

Remarque : l’utilisation des commandes aws s3 ls ou aws s3 sync sur les grands compartiments (avec 10 millions d’objets ou plus) peut être coûteuse et occasionner un délai d’attente. Si vous rencontrez des délais d’attente en raison d’un compartiment volumineux, pensez à utiliser les métriques Amazon CloudWatch pour calculer la taille et le nombre d’objets dans un compartiment. Pensez également à utiliser S3 Batch Operations pour copier les objets.

4.    Vérifiez que les objets sont bien copiés.

5.    Mettez à jour les appels d’API existants en leur attribuant le nom du compartiment cible.

Avant de commencer, réfléchissez aux points suivants :

Résolution

Créer un nouveau compartiment S3

1.    Ouvrez la console Amazon S3.

2.    Sélectionnez Créer un compartiment.

3.    Choisissez un nom conforme au DNS pour votre nouveau compartiment.

4.    Sélectionnez votre région AWS.

Conseil : Pour éviter les problèmes de performances causés par le trafic interrégional, créez le compartiment cible dans la même région que le compartiment source.

5.    Si nécessaire, vous pouvez choisir de Copier les paramètres d’un compartiment existant pour reproduire la configuration du compartiment source.

Installer et configurer l’AWS CLI

1.    Installez l’AWS CLI.

2.    Configurez l’AWS CLI en exécutant la commande suivante :

aws configure

Remarque : en cas d’erreurs lors de l’exécution de commandes AWS CLI, vérifiez que vous utilisez bien la version la plus récente de l’AWS CLI.

3.    Saisissez vos clés d’accès (ID de clé d’accès et clé d’accès secrète).

4.    Appuyez sur Entrer pour ignorer la région par défaut et les options de sortie par défaut. Pour plus d’informations sur les paramètres de la région Amazon S3, consultez Points de terminaison des services AWS.

Remarque : les sorties de l’AWS CLI sont de type JSON, texte ou tableau. Toutefois, toutes les commandes ne prennent pas en charge chaque type de sortie. Pour plus d’informations, consultez Contrôle de la sortie des commandes depuis l’AWS CLI.

Copiez les objets au sein des compartiments S3

1.    Si vous avez archivé des objets S3 dans la classe de stockage Amazon Simple Storage Service Glacier, restaurez-les.

2.    Copiez les objets au sein des compartiments source et cible en exécutant la commande de synchronisation suivante à l’aide de l’AWS CLI :

aws s3 sync s3://DOC-EXAMPLE-BUCKET-SOURCE s3://DOC-EXAMPLE-BUCKET-TARGET

Remarque : mettez à jour la commande de synchronisation pour y inclure les noms de vos compartiments source et cible.

La commande de synchronisation utilise les API CopyObject pour copier des objets au sein des compartiments S3. La commande de synchronisation répertorie les compartiments source et cible afin d’identifier les objets qui se trouvent dans le compartiment source, sans toutefois figurer dans le compartiment cible. La commande identifie également les objets du compartiment source dont les dates de dernière modification sont différentes de celles des objets du compartiment cible. En utilisant la commande de synchronisation sur un compartiment protégé par une version, seule la version en vigueur de l’objet est copiée. En revanche, les versions antérieures ne le sont pas. Par défaut, cette action préserve les métadonnées de l’objet.

Si les listes de contrôle d’accès (ACL) sont activées dans le compartiment source, les ACL ne seront pas copiées dans le compartiment de destination. Ce principe s’applique indépendamment du fait que les ACL soient activés ou non sur le compartiment de destination. Si les ACL sont activés dans le compartiment source et dans le compartiment de destination, les ACL de l’objet de destination accorderont FULL_CONTROL au compte qui a effectué la copie. En cas d’échec de l’opération, vous pouvez relancer la commande de synchronisation sans dupliquer les objets précédemment copiés. Pour résoudre les problèmes liés à l’opération de synchronisation, consultez Pourquoi est-ce que je ne parviens pas à copier un objet entre deux compartiments Amazon S3 ?

3.    (Facultatif) En cas de délai d’attente, utilisez la commande cloudwatch get-metric-statistics pour calculer le nombre d’objets dans votre compartiment :

$ aws cloudwatch get-metric-statistics --namespace AWS/S3 --metric-name NumberOfObjects --dimensions Name=BucketName,Value=DOC-EXAMPLE-BUCKET-SOURCE Name=StorageType,Value=AllStorageTypes --start-time 2021-05-11T00:00 --end-time 2021-05-11T00:10 --period 600 --statistic Average --output json

4.    (Facultatif) En cas de délai d’attente, utilisez la commande cloudwatch get-metric-statistics pour récupérer la taille de votre compartiment :

$ aws cloudwatch get-metric-statistics --namespace AWS/S3 --metric-name BucketSizeBytes --dimensions Name=BucketName,Value=DOC-EXAMPLE-BUCKET-SOURCE Name=StorageType,Value=StandardStorage --start-time 2021-05-11T00:00 --end-time 2021-05-11T00:10 --period 3600 --statistics Average --unit Bytes --output json

Remarque : les appels de liste peuvent être très coûteux, ce qui provoque l’interruption de la commande. Pour les grands compartiments, pensez plutôt à utiliser les métriques Amazon CloudWatch pour calculer la taille du compartiment et le nombre total d’objets. Toutefois, compte tenu du fait que les métriques d’Amazon CloudWatch ne sont extraites qu’une fois par jour, le nombre d’objets et la taille du compartiment signalés peuvent différer des résultats de la commande liste.

Vérifier que les objets sont bien copiés

1.    Vérifiez le contenu des compartiments source et cible en exécutant les commandes suivantes :

aws s3 ls --recursive s3://DOC-EXAMPLE-BUCKET-SOURCE --summarize > bucket-contents-source.txt

aws s3 ls --recursive s3://DOC-EXAMPLE-BUCKET-TARGET --summarize > bucket-contents-target.txt

Remarque : mettez à jour la commande liste, notamment en incluant les noms de vos compartiments source et cible.

2.    Comparez les objets qui se trouvent dans les compartiments source et cible à l’aide des sorties enregistrées dans des fichiers du répertoire de l’AWS CLI. Consultez l’exemple suivant :

$ aws s3 ls --recursive s3://DOC-EXAMPLE-BUCKET --summarize
2017-11-20 21:17:39      15362 s3logo.png

  Total Objects: 1        Total Size: 15362

Mettre à jour des appels d’API existants vers le nom du compartiment cible

Mettez à jour toutes les applications ou charges de travail existantes afin qu’elles utilisent le nom du compartiment cible. Si les écritures sont fréquentes, vous devrez peut-être exécuter des commandes de synchronisation pour corriger les divergences entre les compartiments source et cible.

Informations connexes

Tarification Amazon S3

Copier votre objet dans un dossier

La commande liste ne répond plus après que j’ai effectué une opération de suppression importante dans Amazon S3. Comment puis-je résoudre ce problème ?

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 ans