Copie d'objets - 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.

Copie d'objets

L'opération de copie crée une copie d'un objet déjà stocké dans Amazon S3.

Vous pouvez créer une copie de l'objet d'une taille maximale de 5 Go dans une seule opération atomique. Toutefois, pour copier un objet supérieur à 5 Go, vous devez utiliser l'API de chargement partitionné.

Grâce à l'opération CopyObject, vous pouvez :

  • Créer des copies supplémentaires d'objets

  • Renommer des objets en les copiant et en supprimant les originaux

  • Déplacer des objets dans des emplacements Amazon S3 (par exemple, us-west-1 et Europe)

  • Changer les métadonnées d'objet

    Chaque objet Amazon S3 possède des métadonnées. Il s'agit d'un ensemble de paires de noms-valeurs. Vous pouvez configurer les métadonnées d'objet lorsque vous les chargez. Une fois l'objet chargé, vous ne pouvez pas modifier ses métadonnées. Le seul moyen de modifier les métadonnées d'objet est de faire une copie de l'objet et de configurer les métadonnées. Dans l'opération de copie, définissez le même objet comme source et cible.

Chaque objet possède des métadonnées. Certaines sont des métadonnées système et d'autres sont définies par l'utilisateur. Vous pouvez contrôler certaines des métadonnées du système, telles que la configuration de la classe de stockage à utiliser pour l'objet et vous pouvez configurer le chiffrement côté serveur. Lorsque vous copiez un objet, les métadonnées système contrôlées par l'utilisateur et les métadonnées définies par l'utilisateur sont également copiées. Amazon S3 réinitialise les métadonnées contrôlées par le système. Par exemple, lorsque vous copiez un objet, Amazon S3 réinitialise la date de création de l'objet copié. Il est inutile de configurer ces valeurs dans la demande de copie.

Lorsque vous copiez un objet, vous devez choisir de mettre à jour certaines valeurs des métadonnées. Par exemple, si votre objet source est configuré pour utiliser le stockage S3 Standard, vous pouvez sélectionner S3 Intelligent-Tiering pour la copie de l'objet. Vous devez également choisir de modifier certaines valeurs des métadonnées définies par l'utilisateur présentes dans l'objet source. Si vous choisissez de mettre à jour les métadonnées (système ou définies par l'utilisateur) configurables par l'utilisateur de l'objet lors de la copie, vous devez explicitement spécifier toutes les métadonnées configurables par l'utilisateur présentes dans l'objet source de la demande, même si vous ne changez qu'une des valeurs des métadonnées.

Pour en savoir plus sur les métadonnées d'objet, consultez Utilisation des métadonnées d'objet.

Note
  • La copie d'objets dans des emplacements entraîne des frais de bande passante.

  • Si l'objet source est archivé dans S3 Glacier Flexible Retrieval ou S3 Glacier Deep Archive, vous devez d'abord restaurer une copie temporaire avant de copier l'objet vers un autre compartiment. Pour en savoir plus sur l'archivage des objets, consultez Transition vers les classes de stockage S3 Glacier Flexible Retrieval et S3 Glacier Deep Archive (archivage d'objets).

  • L'opération de copie des objets restaurés n'est pas prise en charge dans la console Amazon S3 pour les objets des classes de stockage S3 Glacier Flexible Retrieval ou S3 Glacier Deep Archive. Pour ce type d'opération de copie, utilisez le AWS Command Line Interface (AWS CLI), les AWS SDK ou l'API REST.

Amazon S3 chiffre automatiquement tous les nouveaux objets copiés dans un compartiment S3. Si vous ne spécifiez aucune information de chiffrement dans votre demande de copie, le paramètre de chiffrement de l'objet cible est défini sur la configuration de chiffrement par défaut du compartiment de destination. Par défaut, tous les compartiments ont un niveau de chiffrement de base qui utilise le chiffrement côté serveur avec des clés gérées Amazon S3 (SSE-S3). Si le compartiment de destination possède une configuration de chiffrement par défaut qui utilise le chiffrement côté serveur avec une clé AWS Key Management Service (AWS KMS) (SSE-KMS) ou une clé de chiffrement fournie par le client (SSE-C), Amazon S3 utilise la clé KMS correspondante, ou une clé fournie par le client pour chiffrer la copie de l'objet cible. Lors de la copie d'un objet, si vous souhaitez utiliser un autre type de paramètre de chiffrement pour l'objet cible, vous pouvez demander à Amazon S3 de chiffrer l'objet cible à l'aide d'une clé KMS, d'une clé gérée par Amazon S3 ou d'une clé fournie par le client. Si le paramètre de chiffrement de votre demande est différent de la configuration de chiffrement par défaut du compartiment de destination, le paramètre de chiffrement de votre demande est prioritaire. Si l'objet source de la copie est stocké dans Amazon S3 en utilisant une clé SSE-C, vous devez fournir des informations de chiffrement dans votre demande afin que Amazon S3 puisse déchiffrer l'objet à copier. Pour plus d’informations, consultez Protection des données à l'aide du chiffrement.

Lorsque vous copiez des objets, vous pouvez sélectionner un algorithme de total de contrôle différent pour l'objet. Que vous sélectionniez le même algorithme ou un nouvel algorithme, Amazon S3 calcule un nouveau total de contrôle après la copie de l'objet. Amazon S3 ne copie pas directement la valeur du total de contrôle. La valeur du total de contrôle des objets qui ont été chargés à l'aide de chargements partitionnés peut changer. Pour plus d'informations sur le mode de calcul du total de contrôle, consultez la section Utilisation de totaux de contrôle au niveau des parties pour les chargements partitionnés.

Pour copier plusieurs objets Amazon S3 avec une seule demande, vous pouvez utiliser la fonctionnalité d'opérations par lot Amazon S3. Vous fournissez à la fonctionnalité d'opérations par lot S3 une liste d'objets sur lesquels effectuer des opérations. La fonctionnalité des opérations par lot S3 appelle l'opération d'API respective pour effectuer l'opération spécifiée. Une tâche d'opérations par lot peut effectuer l'opération spécifiée sur des milliards d'objets contenant des exaoctets de données.

La fonctionnalité d'opérations par lot S3 suit la progression, envoie des notifications et stocke un rapport de fin détaillé sur toutes les actions, offrant ainsi une expérience sans serveur entièrement gérée et qui peut être vérifiée. Vous pouvez utiliser S3 Batch Operations via la console Amazon S3 AWS CLI, AWS les SDK ou l'API REST. Pour plus d’informations, consultez Principes de base des opérations par lot S3.

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 la copie d’un objet dans un compartiment de répertoires, consultez Copie d’un objet vers un compartiment de répertoires.

Pour copier un objet

Pour copier un objet, utilisez les méthodes suivantes.

Dans la console Amazon S3, vous pouvez copier ou déplacer un objet. Pour plus d’informations, consultez les procédures suivantes.

Note
  • Les objets chiffrés avec des clés de chiffrement fournies par le client (SSE-C) ne peuvent pas être copiés ou déplacés à l'aide de la console S3. Pour copier ou déplacer des objets chiffrés avec SSE-C, utilisez le AWS CLI AWS SDK ou l'API REST Amazon S3.

  • Lors de la copie d'un objet à l'aide de la console Amazon S3, vous devez accorder l'autorisation s3:ListAllMyBuckets. La console a besoin de cette autorisation pour valider l'opération de copie.

  • La copie interrégionale d'objets AWS KMS chiffrés n'est pas prise en charge sur la console Amazon S3.

Pour copier un objet
  1. Connectez-vous à la console Amazon S3 AWS Management Console et ouvrez-la à l'adresse https://console.aws.amazon.com/s3/.

  2. Accédez au compartiment ou au dossier Amazon S3 contenant les objets que vous souhaitez copier.

  3. Cochez la case située à gauche des noms des objets que vous souhaitez copier.

  4. Choisissez Actions et Copy (Copier) dans la liste des options qui s'affiche.

    Vous pouvez également choisir Copy (Copier) parmi les options en haut à droite.

  5. Sélectionnez le type de destination et le compte de destination. Pour spécifier le chemin de destination, choisissez Browse S3 (Parcourir S3), accédez à la destination et activez la case à cocher située à gauche de la destination. Choisissez Choose destination (Choisir une destination) en bas à droite.

    Vous pouvez également saisir le chemin de destination.

  6. Si la gestion des versions de compartiment n'est pas activée, il se peut que vous soyez invité à reconnaître que les objets existants portant le même nom soient remplacés. Si cela vous convient, activez la case à cocher et continuez. Si vous souhaitez conserver toutes les versions des objets dans ce compartiment, sélectionnez Enable Bucket Versioning (Activer la gestion des versions pour le compartiment). Vous pouvez également mettre à jour les propriétés de chiffrement et de verrouillage des objets S3 par défaut.

  7. Sous Additional checksums (Totaux de contrôle supplémentaires), sélectionnez si vous souhaitez copier les objets à l'aide de la fonction de total de contrôle existante ou remplacer la fonction de total de contrôle existante par une nouvelle. Lorsque vous avez chargé les objets, vous aviez la possibilité de spécifier l'algorithme total de contrôle utilisé pour vérifier l'intégrité des données. Lors de la copie de l'objet, vous avez la possibilité de sélectionner une nouvelle fonction. Si vous n'avez pas spécifié de total de contrôle supplémentaire à l'origine, vous pouvez utiliser la section des options de copie pour en ajouter un.

    Note

    Même si vous choisissez d'utiliser la même fonction de total de contrôle, la valeur de votre total de contrôle peut changer si vous copiez l'objet et que sa taille dépasse 16 Mo. La valeur du total de contrôle peut changer en raison de la façon dont les totaux de contrôle sont calculés pour les chargements partitionnés. Pour plus d'informations sur la façon dont le total de contrôle peut changer lors de la copie de l'objet, consultez Utilisation de totaux de contrôle au niveau des parties pour les chargements partitionnés.

    Pour modifier la fonction de total de contrôle, sélectionnez Replace with a new checksum function (Remplacer par une nouvelle fonction de total de contrôle). Sélectionnez la nouvelle fonction de total de contrôle dans la case. Lorsque l'objet est copié, le nouveau total de contrôle est calculé et stocké en utilisant l'algorithme spécifié.

  8. En bas à droite, choisissez Copy (Copier). Amazon S3 copie votre objet dans la destination.

Déplacer des objets
  1. Connectez-vous à la console Amazon S3 AWS Management Console et ouvrez-la à l'adresse https://console.aws.amazon.com/s3/.

  2. Accédez au compartiment ou au dossier Amazon S3 contenant les objets que vous souhaitez déplacer.

  3. Activez la case à cocher située à gauche des noms des objets à déplacer.

  4. Choisissez Actions (Actions), puis Move (Déplacer) dans la liste des options qui s'affiche.

    Vous pouvez également choisir Move (Déplacer) dans les options situées en haut à droite.

  5. Pour spécifier le chemin de destination, choisissez Browse S3 (Parcourir S3), accédez à la destination et activez la case à cocher située à gauche de la destination. Choisissez Choose destination (Choisir une destination) en bas à droite.

    Vous pouvez également saisir le chemin de destination.

  6. Si la gestion des versions de compartiment n'est pas activée, il se peut que vous soyez invité à reconnaître que les objets existants portant le même nom soient remplacés. Si cela vous convient, activez la case à cocher et continuez. Si vous souhaitez conserver toutes les versions des objets dans ce compartiment, sélectionnez Enable Bucket Versioning (Activer la gestion des versions pour le compartiment). Vous pouvez également mettre à jour les propriétés de chiffrement et de verrouillage des objets par défaut.

  7. En bas à droite, choisissez Move (Déplacer). Amazon S3 déplace vos objets vers la destination.

Note
  • Cette action crée une copie de tous les objets spécifiés avec des paramètres mis à jour, met à jour la date de dernière modification à l'emplacement spécifié et ajoute un marqueur de suppression à l'objet d'origine.

  • Lorsque vous déplacez des dossiers, attendez la fin de l'action de déplacement pour apporter des modifications supplémentaires dans les dossiers.

  • Cette action met à jour les métadonnées pour le contrôle de version du compartiment, le chiffrement, les fonctions de verrouillage des objets et les objets archivés.

Les exemples de cette section vous montrent comment copier des objets supérieurs à 5 Go en une seule opération. Pour copier des objets supérieurs à 5 Go, vous devez utiliser l'API de chargement partitionné. Pour de plus amples informations, veuillez consulter Copie d'un objet à l'aide du chargement partitionné.

Java

L'exemple suivant copie un objet dans Amazon S3 à l'aide du kit AWS SDK for Java. Pour obtenir les instructions sur la création et le test d'un exemple pratique, consultez Test des exemples de code Java Amazon S3.

import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.CopyObjectRequest; import java.io.IOException; public class CopyObjectSingleOperation { public static void main(String[] args) throws IOException { Regions clientRegion = Regions.DEFAULT_REGION; String bucketName = "*** Bucket name ***"; String sourceKey = "*** Source object key *** "; String destinationKey = "*** Destination object key ***"; try { AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new ProfileCredentialsProvider()) .withRegion(clientRegion) .build(); // Copy the object into a new object in the same bucket. CopyObjectRequest copyObjRequest = new CopyObjectRequest(bucketName, sourceKey, bucketName, destinationKey); s3Client.copyObject(copyObjRequest); } catch (AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it, so it returned an error response. e.printStackTrace(); } catch (SdkClientException e) { // Amazon S3 couldn't be contacted for a response, or the client // couldn't parse the response from Amazon S3. e.printStackTrace(); } } }
.NET

L'exemple C# suivant utilise le niveau élevé AWS SDK for .NET pour copier des objets d'une taille maximale de 5 Go en une seule opération. Pour les objets de taille supérieurs à 5 Go, utilisez l'exemple de copie de chargement partitionné décrit dans Copie d'un objet à l'aide du chargement partitionné.

Cet exemple effectue la copie d'un objet de 5 Go au plus. Pour plus d'informations sur la compatibilité de l'exemple avec une version spécifique du AWS SDK pour .NET et pour obtenir des instructions sur la façon de créer et de tester un échantillon de travail, Exécution des exemples de code .NET Amazon S3 consultez.

using Amazon; using Amazon.S3; using Amazon.S3.Model; using System; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class CopyObjectTest { private const string sourceBucket = "*** provide the name of the bucket with source object ***"; private const string destinationBucket = "*** provide the name of the bucket to copy the object to ***"; private const string objectKey = "*** provide the name of object to copy ***"; private const string destObjectKey = "*** provide the destination object key name ***"; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 s3Client; public static void Main() { s3Client = new AmazonS3Client(bucketRegion); Console.WriteLine("Copying an object"); CopyingObjectAsync().Wait(); } private static async Task CopyingObjectAsync() { try { CopyObjectRequest request = new CopyObjectRequest { SourceBucket = sourceBucket, SourceKey = objectKey, DestinationBucket = destinationBucket, DestinationKey = destObjectKey }; CopyObjectResponse response = await s3Client.CopyObjectAsync(request); } catch (AmazonS3Exception e) { Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message); } catch (Exception e) { Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message); } } } }
PHP

Cette rubrique explique comment utiliser les classes de la version 3 de AWS SDK for PHP pour copier un seul objet et plusieurs objets au sein d'Amazon S3, d'un compartiment à un autre ou au sein du même compartiment.

Cette rubrique part du principe que vous suivez déjà les instructions de la section Utilisation du kit AWS SDK for PHP et exécution d'exemples PHP et que le kit AWS SDK for PHP est correctement installé.

L'exemple PHP suivant illustre l'utilisation de la méthode copyObject() pour copier un seul objet dans Amazon S3 et grâce à un batch d'appels vers CopyObject à l'aide de la méthode getcommand() pour faire plusieurs copies d'un objet.

1

Créez l'instance d'un client Simple Storage Service (Amazon S3) à l'aide du constructeur de classe Aws\S3\S3Client.

2

Pour créer plusieurs copies d'un objet, vous devez exécuter un lot d'appels à la méthode getCommand () du client Amazon S3, héritée de la classe Aws \ CommandInterface. Vous fournissez la commande CopyObject comme le premier argument et un tableau contenant le compartiment source, le nom de la clé source, le compartiment cible et le nom de la clé cible comme second argument.

require 'vendor/autoload.php'; use Aws\CommandPool; use Aws\Exception\AwsException; use Aws\ResultInterface; use Aws\S3\S3Client; $sourceBucket = '*** Your Source Bucket Name ***'; $sourceKeyname = '*** Your Source Object Key ***'; $targetBucket = '*** Your Target Bucket Name ***'; $s3 = new S3Client([ 'version' => 'latest', 'region' => 'us-east-1' ]); // Copy an object. $s3->copyObject([ 'Bucket' => $targetBucket, 'Key' => "$sourceKeyname-copy", 'CopySource' => "$sourceBucket/$sourceKeyname", ]); // Perform a batch of CopyObject operations. $batch = array(); for ($i = 1; $i <= 3; $i++) { $batch[] = $s3->getCommand('CopyObject', [ 'Bucket' => $targetBucket, 'Key' => "{targetKeyname}-$i", 'CopySource' => "$sourceBucket/$sourceKeyname", ]); } try { $results = CommandPool::batch($s3, $batch); foreach ($results as $result) { if ($result instanceof ResultInterface) { // Result handling here } if ($result instanceof AwsException) { // AwsException handling here } } } catch (Exception $e) { // General error handling here }
Python
class ObjectWrapper: """Encapsulates S3 object actions.""" def __init__(self, s3_object): """ :param s3_object: A Boto3 Object resource. This is a high-level resource in Boto3 that wraps object actions in a class-like structure. """ self.object = s3_object self.key = self.object.key
def copy(self, dest_object): """ Copies the object to another bucket. :param dest_object: The destination object initialized with a bucket and key. This is a Boto3 Object resource. """ try: dest_object.copy_from( CopySource={"Bucket": self.object.bucket_name, "Key": self.object.key} ) dest_object.wait_until_exists() logger.info( "Copied object from %s:%s to %s:%s.", self.object.bucket_name, self.object.key, dest_object.bucket_name, dest_object.key, ) except ClientError: logger.exception( "Couldn't copy object from %s/%s to %s/%s.", self.object.bucket_name, self.object.key, dest_object.bucket_name, dest_object.key, ) raise
Ruby

Les tâches suivantes vous guident tout au long de l'utilisation des classes Ruby pour copier un objet dans Amazon S3, à partir d'un compartiment vers un autre ou au sein d'un même compartiment.

1

Utilisez la gemme modulaire Amazon S3 pour la version 3 du AWS SDK for Ruby, exigez « aws-sdk-s 3 » et fournissez vos AWS informations d'identification. Pour plus d'informations sur la manière de fournir vos informations d'identification, consultez Envoi de demandes à l'aide du Compte AWS ou des informations d'identification de l'utilisateur IAM.

2

Fournissez les informations de la demande comme le nom du compartiment source, le nom de la clé source, le nom du compartiment cible et celui de la clé cible.

L'exemple de code Ruby suivant présente les tâches précédentes grâce à la méthode #copy_object pour copier un objet d'un compartiment à un autre.

require "aws-sdk-s3" # Wraps Amazon S3 object actions. class ObjectCopyWrapper attr_reader :source_object # @param source_object [Aws::S3::Object] An existing Amazon S3 object. This is used as the source object for # copy actions. def initialize(source_object) @source_object = source_object end # Copy the source object to the specified target bucket and rename it with the target key. # # @param target_bucket [Aws::S3::Bucket] An existing Amazon S3 bucket where the object is copied. # @param target_object_key [String] The key to give the copy of the object. # @return [Aws::S3::Object, nil] The copied object when successful; otherwise, nil. def copy_object(target_bucket, target_object_key) @source_object.copy_to(bucket: target_bucket.name, key: target_object_key) target_bucket.object(target_object_key) rescue Aws::Errors::ServiceError => e puts "Couldn't copy #{@source_object.key} to #{target_object_key}. Here's why: #{e.message}" end end # Example usage: def run_demo source_bucket_name = "doc-example-bucket1" source_key = "my-source-file.txt" target_bucket_name = "doc-example-bucket2" target_key = "my-target-file.txt" source_bucket = Aws::S3::Bucket.new(source_bucket_name) wrapper = ObjectCopyWrapper.new(source_bucket.object(source_key)) target_bucket = Aws::S3::Bucket.new(target_bucket_name) target_object = wrapper.copy_object(target_bucket, target_key) return unless target_object puts "Copied #{source_key} from #{source_bucket_name} to #{target_object.bucket_name}:#{target_object.key}." end run_demo if $PROGRAM_NAME == __FILE__

L'exemple décrit comment copier un objet grâce à REST. Pour plus d’informations sur l’API REST, consultez Objet PUT (Copy).

L'exemple copie l'objet flotsam du compartiment pacific vers l'objet jetsam du compartiment atlantic, en préservant les métadonnées.

PUT /jetsam HTTP/1.1 Host: atlantic.s3.amazonaws.com x-amz-copy-source: /pacific/flotsam Authorization: AWS AKIAIOSFODNN7EXAMPLE:ENoSbxYByFA0UGLZUqJN5EUnLDg= Date: Wed, 20 Feb 2008 22:12:21 +0000

La signature est générée à partir des informations suivantes.

PUT\r\n \r\n \r\n Wed, 20 Feb 2008 22:12:21 +0000\r\n x-amz-copy-source:/pacific/flotsam\r\n /atlantic/jetsam

Amazon S3 renvoie la réponse suivante qui spécifie l'ETag de l'objet et la date de modification.

HTTP/1.1 200 OK x-amz-id-2: Vyaxt7qEbzv34BnSu5hctyyNSlHTYZFMWK4FtzO+iX8JQNyaLdTshL0KxatbaOZt x-amz-request-id: 6B13C3C5B34AF333 Date: Wed, 20 Feb 2008 22:13:01 +0000 Content-Type: application/xml Transfer-Encoding: chunked Connection: close Server: AmazonS3 <?xml version="1.0" encoding="UTF-8"?> <CopyObjectResult> <LastModified>2008-02-20T22:13:01</LastModified> <ETag>"7e9c608af58950deeb370c98608ed097"</ETag> </CopyObjectResult>

Vous pouvez également utiliser le AWS Command Line Interface (AWS CLI) pour créer un objet S3. Pour plus d'informations, veuillez consulter copy-object dans la Référence des commandes AWS CLI .

Pour plus d'informations sur le AWS CLI, voir Qu'est-ce que le AWS Command Line Interface ? dans le guide de AWS Command Line Interface l'utilisateur.