Satya vous montre comment
effectuer un chargement de
message partitionné dans S3

Satya_s3-multipart-upload-cli-1

Je souhaite copier un fichier volumineux dans un compartiment Amazon Simple Storage Service (Amazon S3) en plusieurs parties ou en utilisant un chargement partitionné. Comment procéder à l'aide de l'interface de ligne de commande AWS (AWS CLI) ?

Vous pouvez charger des fichiers volumineux dans Amazon S3 à l'aide de l'interface de ligne de commande AWS avec les commandes aws s3 (haut niveau) ou aws s3api (bas niveau). Pour plus d'informations sur ces deux niveaux de commande, consultez Utilisation d'Amazon S3 avec l'interface de ligne de commande AWS.
 
La méthode recommandée consiste à utiliser les commandes aws s3 (par exemple, aws s3 cp) pour les chargements et téléchargements partitionnés car ces commandes aws s3 effectuent automatiquement des chargements et téléchargements partitionnés en fonction de la taille du fichier. À titre de comparaison, les commandes aws s3api, comme s3api create-multipart-upload, doivent être utilisées uniquement lorsque les commandes aws s3 ne prennent pas en charge un besoin de chargement spécifique, par exemple lorsque le chargement partitionné implique plusieurs serveurs, quand un chargement partitionné est arrêté manuellement et repris plus tard, ou lorsque la commande aws s3 ne prend pas en charge un paramètre de demande obligatoire.

Avant de charger le fichier, vous pouvez calculer la valeur du total de contrôle MD5 du fichier comme référence pour les vérifications d'intégrité après le chargement.

(Recommandé) Charger le fichier à l'aide des commandes (aws s3) de haut niveau

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

$ aws s3 cp large_test_file s3://exampleawsbucket/

Cet exemple utilise la commande aws s3 cp, mais d'autres commandes aws s3 qui impliquent le chargement des objets dans un compartiment S3 (par exemple, aws s3 sync ou ws s3 mv) effectuent aussi automatiquement un chargement partitionné lorsque l'objet est volumineux.

Les objets qui sont chargés dans Amazon S3 à l'aide de chargements partitionnés ont un format ETag différent de ceux qui sont chargés à l'aide d'une demande PUT. Pour stocker la valeur du total de contrôle MD5 du fichier source comme référence, vous pouvez choisir de charger le fichier avec la valeur du total de contrôle comme métadonnée personnalisée. Pour ajouter la valeur du total de contrôle MD5 comme métadonnée personnalisée, incluez le paramètre facultatif --metadata md5="examplemd5value1234/4Q" dans la commande de chargement, comme suit :

$ aws s3 cp large_test_file s3://exampleawsbucket/ --metadata md5="examplemd5value1234/4Q"

Pour utiliser davantage de bande passante et de ressources de votre hôte au cours du chargement, vous pouvez augmenter le nombre maximum de demandes simultanées dans votre configuration de l'interface de ligne de commande AWS. Par défaut, l'interface de ligne de commande AWS utilise 10 demandes simultanées au maximum. Cette commande définit le nombre maximum de demandes simultanées à 20 :

$ aws configure set default.s3.max_concurrent_requests 20

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

Charger le fichier en plusieurs parties à l'aide des commandes de bas niveau (aws s3api)

Important : cette procédure aws s3api doit être utilisée uniquement lorsque les commandes aws s3 ne prennent pas en charge un besoin de chargement spécifique, par exemple lorsque le chargement partitionné implique plusieurs serveurs, quand un chargement partitionné est arrêté manuellement puis repris, ou lorsque la commande aws s3 ne prend pas en charge un paramètre de demande obligatoire. Pour d'autres chargements partitionnés, utilisez des commandes aws s3 cp ou des commandes s3 de haut niveau.

1.    Fractionnez le fichier que vous souhaitez charger en plusieurs parties.
Conseil : si vous utilisez un système d'exploitation Linux, vous pouvez avoir recours à la commande split.

2.    Exécutez cette commande pour lancer un chargement partitionné et extraire l'ID de chargement associé. La commande renvoie une réponse qui contient l'UploadID :

aws s3api create-multipart-upload --bucket exampleawsbucket --key large_test_file

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

4.    Exécutez cette commande pour charger la première partie du fichier. Veillez à remplacer toutes les valeurs par les valeurs pour le compartiment, le fichier et le chargement partitionné. La commande renvoie une réponse qui contient une valeur ETag pour la partie du fichier que vous avez chargé. Pour plus d'informations sur chaque paramètre, consultez upload-part.

aws s3api upload-part --bucket exampleawsbucket --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. Veillez à augmenter le numéro de partie chaque fois que vous chargez une nouvelle partie.

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

aws s3api list-parts --bucket exampleawsbucket --key large_test_file --upload-id exampleTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk

8.    Compilez les valeurs ETag pour chaque partie de fichier que vous avez chargée dans un fichier au format JSON similaire à ce qui suit :

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

    ....

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

9.    Nommez le fichier fileparts.json.

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

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

11.    Si la commande précédente est réussie, vous recevez une réponse similaire à ce qui suit :

{
    "ETag": "\\"exampleae01633ff0af167d925cad279-2\\"",
    "Bucket": "exampleawsbucket",
    "Location": "https://exampleawsbucket.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 (en raison d'une expiration du délai d'attente ou d'une annulation manuelle), vous devez commencer un nouveau chargement partitionné. Dans la plupart des cas, l'interface de 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 pour un chargement partitionné et que le processus est interrompu, vous devez supprimer les parties incomplètes du chargement, puis recharger les parties.

Pour supprimer les parties incomplètes, vous pouvez utiliser l'action de cycle de vieAbortIncompleteMultipartUpload. Ou vous pouvez utiliser les commandes aws s3api pour supprimer les parties incomplètes en suivant ces étapes :

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

aws s3api list-multipart-uploads --bucket exampleawsbucket

2.    Cette commande renvoie un message avec les parties de fichier qui n'ont pas été traitées, comme ce qui suit :

{
    "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 exampleawsbucket --key large_test_file --upload-id examplevQpHp7eHc_J5s9U.kzM3GAHeOJh1P8wVTmRqEVojwiwu3wPX6fWYzADNtOHklJI6W6Q9NJUYgjePKCVpbl_rDP6mGIr2AQJNKB

Cette page vous a-t-elle été utile ? Oui | Non

Retour au Centre de connaissances AWS Support

Vous avez besoin d'aide ? Consultez le site du Centre AWS Support.

Date de publication : 25/01/2016

Date de mise à jour : 25/09/2018