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

6 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. Desidero migrare oggetti tra i miei bucket S3.

Breve descrizione

Per copiare oggetti da un bucket S3 a un altro, segui questi passaggi:

1.    Crea un nuovo bucket S3.

2.    Installa e configura l’interfaccia della linea di comando AWS (AWS CLI).

3.    Copia gli oggetti tra i bucket S3.

Nota: l'uso dei comandi aws s3 ls o aws s3 sync su bucket di grandi dimensioni (con 10 milioni di oggetti o più) può risultare costoso e determinare un timeout. Se riscontri dei timeout a causa di un bucket di grandi dimensioni, valuta la possibilità di utilizzare i parametri di Amazon CloudWatch per calcolare la dimensione e il numero di oggetti in un bucket. Inoltre, considera l'utilizzo di Operazioni in batch S3 per copiare gli oggetti.

4.    Verifica che gli oggetti siano stati copiati.

5.    Aggiorna le chiamate API esistenti al nome del bucket di destinazione.

Prima di iniziare, considera quanto segue:

Risoluzione

Crea un nuovo bucket S3

1.    Apri la console Amazon S3.

2.    Scegli Crea bucket.

3.    Scegli un nome conforme al DNS per il nuovo bucket.

4.    Seleziona la regione AWS.

Suggerimento: per evitare problemi relativi alle prestazioni causati dal traffico interregionale, crea il bucket di destinazione nella stessa regione di quello di origine.

5.    Facoltativamente, scegli Copiare le impostazioni da un bucket esistente per rispecchiare la configurazione del bucket di origine.

Installa e configura AWS CLI

1.    Installa AWS CLI.

2.    Configura AWS CLI eseguendo il seguente comando:

aws configure

Nota: se ricevi errori durante l'esecuzione dei comandi, assicurati di utilizzare la versione più recente di AWS CLI.

3.    Inserisci le tue chiavi di accesso (ID chiave di accesso e chiave di accesso segreta).

4.    Premi Invio per saltare la regione predefinita e le opzioni di output predefinite. Per ulteriori informazioni sui parametri della regione Amazon S3, consulta AWS service endpoints.

Nota: gli output di AWS CLI sono JSON, testo o tabelle, ma non tutti i comandi supportano tutti i tipi di output. Per ulteriori informazioni, consulta Controlling command output from the AWS CLI.

Copia di oggetti tra bucket S3

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

2.    Copia gli oggetti tra i bucket di origine e di destinazione eseguendo il seguente comando di sincronizzazione con AWS CLI:

aws s3 sync s3://DOC-EXAMPLE-BUCKET-SOURCE s3://DOC-EXAMPLE-BUCKET-TARGET

Nota: aggiorna il comando di sincronizzazione per includere i nomi dei bucket di origine e di destinazione.

Il comando di sincronizzazione utilizza le API CopyObject per copiare oggetti tra bucket S3. Il comando di sincronizzazione elenca i bucket di origine e di destinazione per identificare gli oggetti che si trovano nel bucket di origine ma che non si trovano nel bucket di destinazione. Il comando identifica anche gli oggetti nel bucket di origine le cui date LastModified sono diverse rispetto agli oggetti che si trovano nel bucket di destinazione. Quando utilizzi il comando di sincronizzazione in un bucket con versione, viene copiata solo la versione corrente dell'oggetto, le versioni precedenti non vengono copiate. Per impostazione predefinita, tale comportamento preserva i metadati degli oggetti.

Se nel bucket di origine sono abilitate le liste di controllo degli accessi (ACL), queste non verranno copiate nel bucket di destinazione. Ciò avviene indipendentemente dal fatto che le ACL siano abilitate o disabilitate nel bucket di destinazione. Se sia il bucket di origine che quello di destinazione hanno ACL abilitate, le ACL dell'oggetto di destinazione concederanno FULL_CONTROL all'account che ha eseguito la copia. Se l'operazione non riesce, è possibile eseguire nuovamente il comando di sincronizzazione senza duplicare gli oggetti copiati in precedenza. Per risolvere i problemi relativi all'operazione di sincronizzazione consulta Why can't I copy an object between two Amazon S3 buckets?

3.    (Facoltativo) Se riscontri un timeout, utilizza il comando cloudwatch get-metric-statistics per calcolare il numero di oggetti nel bucket:

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

4.    (Facoltativo) Se riscontri un timeout, utilizza il comando cloudwatch get-metric-statistics per recuperare la dimensione del bucket:

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

Nota: le listcall possono essere molto costose, con conseguente timeout del comando. Per i bucket di grandi dimensioni, valuta in alternativa l'utilizzo dei parametri di Amazon CloudWatch per calcolare le dimensioni del bucket e il numero totale di oggetti. Tuttavia, poiché i parametri di Amazon CloudWatch vengono eseguiti solo una volta al giorno, il numero di oggetti segnalati e la dimensione del bucket possono variare rispetto ai risultati del comando list.

Verifica della copia degli oggetti

1.    Verifica il contenuto dei bucket di origine e di destinazione eseguendo i seguenti comandi:

aws s3 ls --recursive s3://DOC-EXAMPLE-BUCKET-SOURCE --summarize > bucket-contents-source.txt

aws s3 ls --recursive s3://DOC-EXAMPLE-BUCKET-TARGET --summarize > bucket-contents-target.txt

Nota: aggiorna il comando list in modo da includere i nomi dei bucket di origine e di destinazione.

2.    Confronta gli oggetti presenti nei bucket di origine e di destinazione utilizzando gli output salvati nei file della directory AWS CLI. Considera il seguente output di esempio:

$ aws s3 ls --recursive s3://DOC-EXAMPLE-BUCKET --summarize
2017-11-20 21:17:39      15362 s3logo.png

  Total Objects: 1        Total Size: 15362

Aggiornamento delle chiamate API esistenti in base al nome del bucket di destinazione

Aggiorna le applicazioni o i carichi di lavoro esistenti in modo tale che utilizzino il nome del bucket di destinazione. Se le operazioni di scrittura sono frequenti, potrebbe essere necessario eseguire comandi di sincronizzazione per risolvere le discrepanze tra i bucket di origine e di destinazione.

Informazioni correlate

Prezzi di Amazon S3

Copy your object to a folder

After performing a large deletion operation in Amazon S3, the list command is unresponsive. How do I troubleshoot this?

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa