Chargement et copie d'objets à l'aide d'un chargement partitionné - Amazon Simple Storage Service

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.

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.

Chaque fois que vous chargez une partie, Amazon S3 renvoie un en-tête de balise d'entité ETag dans sa 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é.

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.

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.

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. 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. Pour de plus amples informations sur la tarification, veuillez consulter Tarification Amazon S3.

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

Prise en charge d'AWS Command Line Interface pour le chargement partitionné

Les rubriques suivantes d'AWS Command Line Interface décrivent les opérations pour le chargement partitionné.

Prise en charge des kits AWS SDK pour le chargement partitionné

Vous pouvez utiliser un kit AWS SDK pour charger un objet en plusieurs parties. Pour obtenir la liste des kits AWS SDK pris en charge par une action d'API, consultez :

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 Propriétaire. 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, le Compte AWS de ce dernier est également autorisé à arrêter ce 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 chargement partitionné est un utilisateur IAM, le Compte AWS qui contrôle cet utilisateur IAM est également autorisé à lister les parties de ce 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 Autorisations liées au chiffrement et au déchiffrement

Pour effectuer un chargement partitionné avec un chiffrement à l'aide d'une clé KMS AWS Key Management Service (AWS KMS), le demandeur doit avoir une autorisation pour les actions kms:Decrypt et kms:GenerateDataKey* 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 AWSCentre de connaissances.

Si votre utilisateur ou rôle IAM est dans le même Compte AWS que 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 en savoir plus sur les utilisateurs IAM, veuillez consulter Utilisation des utilisateurs et des groupes.