Copia di oggetti - Amazon Simple Storage Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Copia di oggetti

L'operazione copy crea una copia di un oggetto già archiviato in Amazon S3.

È possibile creare una copia dell'oggetto con una dimensione massima di 5 GB in una singola operazione atomica. Tuttavia, per copiare un oggetto di dimensioni superiori a 5 GB, devi utilizzare l'API per il caricamento in più parti.

L'operazione CopyObject consente di effettuare le seguenti operazioni:

  • Creare copie aggiuntive degli oggetti.

  • Rinominare gli oggetti copiandoli ed eliminando gli oggetti di origine.

  • Spostare gli oggetti nelle posizioni di Amazon S3 (ad esempio, us-west-1 ed Europa)

  • Modificare i metadata degli oggetti

    Ogni oggetto Amazon S3 ha metadati. che sono un set di coppie nome-valore. che è possibile impostare quando si carica l'oggetto. Una volta caricato l'oggetto, non è possibile modificare i metadata corrispondenti. L'unico modo per modificarli è eseguire una copia dell'oggetto e impostare i metadata. Nell'operazione copy lo stesso oggetto viene impostato come origine e destinazione.

Ogni oggetto contiene metadata. Alcuni di essi sono metadati di sistema e altri sono definiti dall'utente. Puoi controllare alcuni metadati di sistema, ad esempio la configurazione della classe di storage da utilizzare per l'oggetto, e configurare la crittografia lato server. Quando si copia un oggetto, vengono copiati anche i metadata di sistema controllati dall'utente e i metadata definiti dall'utente. Amazon S3 reimposta i metadati controllati dal sistema. Ad esempio, quando copi un oggetto, Amazon S3 reimposta la data di creazione dell'oggetto copiato. Non è necessario impostare questi valori nella richiesta di copia.

Quando si copia un oggetto, si potrebbe decidere di aggiornare alcuni dei valori dei metadata. Ad esempio, se l'oggetto di origine è configurato per utilizzare l'archiviazione S3 Standard, puoi scegliere di utilizzare S3 Intelligent-Tiering per la copia dell'oggetto. È anche possibile decidere di modificare alcuni dei valori dei metadata definiti dall'utente presenti nell'oggetto di origine. Se scegli di aggiornare uno qualsiasi dei metadati configurabili dall'utente (metadati di sistema o definiti dall'utente) dell'oggetto durante la copia, devi specificare in modo esplicito nella richiesta tutti i metadati configurabili dall'utente presenti nell'oggetto di origine, anche se stai modificando solo uno dei valori dei metadati.

Per ulteriori informazioni sui metadata degli oggetti, consulta Utilizzo dei metadati degli oggetti.

Nota
  • La copia dei dati in più posizioni comporta di costi per l'utilizzo della lunghezza di banda.

  • Se l'oggetto di origine viene archiviato in Recupero flessibile Amazon S3 Glacier o Deep Archive Amazon S3 Glacier, è necessario ripristinare una copia temporanea prima di poter copiare l'oggetto in un altro bucket. Per ulteriori informazioni sull'archiviazione degli oggetti, consulta la sezione Trasferimento nelle classi di archiviazione S3 Glacier Flexible Retrieval e S3 Glacier Deep Archive (archiviazione di oggetti).

  • L'operazione di copia per gli oggetti ripristinati non è supportata nella console Amazon S3 per oggetti nelle classi di storage Recupero flessibile Amazon S3 Glacier o S3 Glacier Deep Archive. Per questo tipo di operazione di copia, utilizzate AWS Command Line Interface (AWS CLI), gli AWS SDK o l'API REST.

Amazon S3 esegue automaticamente la crittografa di tutti i nuovi oggetti copiati in un bucket S3. Se non si specificano le informazioni di crittografia nella richiesta di copia, la crittografia dell'oggetto di destinazione viene impostata sulla configurazione di crittografia predefinita del bucket di destinazione. Per impostazione predefinita, tutti i bucket hanno un livello di crittografia di base che utilizza la crittografia lato server con chiavi gestite da Amazon S3 (SSE-S3). Se il bucket di destinazione ha una configurazione di crittografia predefinita che utilizza la crittografia lato server con una chiave AWS Key Management Service (AWS KMS) (SSE-KMS) o una chiave di crittografia fornita dal cliente (SSE-C), Amazon S3 utilizza la chiave KMS corrispondente o una chiave fornita dal cliente per crittografare la copia dell'oggetto di destinazione. Quando copi un oggetto, se desideri utilizzare un diverso tipo di impostazione di crittografia per l'oggetto di destinazione, puoi richiedere che Amazon S3 esegua la crittografia dell'oggetto di destinazione con una chiave KMS, una chiave gestita da Amazon S3 o una chiave fornita dal cliente. Se l'impostazione di crittografia nella richiesta è diversa dalla configurazione di crittografia predefinita del bucket di destinazione, l'impostazione di crittografia nella richiesta ha la priorità. Se l'oggetto di origine della copia è archiviato in Amazon S3 utilizzando SSE-C, è necessario fornire le informazioni di crittografia necessarie nella richiesta in modo che Amazon S3 possa decrittare l'oggetto per la copia. Per ulteriori informazioni, consulta Protezione dei dati con la crittografia.

Durante la copia di oggetti puoi scegliere di utilizzare un algoritmo di checksum diverso per l'oggetto. Sia che si scelga di utilizzare lo stesso algoritmo o uno nuovo, Amazon S3 calcola un nuovo valore di checksum dopo la copia dell'oggetto. Amazon S3 non copia direttamente il valore del checksum. Il valore di checksum degli oggetti caricati utilizzando caricamenti in più parti potrebbe cambiare. Per ulteriori informazioni sul calcolo del checksum, consulta Utilizzo di checksum a livello di parte per caricamenti in più parti.

Per copiare più di un oggetto Amazon S3 con una singola richiesta, è possibile utilizzare le operazioni in batch Amazon S3. Fornisci alle operazioni in batch S3 un elenco di oggetti su cui operare. Le operazioni in batch S3 richiamano la rispettiva API per eseguire l'operazione specificata. Un solo processo di operazioni in batch può eseguire l'operazione specificata su miliardi di oggetti contenenti esabyte di dati.

La funzionalità S3 Batch Operations tiene traccia dell'avanzamento, invia notifiche e archivia un report di completamento dettagliato di tutte le operazioni, offrendo un'esperienza serverless revisionabile completamente gestita. Puoi utilizzare S3 Batch Operations tramite la console Amazon S3 AWS CLI AWS , gli SDK o l'API REST. Per ulteriori informazioni, consulta Nozioni di base sulle operazioni in batch S3.

Nota

Per ulteriori informazioni sull'utilizzo della classe di archiviazione Amazon S3 Express One Zone con bucket di directory, consulta Che cos'è S3 Express One Zone? e Bucks di directory. Per ulteriori informazioni sulla copia di un oggetto in un bucket di directory, consulta Copia di un oggetto in un bucket di directory.

Per copiare un oggetto

Per copiare un oggetto utilizza i metodi riportati di seguito.

Nella console di Amazon S3 è possibile copiare o spostare un oggetto. Per ulteriori informazioni, consultare le procedure seguenti.

Nota
  • Gli oggetti crittografati con chiavi di crittografia fornite dal cliente (SSE-C) non possono essere copiati o spostati utilizzando la console S3. Per copiare o spostare oggetti crittografati con SSE-C, usa l' AWS CLI AWS SDK o l'API REST di Amazon S3.

  • Quando copi un oggetto tramite la console di Amazon S3, devi concedere l'autorizzazione s3:ListAllMyBuckets. La console necessita di questa autorizzazione per convalidare l'operazione di copia.

  • La copia tra regioni di oggetti AWS KMS crittografati non è supportata sulla console Amazon S3.

Per copiare un oggetto
  1. Accedi AWS Management Console e apri la console Amazon S3 all'indirizzo https://console.aws.amazon.com/s3/.

  2. Accedere al bucket o alla cartella Amazon S3 che contiene gli oggetti da copiare.

  3. Selezionare la casella di controllo a sinistra dei nomi degli oggetti da copiare.

  4. Scegliere Actions (Operazioni) e quindi Copy (Copia) nell'elenco di opzioni visualizzato.

    In alternativa, scegli Copy (Copia) nelle opzioni nell'angolo in alto a destra.

  5. Selezionare il tipo di destinazione e l'account di destinazione. Per specificare il percorso di destinazione, scegliere Browse S3 (Sfoglia S3), passare alla destinazione e selezionare la casella di controllo a sinistra della destinazione. Seleziona Choose destination (Scegli destinazione) nell'angolo in basso a destra.

    In alternativa, immettere il percorso di destinazione.

  6. Se la funzione Controllo delle versioni del bucket non è abilitata, potrebbe essere richiesto di confermare se gli oggetti esistenti con lo stesso nome debbano essere sovrascritti. Per confermare questa opzione, selezionare la casella di controllo e continuare. Se si desidera mantenere tutte le versioni degli oggetti in questo bucket, selezionare Enable Bucket Versioning (Abilita funzione Controllo delle versioni del bucket). È anche possibile aggiornare le proprietà di default di crittografia e blocco degli oggetti S3.

  7. In Additional checksums (Checksum aggiuntivi) scegli se copiare gli oggetti utilizzando la funzione di checksum esistente o sostituirla con una nuova. Al momento del caricamento degli oggetti hai la possibilità di specificare l'algoritmo di checksum utilizzato per verificare l'integrità dei dati. Quando effettui la copia dell'oggetto hai la possibilità di scegliere una nuova funzione. Se originariamente non hai specificato un checksum aggiuntivo puoi utilizzare questa sezione delle opzioni di copia per aggiungerne uno.

    Nota

    Anche se scegli di utilizzare la stessa funzione di checksum, il valore del checksum potrebbe cambiare se copi un oggetto che ha una dimensione superiore a 16 MB. Il valore del checksum potrebbe cambiare a causa del modo in cui vengono calcolati i checksum per i caricamenti in più parti. Per ulteriori informazioni su come potrebbe cambiare il checksum durante la copia dell'oggetto, consulta Utilizzo di checksum a livello di parte per caricamenti in più parti.

    Per modificare la funzione di checksum, scegli Replace with a new checksum function (Sostituisci con una nuova funzione di checksum). Scegli la nuova funzione di checksum dalla casella. Quando l'oggetto viene copiato, il nuovo checksum viene calcolato e memorizzato utilizzando l'algoritmo specificato.

  8. Scegli Copy (Copia) nell'angolo in basso a destra. Amazon S3 copia gli oggetti nella destinazione.

Per spostare oggetti
  1. Accedi AWS Management Console e apri la console Amazon S3 all'indirizzo https://console.aws.amazon.com/s3/.

  2. Passare al bucket o alla cartella Amazon S3 che contiene gli oggetti che si desidera spostare.

  3. Selezionare la casella di controllo a sinistra dei nomi degli oggetti che si desidera spostare.

  4. Scegliere Actions (Azioni) e quindi Move (Sposta) nell'elenco di opzioni visualizzato.

    In alternativa, scegli Move (Sposta) dalle opzioni nell'angolo in alto a destra.

  5. Per specificare il percorso di destinazione, scegliere Browse S3 (Sfoglia S3), passare alla destinazione e selezionare la casella di controllo a sinistra della destinazione. Seleziona Choose destination (Scegli destinazione) nell'angolo in basso a destra.

    In alternativa, immettere il percorso di destinazione.

  6. Se la funzione Controllo delle versioni del bucket non è abilitata, potrebbe essere richiesto di confermare se gli oggetti esistenti con lo stesso nome debbano essere sovrascritti. Per confermare questa opzione, selezionare la casella di controllo e continuare. Se si desidera mantenere tutte le versioni degli oggetti in questo bucket, selezionare Enable Bucket Versioning (Abilita funzione Controllo delle versioni del bucket). È anche possibile aggiornare le proprietà di default di crittografia e blocco degli oggetti.

  7. Scegli Copy (Copia) nell'angolo in basso a destra. Amazon S3 sposta i tuoi oggetti nella destinazione.

Nota
  • Questa operazione crea una copia di tutti gli oggetti specificati con impostazioni aggiornate, aggiorna la data dell'ultima modifica nella posizione specificata e aggiunge un contrassegno di eliminazione all'oggetto originale.

  • Quando si spostano le cartelle, attendere il completamento dell'azione di spostamento prima di apportare ulteriori modifiche alle cartelle.

  • Questa operazione aggiorna i metadati per la funzione Controllo versioni del bucket, la crittografia, le caratteristiche di blocco degli oggetti e gli oggetti archiviati.

Gli esempi in questa sezione mostrano come copiare gli oggetti con dimensioni superiori a 5 GB in una singola operazione. Per la copia degli oggetti con una dimensione superiore a 5 GB, è necessario utilizzare l'API per il caricamento in più parti. Per ulteriori informazioni, consulta Copia di un oggetto utilizzando il caricamento in più parti.

Java

Nell'esempio seguente viene illustrato come copiare un oggetto in Amazon S3 tramite la AWS SDK for Java. Per istruzioni su come creare e testare un esempio di utilizzo, consulta Test degli esempi di codice Java di 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

Il seguente esempio in C# utilizza l'alto livello AWS SDK for .NET per copiare oggetti di dimensioni fino a 5 GB in una singola operazione. Per gli oggetti con una dimensione superiore a 5 GB, utilizza l'esempio di copia di un caricamento in più parti descritto in Copia di un oggetto utilizzando il caricamento in più parti.

Questo esempio crea una copia di un oggetto con dimensione massima di 5 GB. Per informazioni sulla compatibilità dell'esempio con una versione specifica dell' AWS SDK for .NET e istruzioni su come creare e testare un esempio funzionante, Esecuzione degli esempi di codice .NET di Amazon S3 consulta.

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

Questo argomento illustra come utilizzare le classi della versione 3 AWS SDK for PHP per copiare un singolo oggetto e più oggetti all'interno di Amazon S3, da un bucket all'altro o all'interno dello stesso bucket.

In questo argomento si presume che siano già state seguite le istruzioni riportate in Utilizzo dell'AWS SDK for PHP ed esecuzione degli esempi in PHP e che AWS SDK for PHP sia stato correttamente installato.

Il seguente esempio del PHP mostra come utilizzare il metodo copyObject() per copiare un singolo oggetto in Amazon S3 e come utilizzare un batch di chiamate a CopyObject utilizzando il metodo getcommand() per eseguire più copie di un oggetto.

1

Crea un'istanza di un client Amazon S3 utilizzando il costruttore della classe Aws\S3\S3Client.

2

Per creare più copie di un oggetto, esegui un batch di chiamate al metodo getCommand () del client Amazon S3, che viene ereditato dalla classe Aws\. CommandInterface Specificare il comando CopyObject come primo argomento e un array contenente il bucket di origine, il nome della chiave di origine, il bucket di destinazione e il nome della chiave di destinazione come secondo argomento.

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

Le seguenti attività mostrano in dettaglio come utilizzare le classi Ruby per copiare un oggetto in Amazon S3 da un bucket a un altro bucket o all'interno dello stesso bucket.

1

Usa la gemma modularizzata Amazon S3 per la versione 3 di AWS SDK for Ruby, richiedi 'aws-sdk-s3' e fornisci le tue credenziali. AWS Per ulteriori informazioni su come fornire le credenziali, consulta Esecuzione di richieste mediante l'Account AWS o le credenziali utente IAM.

2

Fornire le informazioni relative alla richiesta, quali il nome del bucket di origine, il nome della chiave di origine, il nome del bucket di destinazione e il nome della chiave di destinazione.

Il seguente esempio di codice Ruby mostra le attività precedenti sull'utilizzo del metodo #copy_object per copiare un oggetto da un bucket all'altro.

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__

In questo esempio viene descritto come copiare un oggetto utilizzando REST. Per ulteriori informazioni su REST API, consulta PUT Object (Copy).

In questo esempio viene copiato l'oggetto flotsam dal bucket pacific all'oggetto jetsam del bucket atlantic conservandone i metadata.

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 firma viene generata dalle seguenti informazioni.

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 restituisce la risposta riportata di seguito che specifica l'ETag dell'oggetto e la data dell'ultima modifica.

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>

Puoi anche usare il AWS Command Line Interface (AWS CLI) per creare un oggetto S3. Per ulteriori informazioni, consulta copy-object in Riferimento ai comandi della AWS CLI .

Per informazioni su AWS CLI, consulta What is the AWS Command Line Interface? nella Guida AWS Command Line Interface per l'utente.