Chargement et copie d'objets à l'aide d'un chargement partitionné - 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.

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

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.

L'utilisation du chargement partitionné offre les avantages suivants :

  • Improved throughput (Meilleur débit) — vous pouvez charger des parties en parallèle pour améliorer le débit.

  • Quick recovery from any network issues (Récupération rapide après des problèmes réseau) — la taille réduite des parties minimise l'impact du redémarrage d'un chargement qui a échoué en raison d'une erreur de réseau.

  • Pause and resume object uploads (Interruption et reprise des chargements d'objet) — vous pouvez charger des parties d'objet au fil du temps. Après le lancement d'un chargement partitionné, il n'y a aucune date d'expiration ; vous devez explicitement le terminer ou l'arrêter.

  • Begin an upload before you know the final object size (Lancement d'un chargement avant de connaître la taille finale de l'objet) — vous pouvez charger un objet à mesure que vous le créez.

Nous vous recommandons d'utiliser le chargement partitionné comme suit :

  • Si vous chargez des objets volumineux sur un réseau à large bande passante stable, utilisez le chargement partitionné pour optimiser l'utilisation de la bande passante disponible en chargeant des parties d'objet en parallèle pour bénéficier de performances multithreads.

  • Si vous effectuez un chargement sur un réseau irrégulier, utilisez le chargement partitionné pour augmenter la résilience aux erreurs réseau en évitant les redémarrages du chargement. Lorsque vous utilisez le chargement partitionné, vous avez besoin de relancer le chargement uniquement pour les parties d'objet dont le chargement a été interrompu. Vous n'avez pas besoin de redémarrer le chargement de vos objets depuis le début.

Note

Pour plus d’informations sur l’utilisation de la classe de stockage Amazon S3 Express One Zone avec des compartiments de répertoires, consultez Qu’est-ce que S3 Express One Zone ? et Compartiments de répertoire. Pour plus d’informations sur l’utilisation du chargement partitionné avec S3 Express One Zone et les compartiments de répertoires, consultez Utilisation de téléchargements partitionnés avec des compartiments de répertoires.

Processus de chargement partitionné

Le chargement partitionné est un processus en trois étapes : vous lancez le chargement, vous chargez les parties de l'objet, et une fois toutes les parties chargées, vous terminez le chargement partitionné. Dès réception de la demande de fin de chargement partitionné, Amazon S3 crée l'objet à partir des parties chargées pour que vous puissiez ensuite y accéder comme vous le feriez avec n'importe quel autre objet du compartiment.

Vous pouvez lister tous vos chargements partitionnés en cours ou obtenir une liste des parties que vous avez chargées pour un chargement partitionné spécifique. Chacune de ces opérations est expliquée dans cette section.

Lancement du chargement partitionné

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. Si vous souhaitez fournir des métadonnées qui décrivent l'objet en cours de chargement, vous devez le faire dans la demande de lancement du chargement partitionné.

Chargement de parties

Lorsque vous chargez une partie, outre l'ID de chargement, vous devez spécifier un numéro de partie. 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 partie que vous choisissez ne doit pas obligatoirement constituer une séquence consécutive (par exemple, cela peut être 1, 5 et 14). 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.

Lorsque vous chargez une partie, Amazon S3 renvoie une balise d'entité (ETag) pour la partie sous forme d'en-tête dans la réponse. Pour chaque téléchargement partiel, vous devez enregistrer le numéro de pièce et la ETag valeur. Vous devez inclure ces valeurs dans la demande ultérieure pour terminer le chargement partitionné. Chaque partie aura la sienne ETag au moment du téléchargement. Cependant, une fois le téléchargement en plusieurs parties terminé et que toutes les parties sont consolidées, toutes les parties seront regroupées sous une seule ETag sous forme de somme de contrôle des sommes de contrôle.

Note

Après avoir lancé un chargement partitionné et chargé une ou plusieurs parties, vous devez terminer ou arrêter le chargement partitionné afin que le stockage des parties chargées cesse de vous être facturé. C'est seulement après la fin ou l'arrêt d'un chargement partitionné qu'Amazon S3 libère le stockage des parties et cesse de vous le facturer.

Après avoir arrêté un chargement partitionné, vous ne pouvez pas charger de partie avec le même ID de chargement. Si des chargements de partie étaient en cours, ils peuvent encore aboutir ou échouer, même après un arrêt du chargement. Pour être sûr de libérer tout le stockage consommé par toutes les parties, vous devez arrêter un chargement partitionné seulement après que tous les chargements partiels aient été complétés.

Fin du chargement partitionné

Lorsque vous terminez un chargement partitionné, Amazon S3 crée un objet en concaténant les parties par ordre croissant en fonction des numéros de partie. Si des métadonnées d'objet sont fournies dans la demande de lancement du chargement partitionné, Amazon S3 les associe à l'objet. À l'issue d'une demande de chargement complet, les parties n'existent plus.

Votre demande complète de téléchargement en plusieurs parties doit inclure l'ID de téléchargement et une liste des numéros de pièce et des ETag valeurs correspondantes. La réponse Amazon S3 inclut un ETag identifiant unique les données d'objet combinées. Il ne ETag s'agit pas nécessairement d'un MD5 hachage des données de l'objet.

Exemples d'appels de chargement partitionné

Pour cet exemple, supposons que vous générez un chargement partitionné pour un fichier de 100 Go. Dans ce cas, vous recevrez les API appels suivants pour l'ensemble du processus. Il y aurait un total de 1002 API appels.

Listes de chargement partitionné

Vous pouvez lister les parties d'un chargement partitionné spécifique ou de tous les chargements partitionnés en cours. L'opération de liste des parties renvoie des informations sur les parties que vous avez chargées pour un chargement partitionné spécifique. Pour chaque demande de liste des parties, Amazon S3 renvoie des informations sur les parties pour le chargement partitionné spécifié, pour 1 000 parties maximum. S'il y a plus de 1 000 parties dans le chargement partitionné, vous devez envoyer une série de demandes de liste des parties pour récupérer toutes les parties. Notez que la liste des parties retournée n'inclut pas les parties qui n'ont pas fini d'être chargées. En utilisant l'opération d'affichage des chargements partitionnés, vous pouvez obtenir la liste des chargements partitionnés qui sont en cours.

Un chargement partitionné en cours est un chargement que vous avez lancé, mais que vous n'avez pas encore terminé ou arrêté. Chaque demande renvoie 1,000 chargements partitionnés maximum. S'il y a plus de 1 000 chargements partitionnés en cours, vous devez envoyer des demandes supplémentaires pour récupérer les chargements partitionnés restants. Utilisez la liste renvoyée uniquement pour la vérification. N'utilisez pas le résultat de la liste lorsque vous envoyez une requête de chargement partitionné complet. Conservez plutôt votre propre liste des numéros de pièce que vous avez spécifiés lors du chargement des pièces et des ETag valeurs correspondantes renvoyées par Amazon S3.

Totaux de contrôle avec les opérations de chargement partitionné

Lorsque vous chargez un objet sur Simple Storage Service (Amazon S3), vous pouvez spécifier un algorithme de total de contrôle à utiliser par Amazon S3. Amazon S3 l'utilise MD5 par défaut pour vérifier l'intégrité des données ; vous pouvez toutefois spécifier un algorithme de somme de contrôle supplémentaire à utiliser. Lors de l'utilisationMD5, Amazon S3 calcule la somme de contrôle de l'ensemble de l'objet en plusieurs parties une fois le téléchargement terminé. Ce total de contrôle n'est pas un total de contrôle de l'objet entier, mais plutôt un total de contrôle des totaux de contrôle de chaque partie individuelle.

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. Vous pouvez utiliser API ou SDK pour récupérer la valeur de la somme de contrôle pour des pièces individuelles en utilisant GetObject ouHeadObject. Pour récupérer les valeurs de contrôle des parties individuelles de téléchargements partitionnés toujours en cours, vous pouvez utiliser ListParts.

Important

Si vous utilisez un chargement partitionné avec des totaux de contrôle supplémentaires, les numéros de parties partitionnés doivent utiliser des numéros de parties consécutifs. Lorsque vous utilisez des checksums supplémentaires, si vous essayez de traiter une demande de téléchargement partitionné avec des numéros de pièce non consécutifs, Amazon S3 génère une erreur. HTTP 500 Internal Server Error

Pour obtenir plus d'informations sur le fonctionnement des totaux de contrôle avec les objets en plusieurs parties, consultez Vérification de l'intégrité des objets.

Opérations simultanées de chargement partitionné

Dans un environnement de développement distribué, il est possible pour l'application de lancer plusieurs mises à jour sur le même objet en même temps. L'application doit lancer plusieurs chargements partitionnés grâce à la même clé d'objet. Pour chacun de ces chargements, l'application peut ensuite charger des parties et envoyer une demande de chargement complet à Amazon S3 pour créer l'objet. Lorsque les compartiments sont activés pour la gestion des versions S3, un chargement partitionné terminé crée toujours une nouvelle version. Lorsque vous lancez plusieurs téléchargements partitionnés qui utilisent la même clé d'objet dans un compartiment activé pour la gestion des versions, la version actuelle de l'objet est déterminée par le téléchargement le plus récent (). createdDate Supposons, par exemple, que vous lancez une CreateMultipartUpload demande pour un objet à 10 h 00. Ensuite, vous soumettez une deuxième CreateMultipartUpload demande pour le même objet à 11 h 00. Comme la deuxième demande a été soumise le plus récemment, l'objet chargé par la demande de 11 h 00 sera la version actuelle, même si le premier téléchargement est terminé après le second. Pour les compartiments qui ne sont pas activés pour le contrôle de version, il est possible que d'autres demandes reçues entre le début et la fin d'un chargement partitionné priment.

Note

Il est possible que d'autres demandes reçues entre le début et la fin d'un chargement partitionné priment. Par exemple, si une autre opération supprime une clé entre le début et la fin d'un chargement partitionné avec cette même clé, la réponse du chargement partitionné complet peut indiquer une création d'objet réussie sans que n'ayez jamais vu l'objet.

Empêcher le téléchargement d'objets portant des noms de clé identiques lors du téléchargement en plusieurs parties

Vous pouvez vérifier l'existence d'un objet dans votre compartiment avant de le créer à l'aide d'une écriture conditionnelle lors des opérations de téléchargement. Cela permet d'éviter le remplacement de données existantes. Les écritures conditionnelles valideront qu'aucun objet portant le même nom de clé ne se trouve déjà dans votre compartiment lors du téléchargement.

Vous pouvez utiliser des écritures conditionnelles pour PutObjectou CompleteMultipartUploaddes demandes.

Pour plus d'informations sur les demandes conditionnelles, voir,Ajoutez des conditions préalables aux opérations S3 avec des requêtes conditionnelles.

Chargement partitionné et tarification

Lorsque vous lancez un chargement partitionné, Amazon S3 conserve toutes les parties jusqu'à ce que vous terminiez ou arrêtiez le chargement. Tout au long de sa durée de vie, le stockage, la bande passante et les demandes pour ce chargement partitionné ainsi que ses parties associées vous sont facturés.

Ces parties sont facturées en fonction de la classe de stockage spécifiée lors du chargement des parties. Les parties qui ont été chargées dans S3 Glacier Flexible Retrieval ou S3 Glacier Deep Archive constituent une exception à cette règle. Les parties partitionnées en cours PUT pour une classe de stockage S3 Glacier Flexible Retrieval sont facturées en tant que stockage intermédiaire S3 Glacier Flexible Retrieval aux tarifs de stockage standard S3 jusqu'à la fin du téléchargement. De plus, CreateMultipartUpload les deux UploadPart sont facturés aux tarifs standard S3. Seule la CompleteMultipartUpload demande est facturée au tarif S3 Glacier Flexible Retrieval. De même, les parties partitionnées en cours PUT pour une classe de stockage S3 Glacier Deep Archive sont facturées en tant que stockage intermédiaire flexible de récupération S3 Glacier aux tarifs de stockage standard S3 jusqu'à la fin du téléchargement, seule la CompleteMultipartUpload demande étant facturée aux tarifs S3 Glacier Deep Archive.

Si vous arrêtez le chargement partitionné, Amazon S3 supprime les artefacts et les parties que vous avez chargées, et ils ne vous sont plus facturés. Aucuns frais de suppression anticipée ne sont facturés pour la suppression de chargements partitionnés incomplets, quelle que soit la classe de stockage spécifiée. Pour plus d’informations sur la tarification, consultez Tarification Amazon S3.

Note

Pour réduire vos coûts de stockage, nous vous recommandons de configurer une règle du cycle de vie pour supprimer les chargements partitionnés incomplets après un certain nombre de jours à l'aide de l'action AbortIncompleteMultipartUpload. Pour plus d'informations sur la création d'une règle de cycle de vie pour supprimer les chargements partitionnés incomplets, consultez Configuration d'une politique de cycle de vie de compartiment pour abandonner les chargements multiparties incomplets.

Prise en charge d'API pour le chargement partitionné

Ces bibliothèques fournissent une abstraction de haut niveau qui simplifie le chargement partitionné des objets. Toutefois, si votre application l'exige, vous pouvez l'utiliser REST API directement. Les sections suivantes du manuel Amazon Simple Storage Service API Reference décrivent REST API le chargement partitionné.

Pour une procédure de téléchargement en plusieurs parties qui utilise AWS Fonctions Lambda, consultez la section Chargement d'objets volumineux sur Amazon S3 à l'aide du chargement en plusieurs parties et de l'accélération du transfert.

AWS Command Line Interface support pour le téléchargement partitionné

Les rubriques suivantes du AWS Command Line Interface décrire les opérations de téléchargement partitionné.

AWS Prise en charge d'SDK pour le chargement partitionné

Vous pouvez utiliser un AWS SDKspour télécharger un objet en plusieurs parties. Pour une liste des AWS SDKssoutenu par l'APIaction, voir :

Téléchargement en plusieurs parties API et autorisations

Vous devez posséder les autorisations nécessaires pour utiliser les opérations de chargement partitionné. Vous pouvez utiliser les listes de contrôle d'accès (ACLs), la politique des compartiments ou la politique utilisateur pour autoriser les individus à effectuer ces opérations. Le tableau suivant répertorie les autorisations requises pour les différentes opérations de téléchargement partitionné lors de l'utilisation ACLs d'une politique de compartiment ou d'une politique utilisateur.

Action Autorisations requises

Créer un chargement partitionné

Vous devez être autorisé à exécuter l'action s3:PutObject sur un objet pour créer un chargement partitionné.

Le propriétaire du compartiment peut autoriser d'autres personnes habilitées à exécuter l'action s3:PutObject.

Lancement du chargement partitionné

Vous devez être autorisé à exécuter l'action s3:PutObject sur un objet pour lancer le chargement partitionné.

Le propriétaire du compartiment peut autoriser d'autres personnes habilitées à exécuter l'action s3:PutObject.

Initiateur

Elément du conteneur qui identifie l'initiateur du chargement partitionné. Si l'initiateur est un Compte AWS, cet élément fournit les mêmes informations que l'élément Propriétaire. Si l'initiateur est un IAM utilisateur, cet élément fournit l'utilisateur ARN et le nom d'affichage.

Chargement d'une partie

Vous devez être autorisé à exécuter l'action s3:PutObject sur un objet pour charger une partie.

Le propriétaire du compartiment doit autoriser l'initiateur à exécuter l'action s3:PutObject sur un objet pour que ce dernier charge une partie pour cet objet.

Chargement d'une partie (Copy)

Vous devez être autorisé à exécuter l'action s3:PutObject sur un objet pour charger une partie. Sachant que vous chargez une partie d'un objet existant, vous devez être autorisé à exécuter l'action s3:GetObject sur l'objet source.

Pour que l'initiateur puisse charger une partie pour un objet, le propriétaire du compartiment doit l'autoriser à effectuer l'action s3:PutObject sur l'objet.

Achèvement du chargement partitionné

Vous devez être autorisé à exécuter l'action s3:PutObject sur un objet pour terminer le chargement partitionné.

Le propriétaire du compartiment doit autoriser l'initiateur à exécuter l'action s3:PutObject sur un objet pour que ce dernier termine un chargement partitionné pour cet objet.

Arrêt du chargement partitionné

Vous devez être autorisé à exécuter l'action s3:AbortMultipartUpload pour arrêter un chargement partitionné.

Par défaut, le propriétaire du bucket et l'initiateur du téléchargement partitionné sont autorisés à effectuer cette action dans le cadre IAM des politiques du bucket. Si l'initiateur est un IAM utilisateur, celui-ci Compte AWS est également autorisé à arrêter ce téléchargement partitionné. Avec les politiques relatives aux VPC terminaux, l'initiateur du téléchargement en plusieurs parties n'obtient pas automatiquement l'autorisation d'effectuer l's3:AbortMultipartUploadaction.

Outre ces paramètres par défaut, le propriétaire du compartiment peut autoriser d'autres principaux à être habilité à exécuter l'action s3:AbortMultipartUpload sur un objet. Le propriétaire du compartiment peut refuser que tout principal soit habilité à exécuter l'action s3:AbortMultipartUpload.

Liste des parties

Vous devez être autorisé à exécuter l'action s3:ListMultipartUploadParts sur un objet pour lister les parties lors d'un chargement partitionné.

Par défaut, le propriétaire du compartiment est autorisé à lister les parties pour tout chargement partitionné dans le compartiment. L'initiateur du chargement partitionné est autorisé à lister les parties du chargement partitionné spécifique. Si l'initiateur du téléchargement partitionné est un IAM utilisateur, Compte AWS contrôlant cet IAM utilisateur est également autorisé à répertorier les parties de ce téléchargement.

Outre ces paramètres par défaut, le propriétaire du compartiment peut autoriser d'autres principaux à être habilité à exécuter l'action s3:ListMultipartUploadParts sur un objet. Le propriétaire du compartiment peut également refuser que tout principal soit habilité à exécuter l'action s3:ListMultipartUploadParts.

Liste des chargements partitionnés

Vous devez être autorisé à exécuter l'action s3:ListBucketMultipartUploads sur un compartiment pour lister les chargements partitionnés en cours dans ce compartiment.

Outre ces paramètres par défaut, le propriétaire du compartiment peut autoriser d'autres personnes habilitées à exécuter l'action s3:ListBucketMultipartUploads sur le compartiment.

AWS KMS Chiffrer et déchiffrer les autorisations associées

Pour effectuer un téléchargement partitionné avec chiffrement à l'aide d'un AWS Key Management Service (AWS KMS)KMS, le demandeur doit être autorisé à effectuer les kms:GenerateDataKey actions kms:Decrypt et sur la clé. Le demandeur doit également disposer des autorisations nécessaires pour effectuer l'kms:GenerateDataKeyaction pour CreateMultipartUploadAPI. Ensuite, le demandeur a besoin d'autorisations pour effectuer l'kms:Decryptaction sur le UploadPart et UploadPartCopyAPIs. Ces autorisations sont requises, car Simple Storage Service (Amazon S3) doit déchiffrer et lire les données des parties de fichier chiffrées avant de terminer le chargement partitionné.

Si votre IAM utilisateur ou votre rôle est identique Compte AWS en tant que KMS clé, vous devez alors disposer de ces autorisations sur la politique clé. Si votre IAM utilisateur ou votre rôle appartient à un compte différent de celui de la KMS clé, vous devez disposer des autorisations nécessaires à la fois sur la politique clé et sur votre IAM utilisateur ou rôle.

Pour plus d'informations sur la relation entre les ACL autorisations et les autorisations dans les politiques d'accès, consultezCartographie des ACL autorisations et des autorisations liées à la politique d'accès. Pour plus d'informations sur IAM les utilisateurs, les rôles et les meilleures pratiques, consultez la section IAMIdentités (utilisateurs, groupes d'utilisateurs et rôles) dans le guide de IAM l'utilisateur.