Comment utiliser l'interface de la ligne de commande AWS pour charger un fichier volumineux en plusieurs parties sur Amazon S3 ?

Lecture de 6 minute(s)
0

Je souhaite copier un fichier volumineux dans un compartiment Amazon Simple Storage Service (Amazon S3) en plusieurs parties ou utiliser le chargement partitionné. Je souhaite utiliser l'interface de la ligne de commande AWS (AWS) pour charger le fichier.

Brève description

Utilisez l'interface de la ligne de commande AWS avec des commandes aws s3 de haut niveau ou des commandes aws s3api de bas niveau pour charger des fichiers volumineux sur Amazon S3. Pour plus d'informations sur ces deux niveaux de commande, consultez Utilisation d'Amazon S3 avec l'interface de la ligne de commande AWS.

Important : Il est recommandé d'utiliser les commandes aws s3, telles que aws s3 cp, pour les chargements et téléchargements partitionnés. Cela est dû au fait que les commandes aws s3 effectuent automatiquement un chargement et un téléchargement partitionnés en fonction de la taille du fichier. Utilisez les commandes aws s3api, telles que aws s3api create-multipart-upload, uniquement lorsque les commandes aws s3 ne prennent pas en charge un chargement spécifique. Par exemple, le chargement partitionné implique plusieurs serveurs, ou vous arrêtez manuellement un chargement partitionné pour le reprendre ultérieurement. Ou bien, la commande aws s3 ne prend pas en charge un paramètre de requête obligatoire.

Résolution

Avant de charger le fichier, calculez la valeur de la somme de contrôle MD5 du fichier comme référence pour les contrôles d'intégrité après le chargement.

Remarque : Si vous recevez des erreurs lors de l'exécution des commandes de l'interface de la ligne de commande AWS, alors vérifiez que vous utilisez bien la version la plus récente de l'interface de la ligne de commande AWS.

Utiliser des commandes aws s3 de haut niveau

Pour utiliser une commande aws s3 de haut niveau pour votre chargement partitionné, exécutez la commande suivante :

$ aws s3 cp large_test_file s3://DOC-EXAMPLE-BUCKET/

Cet exemple utilise la commande aws s3 cp pour effectuer automatiquement un chargement partitionné lorsque l'objet est volumineux. Vous pouvez également utiliser d'autres commandes aws s3 qui impliquent le chargement d'objets dans un compartiment S3. Par exemple, aws s3 sync ou aws s3 mv.

Les objets que vous chargez en plusieurs parties sur Amazon S3 ont un format ETag différent de celui des objets que vous chargez à l'aide de la requête PUT traditionnelle. Pour stocker la valeur de la somme de contrôle MD5 du fichier source en tant que référence, chargez le fichier avec la valeur de la somme de contrôle sous forme de métadonnées personnalisées. Pour ajouter la valeur de la somme de contrôle MD5 en tant que métadonnées personnalisées, incluez le paramètre facultatif --metadata md5="exampleMD5value1234/4Q" dans la commande de chargement :

$ aws s3 cp large_test_file s3://DOC-EXAMPLE-BUCKET/ --metadata md5="examplemd5value1234/4Q"

Pour utiliser davantage la bande passante et les ressources de votre hôte, augmentez le nombre maximum de requêtes simultanées définies dans la configuration de votre interface de la ligne de commande AWS. Par défaut, l'interface de la ligne de commande AWS utilise un maximum de 10 requêtes simultanées. Cette commande définit le nombre maximum de requêtes simultanées à 20 :

$ aws configure set default.s3.max_concurrent_requests 20

Pour plus d'informations sur la configuration de l'interface de la ligne de commande AWS avec Amazon S3, consultez la section Configuration de l'interface de la ligne de commande AWS S3.

Utiliser des commandes aws s3api de bas niveau

1.    Divisez en plusieurs parties le fichier que vous souhaitez charger. 

Conseil : Si vous utilisez un système d'exploitation Linux, utilisez la commande division.

2.    Exécutez la commande suivante pour lancer un chargement partitionné et récupérer l'ID de chargement associé. La commande renvoie une réponse contenant l'UploadID :

aws s3api create-multipart-upload --bucket DOC-EXAMPLE-BUCKET --key large_test_file

3.    Copiez la valeur UploadID comme référence pour les étapes ultérieures.

4.    Exécutez la commande suivante pour charger la première partie du fichier. Remplacez toutes les valeurs par celles de votre compartiment, de votre fichier et de votre chargement partitionné. La commande renvoie une réponse contenant une valeur ETag pour la partie du fichier que vous avez chargée. Pour plus d'informations sur chaque paramètre, voir upload-part.

aws s3api upload-part --bucket DOC-EXAMPLE-BUCKET --key large_test_file --part-number 1 --body large_test_file.001 --upload-id exampleTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk --content-md5 exampleaAmjr+4sRXUwf0w==

5.    Copiez la valeur ETag comme référence pour les étapes ultérieures.

6.    Répétez les étapes 4 et 5 pour chaque partie du fichier. Assurez-vous d'augmenter le numéro de partie pour chaque nouvelle partie que vous chargez.

7.    Après avoir chargé toutes les parties du fichier, exécutez la commande suivante pour répertorier les parties chargées et confirmer que la liste est complète :

aws s3api list-parts --bucket DOC-EXAMPLE-BUCKET --key large_test_file --upload-id exampleTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk

8.    Compilez les valeurs ETag pour chaque partie du fichier que vous avez chargée dans un fichier au format JSON.

Exemple de fichier JSON :

{
    "Parts": [{
        "ETag": "example8be9a0268ebfb8b115d4c1fd3",
        "PartNumber":1
    },

    ....

    {
        "ETag": "example246e31ab807da6f62802c1ae8",
        "PartNumber":4
    }]
}

9.    Nommez le fichier fileparts.json.

10.    Exécutez la commande suivante pour terminer le chargement partitionné. Remplacez la valeur de --multipart-upload par le chemin d'accès au fichier au format JSON avec les ETags que vous avez créés.

aws s3api complete-multipart-upload --multipart-upload file://fileparts.json --bucket DOC-EXAMPLE-BUCKET --key large_test_file --upload-id exampleTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk

11.    Si la commande précédente aboutit, vous recevez une réponse similaire à celle ci-dessous :

{
    "ETag": "\\"exampleae01633ff0af167d925cad279-2\\"",
    "Bucket": "DOC-EXAMPLE-BUCKET",
    "Location": "https://DOC-EXAMPLE-BUCKET.s3.amazonaws.com/large_test_file",

    "Key": "large_test_file"
}

Résoudre les échecs de chargement

Si vous utilisez les commandes aws s3 de haut niveau pour un chargement partitionné et que le chargement échoue, vous devez démarrer un nouveau chargement partitionné. Les échecs de chargement partitionné se produisent en raison d'un délai d'expiration ou d'une annulation manuelle. Dans la plupart des cas, l'interface de la ligne de commande AWS annule automatiquement le chargement partitionné, puis supprime tous les fichiers partitionnés que vous avez créés. Ce processus peut prendre plusieurs minutes. Si vous utilisez les commandes aws s3api et que le processus est interrompu, supprimez les parties incomplètes du chargement, puis chargez-les à nouveau.

Pour supprimer les parties incomplètes, utilisez l'action lifecycle AbortIncompleteMultipartUpload. Vous pouvez également utiliser les commandes aws s3api pour supprimer les parties incomplètes :

1.    Exécutez la commande suivante pour répertorier les chargements partitionnés incomplets de fichiers. Remplacez la valeur de --bucket par le nom de votre compartiment.

aws s3api list-multipart-uploads --bucket DOC-EXAMPLE-BUCKET

2.    La commande renvoie un message similaire à celui qui suit avec les parties du fichier qui n'ont pas été traitées :

{
    "Uploads": [
        {

    "Initiator": {
                "DisplayName": "multipartmessage",
                "ID": "290xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    "
            },
            "Initiated": "2016-03-31T06:13:15.000Z",

    "UploadId": "examplevQpHp7eHc_J5s9U.kzM3GAHeOJh1P8wVTmRqEVojwiwu3wPX6fWYzADNtOHklJI6W6Q9NJUYgjePKCVpbl_rDP6mGIr2AQJNKB_A-",
            "StorageClass": "STANDARD",

    "Key": "",
            "Owner": {
                "DisplayName": "multipartmessage",

    "ID": "290xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx "
            }
        }
   ]
}

3.    Exécutez la commande suivante pour supprimer les parties incomplètes :

aws s3api abort-multipart-upload --bucket DOC-EXAMPLE-BUCKET --key large_test_file --upload-id examplevQpHp7eHc_J5s9U.kzM3GAHeOJh1P8wVTmRqEVojwiwu3wPX6fWYzADNtOHklJI6W6Q9NJUYgjePKCVpbl_rDP6mGIr2AQJNKB

Informations connexes

Chargement et copie d'objets à l'aide du chargement partitionné

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 10 mois