Tutoriel : Chargement d'un objet par téléchargement en plusieurs parties et vérification de l'intégrité de ses données - Amazon Simple Storage Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Tutoriel : Chargement d'un objet par téléchargement en plusieurs parties et vérification de l'intégrité de ses données

Le chargement partitionné vous permet de charger un seul objet en tant qu'ensemble de parties. Chaque partie est une portion contiguë des données de l'objet. Vous pouvez charger ces parties d'objet indépendamment et dans n'importe quel ordre. Si le transfert d'une partie échoue, vous pouvez la retransférer sans affecter les autres. Une fois toutes les parties de l'objet chargées, Amazon S3 les assemble et crée l'objet. En général, lorsque l'objet atteint la taille de 100 Mo, vous devez préférer les chargements partitionnés au chargement d'objet en une seule opération. Pour plus d'informations sur les téléchargements partitionnés, consultez. Chargement et copie d'objets à l'aide d'un chargement partitionné Pour connaître les limites relatives aux téléchargements partitionnés, consultez. Limites de la fonction de chargement partitionné Amazon S3

Vous pouvez utiliser des checksums pour vérifier que les actifs ne sont pas modifiés lorsqu'ils sont copiés. L'exécution d'une somme de contrôle consiste à utiliser un algorithme pour itérer séquentiellement sur chaque octet d'un fichier. Amazon S3 propose plusieurs options de somme de contrôle pour vérifier l'intégrité des données. Nous vous recommandons d'effectuer ces contrôles d'intégrité en tant que meilleure pratique de durabilité et pour confirmer que chaque octet est transféré sans modification. Amazon S3 prend également en charge les algorithmes suivants : SHA -1, SHA -256 etCRC32C. CRC32 Amazon S3 utilise un ou plusieurs de ces algorithmes pour calculer une valeur de somme de contrôle supplémentaire et la stocker dans le cadre des métadonnées de l'objet. Pour en savoir plus sur le total de contrôle, consultez Vérification de l'intégrité des objets.

Objectif

Dans ce didacticiel, vous allez apprendre à charger un objet sur Amazon S3 à l'aide d'un téléchargement en plusieurs parties et d'une somme de contrôle supplémentaire de SHA -256 via l'interface de ligne de AWS commande ().AWS CLI Vous apprendrez également à vérifier l'intégrité des données de l'objet en calculant le MD5 hachage et la somme de contrôle SHA -256 de l'objet chargé.

Prérequis

  • Avant de commencer ce didacticiel, assurez-vous d'avoir accès à un compartiment Amazon S3 dans lequel vous pouvez effectuer le téléchargement. Pour de plus amples informations, veuillez consulter Créer un compartiment.

  • Vous devez l'avoir AWS CLI installé et configuré. Si ce n'est pas le cas AWS CLI, consultez la section Installer ou mettre à jour vers la dernière version du AWS CLI Guide de l'AWS Command Line Interface utilisateur.

  • Vous pouvez également exécuter des AWS CLI commandes depuis la console en utilisant AWS CloudShell. AWS CloudShell est un shell pré-authentifié basé sur un navigateur que vous pouvez lancer directement depuis le. AWS Management Console Pour plus d'informations, voir Qu'est-ce que c'est CloudShell ? et Mise en route AWS CloudShell dans le guide de AWS CloudShell l'utilisateur.

Étape 1 : Création d'un fichier volumineux

Si vous avez déjà un fichier prêt à être chargé, vous pouvez l'utiliser pour ce didacticiel. Sinon, créez un fichier de 15 Mo en suivant les étapes ci-dessous. Pour connaître les limites relatives aux téléchargements partitionnés, consultez. Limites de la fonction de chargement partitionné Amazon S3

Pour créer un fichier volumineux

Utilisez l'une des commandes suivantes pour créer votre fichier, selon le système d'exploitation que vous utilisez.

Linux ou macOS

Pour créer un fichier de 15 Mo, ouvrez votre terminal local et exécutez la commande suivante :

dd if=/dev/urandom of=census-data.bin bs=1M count=15

Cette commande crée un fichier nommé census-data.bin rempli d'octets aléatoires, d'une taille de 15 Mo.

Windows

Pour créer un fichier de 15 Mo, ouvrez votre terminal local et exécutez la commande suivante :

fsutil file createnew census-data.bin 15728640

Cette commande crée un fichier nommé census-data.bin avec une taille de 15 Mo de données arbitraires (15728640 octets).

Étape 2 : Divisez le fichier en plusieurs fichiers

Pour effectuer le téléchargement en plusieurs parties, vous devez diviser votre gros fichier en parties plus petites. Vous pouvez ensuite télécharger les plus petites parties en utilisant le processus de téléchargement en plusieurs parties. Cette étape montre comment diviser le fichier volumineux créé à l'étape 1 en plusieurs parties plus petites. L'exemple suivant utilise un fichier de 15 Mo nommécensus-data.bin.

Pour diviser un fichier volumineux en plusieurs parties

Linux ou macOS

Pour diviser le gros fichier en parties de 5 Mo, utilisez la split commande. Ouvrez votre terminal et exécutez ce qui suit :

split -b 5M -d census-data.bin census-part

Cette commande ** est census-data.bin divisée en parties de 5 Mo nomméescensus-part**, avec un suffixe numérique commençant par. 00

Windows

Pour diviser le gros fichier, utilisez PowerShell. Ouvrez Powershell et exécutez le script suivant :

$inputFile = "census-data.bin" $outputFilePrefix = "census-part" $chunkSize = 5MB $fs = [System.IO.File]::OpenRead($inputFile) $buffer = New-Object byte[] $chunkSize $fileNumber = 0 while ($fs.Position -lt $fs.Length) { $bytesRead = $fs.Read($buffer, 0, $chunkSize) $outputFile = "{0}{1:D2}" -f $outputFilePrefix, $fileNumber $fileStream = [System.IO.File]::Create($outputFile) $fileStream.Write($buffer, 0, $bytesRead) $fileStream.Close() $fileNumber++ } $fs.Close()

Ce PowerShell script lit le gros fichier par blocs de 5 Mo et écrit chaque bloc dans un nouveau fichier avec un suffixe numérique.

Après avoir exécuté la commande appropriée, vous devriez voir les parties du répertoire dans lequel vous l'avez exécutée. Chaque pièce aura un suffixe correspondant à son numéro de pièce, par exemple :

census-part00 census-part01 census-part02

Étape 3 : Création du téléchargement en plusieurs parties avec une somme de contrôle supplémentaire

Pour démarrer le processus de téléchargement partitionné, vous devez créer la demande de téléchargement partitionné. Cette étape consiste à lancer le téléchargement en plusieurs parties et à spécifier une somme de contrôle supplémentaire pour l'intégrité des données. L'exemple suivant utilise la somme de contrôle SHA -256. Si vous souhaitez fournir des métadonnées décrivant l'objet en cours de téléchargement, vous devez les fournir dans la demande pour lancer le téléchargement partitionné.

Note

Dans cette étape et dans les étapes suivantes, ce didacticiel utilise l'algorithme supplémentaire SHA -256. Vous pouvez éventuellement utiliser une autre somme de contrôle supplémentaire pour ces étapes, telle que CRC32CRC32C, ou SHA -1. Si vous utilisez un algorithme différent, vous devez l'utiliser tout au long des étapes du didacticiel.

Pour démarrer le téléchargement partitionné

Dans votre terminal, utilisez la create-multipart-upload commande suivante pour démarrer un téléchargement partitionné pour votre bucket. amzn-s3-demo-bucket1Remplacez-le par le nom de votre bucket actuel. Remplacez également le par le nom census_data_file de fichier que vous avez choisi. Ce nom de fichier devient la clé de l'objet une fois le téléchargement terminé.

aws s3api create-multipart-upload --bucket amzn-s3-demo-bucket1 --key 'census_data_file' --checksum-algorithm sha256

Si votre demande aboutit, vous verrez un JSON résultat semblable à ce qui suit :

{ "ServerSideEncryption": "AES256", "ChecksumAlgorithm": "SHA256", "Bucket": "amzn-s3-demo-bucket1", "Key": "census_data_file", "UploadId": "cNV6KCSNANFZapz1LUGPC5XwUVi1n6yUoIeSP138sNOKPeMhpKQRrbT9k0ePmgoOTCj9K83T4e2Gb5hQvNoNpCKqyb8m3.oyYgQNZD6FNJLBZluOIUyRE.qM5yhDTdhz" }
Note

Lorsque vous envoyez une demande pour lancer un chargement partitionné, Amazon S3 renvoie une réponse avec un ID de chargement, qui est un identifiant unique pour le chargement partitionné. Vous devez inclure cet ID de chargement dès que vous chargez les parties, listez les parties, terminez un chargement ou arrêtez un chargement. Vous devrez utiliser les Bucket valeurs UploadIdKey, et pour les étapes ultérieures. Veillez donc à les enregistrer.

De plus, si vous utilisez le téléchargement partitionné avec des sommes de contrôle supplémentaires, les numéros de pièce doivent être consécutifs. Si vous utilisez des numéros de pièce non consécutifs, la complete-multipart-upload demande peut aboutir à un HTTP500 Internal Server Error.

Étape 4 : Téléchargez les parties de votre téléchargement en plusieurs parties

Au cours de cette étape, vous allez télécharger les parties de votre téléchargement partitionné dans votre compartiment S3. Utilisez la upload-part commande pour télécharger chaque partie individuellement. Ce processus nécessite de spécifier l'ID de téléchargement, le numéro de pièce et le fichier à télécharger pour chaque partie.

Pour télécharger les pièces
  1. Lorsque vous chargez une pièce, en plus de l'ID de téléchargement, vous devez spécifier un numéro de pièce à l'aide de l'--part-numberargument. Vous pouvez choisir n'importe quel numéro de partie compris entre 1 et 10 000. Un numéro de partie identifie de manière unique une partie et sa place dans l'objet que vous chargez. Le numéro de pièce que vous choisissez doit figurer dans une séquence consécutive (par exemple, il peut être 1, 2 ou 3). Si vous chargez une nouvelle partie avec le même numéro qu'une partie précédemment chargée, cette dernière est remplacée.

  2. Utilisez la upload-part commande pour télécharger chaque partie de votre téléchargement partitionné. --upload-idC'est le même que dans la sortie créée par la create-multipart-upload commande à l'étape 3. Pour télécharger la première partie de vos données, utilisez la commande suivante :

    aws s3api upload-part --bucket amzn-s3-demo-bucket1 --key 'census_data_file' --part-number 1 --body census-part00 --upload-id "cNV6KCSNANFZapz1LUGPC5XwUVi1n6yUoIeSP138sNOKPeMhpKQRrbT9k0ePmgoOTCj9K83T4e2Gb5hQvNoNpCKqyb8m3.oyYgQNZD6FNJLBZluOIUyRE.qM5yhDTdhz" --checksum-algorithm SHA256

    À la fin de chaque upload-part commande, vous devriez voir un résultat comme dans l'exemple suivant :

    { "ServerSideEncryption": "AES256", "ETag": "\"e611693805e812ef37f96c9937605e69\"", "ChecksumSHA256": "QLl8R4i4+SaJlrl8ZIcutc5TbZtwt2NwB8lTXkd3GH0=" }
  3. Pour les pièces suivantes, incrémentez le numéro de pièce en conséquence :

    aws s3api upload-part --bucket amzn-s3-demo-bucket1 --key 'census_data_file' --part-number <part-number> --body <file-path> --upload-id "<your-upload-id>" --checksum-algorithm SHA256

    Par exemple, utilisez la commande suivante pour télécharger la deuxième partie :

    aws s3api upload-part --bucket amzn-s3-demo-bucket1 --key 'census_data_file' --part-number 2 --body census-part01 --upload-id "cNV6KCSNANFZapz1LUGPC5XwUVi1n6yUoIeSP138sNOKPeMhpKQRrbT9k0ePmgoOTCj9K83T4e2Gb5hQvNoNpCKqyb8m3.oyYgQNZD6FNJLBZluOIUyRE.qM5yhDTdhz" --checksum-algorithm SHA256

    Amazon S3 renvoie un tag d'entité (ETag) et des sommes de contrôle supplémentaires pour chaque partie téléchargée sous forme d'en-tête dans la réponse.

  4. Continuez à utiliser la upload-part commande jusqu'à ce que vous ayez chargé toutes les parties de votre objet.

Étape 5 : Répertoriez toutes les parties de votre téléchargement partitionné

Pour terminer le téléchargement partitionné, vous aurez besoin d'une liste de toutes les parties qui ont été chargées pour ce téléchargement partitionné spécifique. Le résultat de la list-parts commande fournit des informations telles que le nom du compartiment, la clé, l'ID de téléchargement, le numéro de pièceeTag, des sommes de contrôle supplémentaires, etc. Il est utile d'enregistrer cette sortie dans un fichier afin de pouvoir l'utiliser à l'étape suivante lorsque vous terminerez le processus de téléchargement en plusieurs parties. Vous pouvez créer un fichier JSON de sortie appelé parts.json en utilisant la méthode suivante.

Pour créer un fichier répertoriant toutes les pièces
  1. Pour générer un JSON fichier contenant les détails de toutes les parties téléchargées, utilisez la list-parts commande suivante. amzn-s3-demo-bucket1Remplacez-le par le nom réel de votre bucket et <your-upload-id> par l'ID de téléchargement que vous avez reçu à l'étape 3. Pour plus d'informations sur la list-parts commande, voir list-parts dans le guide de l'utilisateur AWS Command Line Interface .

    aws s3api list-parts --bucket amzn-s3-demo-bucket1 --key 'census_data_file' --upload-id <your-upload-id> --query '{Parts: Parts[*].{PartNumber: PartNumber, ETag: ETag, ChecksumSHA256: ChecksumSHA256}}' --output json > parts.json

    Un nouveau fichier appelé parts.json est généré. Le fichier contient les informations JSON formatées pour toutes les parties que vous avez téléchargées. Le parts.json fichier contient des informations essentielles pour chaque partie de votre téléchargement partitionné, telles que les numéros de pièce et les ETag valeurs correspondantes, qui sont nécessaires pour terminer le processus de téléchargement partitionné.

  2. Ouvrez à parts.json l'aide de n'importe quel éditeur de texte ou via le terminal. Voici l'exemple de sortie :

    { "Parts": [ { "PartNumber": 1, "ETag": "\"3c3097f89e2a2fece47ac54b243c9d97\"", "ChecksumSHA256": "fTPVHfyNHdv5VkR4S3EewdyioXECv7JBxN+d4FXYYTw=" }, { "PartNumber": 2, "ETag": "\"03c71cc160261b20ab74f6d2c476b450\"", "ChecksumSHA256": "VDWTa8enjOvULBAO3W2a6C+5/7ZnNjrnLApa1QVc3FE=" }, { "PartNumber": 3, "ETag": "\"81ae0937404429a97967dffa7eb4affb\"", "ChecksumSHA256": "cVVkXehUlzcwrBrXgPIM+EKQXPUvWist8mlUTCs4bg8=" } ] }

Étape 6 : terminer le téléchargement en plusieurs parties

Après avoir chargé toutes les parties de votre téléchargement partitionné et les avoir listées, la dernière étape consiste à terminer le téléchargement partitionné. Cette étape fusionne toutes les parties téléchargées en un seul objet dans votre compartiment S3.

Note

Vous pouvez calculer la somme de contrôle de l'objet avant d'appeler complete-multipart-upload en l'incluant --checksum-sha256 dans votre demande. Si les sommes de contrôle ne correspondent pas, Amazon S3 échoue à la demande. Pour plus d’informations, consultez .complete-multipart-upload dans le guide de l'utilisateur AWS Command Line Interface .

Pour terminer le téléchargement en plusieurs parties

Pour finaliser le téléchargement partitionné, utilisez la complete-multipart-upload commande. Cette commande nécessite le parts.json fichier créé à l'étape 5, le nom de votre compartiment et l'ID de téléchargement. <amzn-s3-demo-bucket1>Remplacez-le par le nom de votre compartiment et <your-upload-id> par l'ID de téléchargement departs.json.

aws s3api complete-multipart-upload --multipart-upload file://parts.json --bucket amzn-s3-demo-bucket1 --key 'census_data_file' --upload-id <your-upload-id>

Voici l'exemple de sortie :

{ "ServerSideEncryption": "AES256", "Location": "https://amzn-s3-demo-bucket1.s3.us-east-2.amazonaws.com/census_data_file", "Bucket": "amzn-s3-demo-bucket1", "Key": "census_data_file", "ETag": "\"f453c6dccca969c457efdf9b1361e291-3\"", "ChecksumSHA256": "aI8EoktCdotjU8Bq46DrPCxQCGuGcPIhJ51noWs6hvk=-3" }
Note

Ne supprimez pas encore les fichiers de pièces individuels. Vous aurez besoin des pièces individuelles pour pouvoir effectuer des checksums sur celles-ci afin de vérifier l'intégrité de l'objet fusionné.

Étape 7 : Vérifiez que l'objet est chargé dans votre bucket

Une fois le téléchargement partitionné terminé, vous pouvez vérifier que l'objet a bien été chargé dans votre compartiment S3. Pour répertorier les objets de votre bucket et confirmer la présence du fichier que vous venez de télécharger, utilisez la list-objects-v2 commande

Pour répertorier l'objet chargé

Pour répertorier les objets qu'il contient, utilisez le bucket de list-objects-v2 commandes. Remplacez amzn-s3-demo-bucket1 par le nom de votre bucket actuel :

aws s3api list-objects-v2 --bucket amzn-s3-demo-bucket1

Cette commande renvoie la liste des objets de votre compartiment. Recherchez le fichier que vous avez chargé (par exemple,census_data_file) dans la liste des objets.

Pour plus d'informations, consultez la section Exemples de list-objects-v2 commande dans le Guide de AWS Command Line Interface l'utilisateur.

Étape 8 : vérifier l'intégrité de l'objet à l'aide d'une somme MD5 de contrôle

Lorsque vous chargez un objet, vous pouvez spécifier un algorithme de somme de contrôle à utiliser par Amazon S3. Par défaut, Amazon S3 stocke le MD5 condensé d'octets sous la forme de celui de l'objetETag. Pour les chargements partitionnés, ETag il ne s'agit pas de la somme de contrôle pour l'ensemble de l'objet, mais plutôt d'un composite des sommes de contrôle pour chaque partie individuelle.

Pour vérifier l'intégrité d'un objet à l'aide d'une somme MD5 de contrôle
  1. Pour récupérer ETag l'objet téléchargé, effectuez une head-object requête :

    aws s3api head-object --bucket amzn-s3-demo-bucket1 --key census_data_file

    Voici l'exemple de sortie :

    { "AcceptRanges": "bytes", "LastModified": "2024-07-26T19:04:13+00:00", "ContentLength": 16106127360, "ETag": "\"f453c6dccca969c457efdf9b1361e291-3\"", "ContentType": "binary/octet-stream", "ServerSideEncryption": "AES256", "Metadata": {} }

    Le mot « -3 » est ajouté à la fin de cette étape. Cela indique que l'objet a été chargé en trois parties à l'aide du téléchargement partitionné.

  2. Ensuite, calculez la MD5 somme de contrôle de chaque pièce à l'aide de la md5sum commande. Assurez-vous de fournir le bon chemin d'accès à vos fichiers de pièces :

    md5sum census-part*

    Voici l'exemple de sortie :

    e611693805e812ef37f96c9937605e69 census-part00 63d2d5da159178785bfd6b6a5c635854 census-part01 95b87c7db852451bb38b3b44a4e6d310 census-part02
  3. Pour cette étape, combinez manuellement les MD5 hachages en une seule chaîne. Exécutez ensuite la commande suivante pour convertir la chaîne en binaire et calculer la MD5 somme de contrôle de la valeur binaire :

    echo "e611693805e812ef37f96c9937605e6963d2d5da159178785bfd6b6a5c63585495b87c7db852451bb38b3b44a4e6d310" | xxd -r -p | md5sum

    Voici l'exemple de sortie :

    f453c6dccca969c457efdf9b1361e291 -

    Cette valeur de hachage doit correspondre à la valeur de hachage de la ETag valeur d'origine de l'étape 1, qui valide l'intégrité de l'objet. census_data_file

Lorsque vous demandez à Amazon S3 d'utiliser des totaux de contrôle supplémentaires, Amazon S3 calcule la valeur du total de contrôle pour chaque partie et stocke les valeurs. Si vous souhaitez récupérer les valeurs de contrôle pour les différentes parties des téléchargements partitionnés toujours en cours, vous pouvez utiliser. list-parts

Pour plus d'informations sur le fonctionnement des checksums avec les objets de téléchargement partitionné, consultez. Vérification de l'intégrité des objets

Étape 9 : vérifier l'intégrité de l'objet à l'aide d'une somme de contrôle supplémentaire

Dans cette étape, ce didacticiel utilise SHA -256 comme somme de contrôle supplémentaire pour valider l'intégrité des objets. Si vous avez utilisé une somme de contrôle supplémentaire différente, utilisez plutôt cette valeur de contrôle.

Pour vérifier l'intégrité des objets avec SHA256
  1. Exécutez la commande suivante dans votre terminal, y compris l'--checksum-mode enabledargument, pour afficher la ChecksumSHA256 valeur de votre objet :

    aws s3api head-object --bucket amzn-s3-demo-bucket1 --key census_data_file --checksum-mode enabled

    Voici l'exemple de sortie :

    { "AcceptRanges": "bytes", "LastModified": "2024-07-26T19:04:13+00:00", "ContentLength": 16106127360, "ChecksumSHA256": "aI8EoktCdotjU8Bq46DrPCxQCGuGcPIhJ51noWs6hvk=-3", "ETag": "\"f453c6dccca969c457efdf9b1361e291-3\"", "ContentType": "binary/octet-stream", "ServerSideEncryption": "AES256", "Metadata": {} }
  2. Utilisez les commandes suivantes pour décoder les ChecksumSHA256 valeurs des différentes parties en base64 et les enregistrer dans un fichier binaire appelé. outfile Ces valeurs se trouvent dans votre parts.json fichier. Remplacez les exemples de chaînes base64 par vos ChecksumSHA256 valeurs réelles.

    echo "QLl8R4i4+SaJlrl8ZIcutc5TbZtwt2NwB8lTXkd3GH0=" | base64 --decode >> outfile echo "xCdgs1K5Bm4jWETYw/CmGYr+m6O2DcGfpckx5NVokvE=" | base64 --decode >> outfile echo "f5wsfsa5bB+yXuwzqG1Bst91uYneqGD3CCidpb54mAo=" | base64 --decode >> outfile
  3. Exécutez la commande suivante pour calculer la SHA256 somme de contrôle de outfile :

    sha256sum outfile

    Voici l'exemple de sortie :

    688f04a24b42768b6353c06ae3a0eb3c2c50086b8670f221279d67a16b3a86f9 outfile

    À l'étape suivante, prenez la valeur de hachage et convertissez-la en valeur binaire. Cette valeur binaire doit correspondre à la ChecksumSHA256 valeur de l'étape 1.

  4. Convertissez la SHA256 somme de contrôle de l'étape 3 en binaire, puis encodez-la en base64 pour vérifier qu'elle correspond à la ChecksumSHA256 valeur de l'étape 1 :

    echo "688f04a24b42768b6353c06ae3a0eb3c2c50086b8670f221279d67a16b3a86f9" | xxd -r -p | base64

    Voici l'exemple de sortie :

    aI8EoktCdotjU8Bq46DrPCxQCGuGcPIhJ51noWs6hvk=

    Cette sortie doit confirmer que la sortie base64 correspond à la ChecksumSHA256 valeur de la sortie de head-object commande. Si le résultat correspond à la valeur de la somme de contrôle, l'objet est valide.

Important
  • Lorsque vous demandez à Amazon S3 d'utiliser des sommes de contrôle supplémentaires, Amazon S3 calcule les valeurs de somme de contrôle pour chaque partie et stocke ces valeurs.

  • Si vous souhaitez récupérer les valeurs de contrôle pour les différentes parties des téléchargements partitionnés toujours en cours, vous pouvez utiliser la commande. list-parts

Étape 10 : Nettoyer vos ressources

Si vous souhaitez nettoyer les fichiers créés dans ce didacticiel, appliquez la méthode suivante. Pour obtenir des instructions sur la suppression des fichiers chargés dans votre compartiment S3, consultezSuppression d'objets Amazon S3.

Supprimez les fichiers locaux créés à l'étape 1 :

Pour supprimer les fichiers que vous avez créés pour votre téléchargement partitionné, exécutez la commande suivante depuis votre répertoire de travail :

rm census-data.bin census-part* outfile parts.json