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:
Sostituisce i caratteri non validi con "_".
Aggiunge la stringa
rename_
all'inizio di una nuova chiave valida.Questa chiave verrà usata per salvare il valore dei metadati originali.
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:
- Esempi: Caricamento
- Esempi: Download
- Esempi: Copiare tra account
- Esempi: Sincronizzare
- Esempi: Google Cloud Storage
- Esempi: File di Azure
- Esercitazione: Eseguire la migrazione di dati locali in una risorsa di archiviazione cloud tramite AzCopy
Vedere questi articoli per configurare le impostazioni, ottimizzare le prestazioni e risolvere i problemi: