Copiare dati da Amazon S3 a Archiviazione di Azure usando AzCopy

AzCopy è un'utilità della riga di comando che è possibile usare per copiare i BLOB o i file da e verso un account di archiviazione. Questo articolo illustra come copiare oggetti, directory e bucket da Amazon Web Services (AWS) S3 a Archiviazione BLOB di Azure usando AzCopy.

Nota

AzCopy supporta URL standard di tipo virtual-hosted o path-style definiti da AWS. Ad esempio, https://bucket.s3.amazonaws.com o https://s3.amazonaws.com/bucket.

Scegliere il modo in cui fornire le credenziali di autorizzazione

  • Per autorizzare con il Archiviazione di Azure, usare Microsoft Entra ID o un token di firma di accesso condiviso .

  • Per autorizzare con AWS S3, usare una chiave di accesso AWS e una chiave di accesso privata.

Autorizzare con Archiviazione di Azure

Vedere l'articolo Introduzione ad AzCopy per scaricare AzCopy e scegliere come fornire le credenziali di autorizzazione al servizio di archiviazione.

Nota

Gli esempi in questo articolo presuppongono che l'identità sia stata autenticata usando il AzCopy login comando . AzCopy usa quindi l'account Microsoft Entra per autorizzare l'accesso ai dati nell'archivio BLOB.

Se si preferisce usare un token di firma di accesso condiviso per autorizzare l'accesso ai dati BLOB, è possibile aggiungere tale token all'URL della risorsa in ogni comando AzCopy.

Ad esempio: https://mystorageaccount.blob.core.windows.net/mycontainer?<SAS-token>.

Autorizzare con AWS S3

Raccogliere la chiave di accesso aws e la chiave di accesso privata e quindi impostare queste variabili di ambiente:

Sistema operativo Comando
Windows PowerShell:$env:AWS_ACCESS_KEY_ID=<access-key>
$env:AWS_SECRET_ACCESS_KEY=<secret-access-key>
Al prompt dei comandi digitare quanto segue: set AWS_ACCESS_KEY_ID=<access-key>
set AWS_SECRET_ACCESS_KEY=<secret-access-key>
Linux export AWS_ACCESS_KEY_ID=<access-key>
export AWS_SECRET_ACCESS_KEY=<secret-access-key>
macOS export AWS_ACCESS_KEY_ID=<access-key>
export AWS_SECRET_ACCESS_KEY=<secret-access-key>

Queste credenziali vengono usate per generare URL prefirmati usati per copiare gli oggetti.

Copiare oggetti, directory e bucket

AzCopy usa l'API Put Block From URL , quindi i dati vengono copiati direttamente tra AWS S3 e i server di archiviazione. Queste operazioni di copia non usano la larghezza di banda di rete del computer.

Suggerimento

Negli esempi di questa sezione gli argomenti path vengono racchiusi con virgolette singole (''). Usare virgolette singole in tutte le shell dei comandi, ad eccezione della shell dei comandi di Windows (cmd.exe). Se si usa una shell dei comandi di Windows (cmd.exe), racchiudere gli argomenti di percorso con virgolette doppie ("") anziché virgolette singole ('').

Questi esempi funzionano anche con gli account con uno spazio dei nomi gerarchico. L'Accesso multi-protocollo in Data Lake Storage consente di usare la stessa sintassi URL (blob.core.windows.net) in tali account.

Copiare un oggetto

Usare la stessa sintassi URL (blob.core.windows.net) per gli account con uno spazio dei nomi gerarchico.

Sintassi

azcopy copy 'https://s3.amazonaws.com/<bucket-name>/<object-name>' 'https://<storage-account-name>.blob.core.windows.net/<container-name>/<blob-name>'

Esempio

azcopy copy 'https://s3.amazonaws.com/mybucket/myobject' 'https://mystorageaccount.blob.core.windows.net/mycontainer/myblob'

Nota

Gli esempi in questo articolo usano gli URL di tipo percorso per i bucket AWS S3 (ad esempio: http://s3.amazonaws.com/<bucket-name>).

È anche possibile usare url di tipo ospitato virtuale (ad esempio: http://bucket.s3.amazonaws.com).

Per altre informazioni sull'hosting virtuale di bucket, vedere Hosting virtuale di bucket.

Copiare una directory

Usare la stessa sintassi URL (blob.core.windows.net) per gli account con uno spazio dei nomi gerarchico.

Sintassi

azcopy copy 'https://s3.amazonaws.com/<bucket-name>/<directory-name>' 'https://<storage-account-name>.blob.core.windows.net/<container-name>/<directory-name>' --recursive=true

Esempio

azcopy copy 'https://s3.amazonaws.com/mybucket/mydirectory' 'https://mystorageaccount.blob.core.windows.net/mycontainer/mydirectory' --recursive=true

Nota

In questo esempio viene aggiunto il flag --recursive per copiare i file in tutte le sottodirectory.

Copiare i contenuti di una directory

È possibile copiare i contenuti di una directory senza copiare la directory stessa che lo contiene usando il carattere jolly (*).

Sintassi

azcopy copy 'https://s3.amazonaws.com/<bucket-name>/<directory-name>/*' 'https://<storage-account-name>.blob.core.windows.net/<container-name>/<directory-name>' --recursive=true

Esempio

azcopy copy 'https://s3.amazonaws.com/mybucket/mydirectory/*' 'https://mystorageaccount.blob.core.windows.net/mycontainer/mydirectory' --recursive=true

Copiare un bucket

Usare la stessa sintassi URL (blob.core.windows.net) per gli account con uno spazio dei nomi gerarchico.

Sintassi

azcopy copy 'https://s3.amazonaws.com/<bucket-name>' 'https://<storage-account-name>.blob.core.windows.net/<container-name>' --recursive=true

Esempio

azcopy copy 'https://s3.amazonaws.com/mybucket' 'https://mystorageaccount.blob.core.windows.net/mycontainer' --recursive=true

Copiare tutti i bucket in tutte le aree

Usare la stessa sintassi URL (blob.core.windows.net) per gli account con uno spazio dei nomi gerarchico.

Sintassi

azcopy copy 'https://s3.amazonaws.com/' 'https://<storage-account-name>.blob.core.windows.net' --recursive=true

Esempio

azcopy copy 'https://s3.amazonaws.com' 'https://mystorageaccount.blob.core.windows.net' --recursive=true

Copiare tutti i bucket in un'area S3 specifica

Usare la stessa sintassi URL (blob.core.windows.net) per gli account con uno spazio dei nomi gerarchico.

Sintassi

azcopy copy 'https://s3-<region-name>.amazonaws.com/' 'https://<storage-account-name>.blob.core.windows.net' --recursive=true

Esempio

azcopy copy 'https://s3-rds.eu-north-1.amazonaws.com' 'https://mystorageaccount.blob.core.windows.net' --recursive=true

Gestire le differenze nelle regole di denominazione degli oggetti

AWS S3 ha un set diverso di convenzioni di denominazione per i nomi di bucket rispetto ai contenitori BLOB di Azure. Tutte le informazioni a riguardo sono disponibili qui. Se si sceglie di copiare un gruppo di bucket in un account di archiviazione di Azure, l'operazione di copia potrebbe non riuscire a causa delle differenze di denominazione.

AzCopy gestisce due dei problemi più comuni che possono verificarsi; bucket che contengono punti e bucket che contengono trattini consecutivi. I nomi dei bucket di AWS S3 possono contenere punti e trattini consecutivi, ma un contenitore in Azure non può. AzCopy sostituisce i punti con trattini e i trattini consecutivi con un numero che rappresenta il numero di trattini consecutivi (ad esempio, un bucket denominato my----bucket diventa my-4-bucket.

Inoltre, poiché AzCopy copia i file, verifica la presenza di conflitti di denominazione e tenta di risolverli. Ad esempio, se sono presenti bucket con il nome bucket-name e bucket.name, AzCopy risolve prima un bucket denominato bucket.name in bucket-name e quindi in bucket-name-2.

Gestire le differenze nei metadati degli oggetti

AWS S3 e Azure consentono diversi set di caratteri nei nomi delle chiavi oggetto. Per informazioni sui caratteri usati da AWS S3, vedere qui. Su lato Azure le chiavi oggetto BLOB rispettano le regole di denominazione per gli identificatori C#.

Come parte di un comando AzCopy copy, è possibile fornire un valore facoltativo per il flag s2s-handle-invalid-metadata che specifica come gestire i file in cui i metadati del file contengono nomi di chiave incompatibili. Nella tabella seguente sono descritti i singoli valori dei flag.

Valore flag Descrizione
ExcludeIfInvalid (opzione predefinita) I metadati non sono inclusi nell'oggetto trasferito. AzCopy registra un avviso.
FailIfInvalid Gli oggetti non vengono copiati. AzCopy registra un errore e include tale errore nel conteggio visualizzato nel riepilogo del trasferimento.
RenameIfInvalid AzCopy risolve la chiave di metadati non valida e copia l'oggetto in Azure usando la coppia di valori della chiave dei metadati risolta. Per informazioni sui passaggi esatti impiegati da AzCopy per rinominare le chiavi oggetto, vedere la sezione Come AzCopy rinomina le chiavi degli oggetti di seguito. Se AzCopy non è in grado di rinominare la chiave, l'oggetto non verrà copiato.

Come AzCopy rinomina le chiavi degli oggetti

AzCopy esegue i seguenti passaggi:

  1. Sostituisce i caratteri non validi con "_".

  2. Aggiunge la stringa rename_ all'inizio di una nuova chiave valida.

    Questa chiave verrà usata per salvare il valore dei metadati originali.

  3. Aggiunge la stringa rename_key_ all'inizio di una nuova chiave valida. Questa chiave verrà usata per salvare la chiave originale dei metadati non validi. È possibile usare questa chiave per provare a recuperare i metadati sul lato Azure perché la chiave di metadati viene mantenuta come valore nel servizio di archiviazione BLOB.

Passaggi successivi

Altri esempi sono disponibili in questi articoli:

Vedere questi articoli per configurare le impostazioni, ottimizzare le prestazioni e risolvere i problemi: