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. La valeur ETag pour tous les chargements partitionnés d'objets reste la même, mais un numéro différent est attribué à chaque partie. 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.
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.
-
Appel
CreateMultipartUpload
pour commencer le processus. -
1000 appels
UploadPart
individuels, chacun chargeant une partie de 100 Mo, pour une taille totale de 100 Go. -
Appel
CompleteMultipartUpload
pour terminer le processus.
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é. En outre, CreateMultipartUpload et UploadPart sont facturés aux tarifs S3 Standard. Seule la requête CompleteMultipartUpload est facturée au tarif de S3 Glacier Flexible Retrieval. De même, les parties multipartites en cours d'exécution d'une commande PUT vers la classe de stockage S3 Glacier Deep Archive sont facturées en tant que stockage de transit S3 Glacier Flexible Retrieval aux tarifs de stockage standard S3 jusqu'à ce que le chargement soit terminé. Seule la demande CompleteMultipartUpload est facturée aux taux 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 de plus amples informations sur la tarification, veuillez consulter 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é.
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 Le propriétaire du compartiment peut autoriser d'autres personnes habilitées à exécuter l'action |
Lancement du chargement partitionné |
Vous devez être autorisé à exécuter l'action Le propriétaire du compartiment peut autoriser d'autres personnes habilitées à exécuter l'action |
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 Le propriétaire du compartiment doit autoriser l'initiateur à exécuter l'action |
Chargement d'une partie (Copy) | Vous devez être autorisé à exécuter l'action Pour que l'initiateur puisse charger une partie pour un objet, le propriétaire du compartiment doit l'autoriser à effectuer l'action |
Achèvement du chargement partitionné | Vous devez être autorisé à exécuter l'action Le propriétaire du compartiment doit autoriser l'initiateur à exécuter l'action |
Arrêt du chargement partitionné | Vous devez être autorisé à exécuter l'action 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 Outre ces paramètres par défaut, le propriétaire du compartiment peut autoriser d'autres principaux à être habilité à exécuter l'action |
Liste des parties | Vous devez être autorisé à exécuter l'action 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 |
Liste des chargements partitionnés | Vous devez être autorisé à exécuter l'action Outre ces paramètres par défaut, le propriétaire du compartiment peut autoriser d'autres personnes habilitées à exécuter l'action |
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 Pour plus d'informations, consultez Chargement d'un fichier volumineux vers Amazon S3 avec chiffrement à l'aide d'une AWS KMS key 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 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.
Rubriques
- Configuration d'une configuration de cycle de vie de compartiment pour supprimer les chargements partitionnés incomplets
- Chargement d'un objet à l'aide du chargement partitionné
- Chargement d'un répertoire à l'aide de la classe TransferUtility.
- Liste des chargements partitionnés
- Suivi d'un chargement partitionné
- Interruption d'un chargement partitionné
- Copie d'un objet à l'aide du chargement partitionné
- Limites de la fonction de chargement partitionné Amazon S3