Come posso copiare tutti gli oggetti da un bucket Amazon S3 a un altro bucket?

5 minuti di lettura
0

Desidero copiare o spostare tutti i miei oggetti da un bucket Amazon Simple Storage Service (Amazon S3) a un altro bucket.

Breve descrizione

Per copiare oggetti da un bucket S3 a un altro bucket, scegli una delle opzioni seguenti:

  • Esegui il comando sync dall'interfaccia della linea di comando AWS (AWS CLI)
  • Usa le operazioni in batch S3 per i bucket che contengono molti oggetti

Il comando sync funziona bene per i bucket non molto grandi. Ma è costoso eseguire il comando sync per copiare bucket di grandi dimensioni con milioni di oggetti e l'operazione di copia potrebbe andare in timeout. Se riscontri dei timeout durante la copia di un bucket, utilizza le metriche Amazon CloudWatch per calcolare la dimensione e il numero degli oggetti nel bucket. Se il bucket S3 contiene milioni di oggetti, è consigliabile utilizzare le operazioni in batch S3 per copiare gli oggetti.

Nota: per copiare oggetti dal tuo bucket a un bucket di proprietà di un altro account AWS, usa AWS Identity and Access Management (IAM) per configurare autorizzazioni multi-account. Assicurati che il tuo ruolo IAM disponga delle autorizzazioni s3:GetObjectTagging per gli oggetti di origine e delle autorizzazioni s3:PutObjectTagging per gli oggetti di destinazione.

Per migliorare le prestazioni di sincronizzazione e copiare gli oggetti più velocemente, effettua una o più delle operazioni seguenti:

Risoluzione

Nota: se ricevi messaggi di errore quando esegui i comandi dell'interfaccia della linea di comando AWS, consulta Troubleshooting errors for the AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Copia gli oggetti tra i bucket S3

Per copiare oggetti da un bucket a un altro bucket, completa i passaggi seguenti:

  1. Se hai archiviato gli oggetti S3 nella classe di archiviazione di Amazon Simple Storage Service Glacier, ripristina gli oggetti.

  2. Esegui il comando sync seguente, ma sostituisci example_source_bucket ed example_target_bucket con i nomi dei tuoi bucket S3:

    aws s3 sync s3://example_source_bucket s3://example_target_bucket

    Nota: il comando sync copia solo gli oggetti che non sono già presenti nel bucket di destinazione. Per copiare in modo esplicito ogni oggetto, usa il comando cp invece del comando sync. Quando usi il comando sync su un bucket con controllo delle versioni, viene copiata solo la versione corrente di ciascun oggetto. Per impostazione predefinita, questo comportamento preserva i metadati degli oggetti.

  3. (Facoltativo) In caso di timeout, usa il comando CloudWatch get-metric-statistics per calcolare le dimensioni del bucket e il numero di oggetti.

    Per calcolare la dimensione del bucket, esegui il comando seguente:

    aws cloudwatch get-metric-statistics --namespace AWS/S3 --metric-name BucketSizeBytes --dimensions Name=BucketName,Value=example_source_bucket Name=StorageType,Value=StandardStorage --start-time 2021-05-11T00:00 --end-time 2021-05-11T00:10 --period 3600 --statistics Average --unit Bytes --output json

    Per calcolare il numero di oggetti nel bucket, esegui il comando seguente:

    aws cloudwatch get-metric-statistics --namespace AWS/S3 --metric-name NumberOfObjects --dimensions Name=BucketName,Value=example_source_bucket Name=StorageType,Value=AllStorageTypes --start-time 2021-05-11T00:00 --end-time 2021-05-11T00:10 --period 600 --statistic Average --output json

    Se il bucket è di grandi dimensioni e contiene milioni di oggetti, non usare il comando sync. Usa invece le operazioni in batch S3 per copiare il bucket.

Importante: le liste di controllo degli accessi (ACL) non vengono copiate dal bucket di origine al bucket di destinazione quando esegui il comando sync. Se sia il bucket di origine che quello di destinazione hanno ACL attive, le ACL dell'oggetto di destinazione concederanno l'autorizzazione FULL_CONTROL all'account che ha eseguito la copia. Per risolvere i problemi relativi al comando sync, consulta Why can't I copy an object between two Amazon S3 buckets?

Verifica che gli oggetti siano stati copiati

Per verificare che gli oggetti siano stati copiati, completa i passaggi seguenti:

  1. Per verificare il contenuto dei bucket di origine e di destinazione, esegui i comandi ls seguenti:
    aws s3 ls --recursive s3://example_source_bucket --summarize > bucket-contents-source.txt
    aws s3 ls --recursive s3://example_target_bucket --summarize > bucket-contents-target.txt
    Nota: il comando ls può andare in timeout per bucket di grandi dimensioni. Per bucket di grandi dimensioni, usa le metriche CloudWatch per calcolare le dimensioni del bucket e il numero totale di oggetti, invece del comando ls. Tuttavia, poiché il pull delle metriche Amazon CloudWatch viene eseguito solo una volta al giorno, i risultati di CloudWatch potrebbero differire dai risultati del comando ls.
  2. Usa i file di testo dall'output dei comandi ls precedenti per confrontare gli oggetti tra i bucket di origine e di destinazione. L'output sarà simile all'esempio seguente:
    2017-11-20 21:17:39      15362 s3logo.png
    
      Total Objects: 1        Total Size: 15362

Nota: se hai applicazioni o carichi di lavoro che effettuano chiamate API al bucket di origine, aggiorna tali chiamate API al bucket di destinazione. Se hai operazioni di scrittura frequenti, potrebbe essere necessario eseguire comandi sync per risolvere le discrepanze tra i bucket di origine e di destinazione.

Informazioni correlate

Prezzi di Amazon S3

Copying an object to a directory bucket

How do I troubleshoot an unresponsive list command after I perform a large deletion in Amazon S3?

Come posso copiare oggetti S3 da un altro account AWS?

AWS UFFICIALE
AWS UFFICIALEAggiornata 4 mesi fa