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 étiquette d'entité (ETag) pour la partie sous forme d'en-tête dans la réponse. Pour chaque chargement de partie, vous devez enregistrer le numéro de partie et la valeur ETag. Vous devez inclure ces valeurs dans la demande ultérieure pour terminer le chargement partitionné. Chaque partie aura son propre ETag au moment du téléchargement. Cependant, une fois le téléchargement en plusieurs parties terminé et toutes les parties consolidées, toutes les parties seront regroupées sous un seul 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.

La demande de chargement partitionné complet doit inclure l'ID de chargement et une liste des numéros de partie et des valeurs ETag correspondantes. La réponse d'Amazon S3 inclut une valeur ETag qui identifie de façon unique les données d'objet combinées. Cet ETag n'est pas nécessairement un hachage MD5 des données d'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 recevez les appels d'API suivants pour l'ensemble du processus. Il y a un total de 1002 appels d'API.

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. Au lieu de cela, conservez votre propre liste des numéros de parties que vous avez spécifiés lors du chargement des parties ainsi que les valeurs ETag 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. Simple Storage Service (Amazon S3) utilise MD5 par défaut pour vérifier l'intégrité des données ; toutefois, vous pouvez spécifier un autre algorithme de total de contrôle à utiliser. Si vous utilisez MD5, Amazon S3 calcule le total de contrôle de l'ensemble de l'objet en plusieurs parties une fois le 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 l'API ou le kit SDK pour récupérer la valeur du total de contrôle pour des parties individuelles en utilisant GetObject ou HeadObject. 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 totaux de contrôle supplémentaires, si vous essayez de compléter une requête de chargement partitionné avec des numéros de parties non consécutifs, Amazon S3 génère une erreur 500 Internal Server Error HTTP.

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. 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.

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 multipartites en cours d'exécution d'une commande PUT vers la classe de stockage S3 Glacier Flexible Retrieval sont facturées en tant que stockage de transit S3 Glacier Flexible Retrieval aux tarifs de stockage S3 Standard jusqu'à ce que le chargement soit terminé. 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 pour un PUT vers la classe de stockage S3 Glacier Deep Archive sont facturées en tant que stockage intermédiaire flexible S3 Glacier aux taux 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 de l'API pour le chargement partitionné

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

Pour une procédure de téléchargement en plusieurs parties utilisant les fonctions AWS 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 AWS Command Line Interface décrivent les opérations de téléchargement partitionné.

AWS Support du SDK pour le téléchargement en plusieurs parties

Vous pouvez utiliser un AWS SDK pour télécharger un objet en plusieurs parties. Pour obtenir la liste des AWS SDK pris en charge par l'action de l'API, voir :

API de chargement partitionné et autorisations

Vous devez posséder les autorisations nécessaires pour utiliser les opérations de chargement partitionné. Vous pouvez utiliser les listes ACL, la stratégie de compartiment ou la stratégie d'utilisateur pour autoriser des individus à exécuter ces opérations. Le tableau suivant liste les autorisations nécessaires pour les différentes opérations de chargement partitionné si vous utilisez des listes ACL, une stratégie de compartiment ou une stratégie d'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 Owner. Si l'initiateur est un utilisateur IAM, cet élément fournit l'ARN utilisateur et le nom complet.

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 compartiment et l'initiateur du chargement partitionné sont autorisés à exécuter cette action dans le cadre des politiques IAM et de compartiment. Si l'initiateur est un utilisateur IAM, celui-ci Compte AWS est également autorisé à arrêter ce téléchargement partitionné. Dans le cadre des politiques de point de terminaison de VPC, l'initiateur du chargement partitionné n'a pas automatiquement l'autorisation d'effectuer l'action s3:AbortMultipartUpload.

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 utilisateur IAM, l'utilisateur IAM Compte AWS contrôlant cet 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'une clé KMS AWS Key Management Service (AWS KMS), le demandeur doit être autorisé à effectuer les kms:GenerateDataKey actions kms:Decrypt et sur la clé. 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é.

Pour plus d'informations, consultez Chargement d'un fichier volumineux vers Amazon S3 avec chiffrement à l'aide d'une AWS KMS key que vous trouverez dans le AWS Centre de connaissances.

Si votre utilisateur ou rôle IAM est Compte AWS identique à celui de la clé KMS, vous devez disposer de ces autorisations sur la politique de clé. Si votre utilisateur ou rôle IAM appartient à un autre compte que la clé KMS, vous devez disposer des autorisations sur la politique de clé et votre utilisateur ou rôle IAM.

Pour en savoir plus sur la relation entre les autorisations de liste ACL et les autorisations des politiques d'accès, consultez Mappage des autorisations de liste ACL et de stratégie d'accès. Pour obtenir plus d'informations sur les utilisateurs IAM, les rôles et les bonnes pratiques, consultez la section IAM Identities (users, user groups, and roles) [Identités IAM (utilisateurs, groupes d'utilisateurs et rôles)] dans le Guide de l'utilisateur IAM.