Copiare dati da Google Cloud Storage in 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 Google Cloud Storage in Archiviazione BLOB di Azure usando AzCopy.

Scegliere il modo in cui fornire le credenziali di autorizzazione

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

  • Per autorizzare con Google Cloud Storage, usare una chiave dell'account del servizio.

Autorizzare con Archiviazione di Azure

Vedere l'articolo Introduzione ad AzCopy per scaricare AzCopy e scoprire informazioni sui modi in cui è possibile fornire le credenziali di autorizzazione al servizio di archiviazione.

Nota

Gli esempi in questo articolo presuppongono che siano state fornite le credenziali di autorizzazione usando l'ID Microsoft Entra.

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://<storage-account-name>.blob.core.windows.net/<container-name><SAS-token>'.

Autorizzare con Google Cloud Storage

Per autorizzare con Google Cloud Storage, si usa una chiave dell'account del servizio. Per informazioni su come creare una chiave dell'account del servizio, vedere Creazione e gestione delle chiavi dell'account del servizio.

Dopo aver ottenuto una chiave del servizio, impostare la variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS sul percorso assoluto del file di chiave dell'account del servizio:

Sistema operativo Comando
Windows set GOOGLE_APPLICATION_CREDENTIALS=<path-to-service-account-key>
Linux export GOOGLE_APPLICATION_CREDENTIALS=<path-to-service-account-key>
macOS export GOOGLE_APPLICATION_CREDENTIALS=<path-to-service-account-key>

Copiare oggetti, directory e bucket

AzCopy usa l'API di Put Block From URL, quindi i dati vengono copiati direttamente tra Google Cloud Storage 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://storage.cloud.google.com/<bucket-name>/<object-name>' 'https://<storage-account-name>.blob.core.windows.net/<container-name>/<blob-name>'

Esempio

azcopy copy 'https://storage.cloud.google.com/mybucket/myobject' 'https://mystorageaccount.blob.core.windows.net/mycontainer/myblob'

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://storage.cloud.google.com/<bucket-name>/<directory-name>' 'https://<storage-account-name>.blob.core.windows.net/<container-name>/<directory-name>' --recursive=true

Esempio

azcopy copy 'https://storage.cloud.google.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://storage.cloud.google.com/<bucket-name>/<directory-name>/*' 'https://<storage-account-name>.blob.core.windows.net/<container-name>/<directory-name>' --recursive=true

Esempio

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

Copiare un bucket di Archiviazione nel cloud

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

Sintassi

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

Esempio

azcopy copy 'https://storage.cloud.google.com/mybucket' 'https://mystorageaccount.blob.core.windows.net' --recursive=true

Copiare tutti i bucket in un progetto Google Cloud

Prima di tutto, impostare GOOGLE_CLOUD_PROJECT sull'ID progetto di Google Cloud.

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

Sintassi

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

Esempio

azcopy copy 'https://storage.cloud.google.com/' 'https://mystorageaccount.blob.core.windows.net' --recursive=true

Copiare un subset di bucket in un progetto Google Cloud

Prima di tutto, impostare GOOGLE_CLOUD_PROJECT sull'ID progetto di Google Cloud.

Copiare un subset di bucket usando un simbolo jolly (*) nel nome del bucket. Usare la stessa sintassi URL (blob.core.windows.net) per gli account con uno spazio dei nomi gerarchico.

Sintassi

azcopy copy 'https://storage.cloud.google.com/<bucket*name>' 'https://<storage-account-name>.blob.core.windows.net' --recursive=true

Esempio

azcopy copy 'https://storage.cloud.google.com/my*bucket' 'https://mystorageaccount.blob.core.windows.net' --recursive=true

Gestire le differenze nelle regole di denominazione dei bucket

Google Cloud Storage 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 tre dei problemi più comuni che possono verificarsi; bucket che contengono punti, bucket che contengono trattini consecutivi e bucket che contengono caratteri di sottolineatura. I nomi dei bucket di Google Cloud Storage 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. Se il nome del bucket ha un carattere di sottolineatura (_), AzCopy lo sostituisce con un trattino. Ad esempio, un bucket denominato my_bucket diventa my-bucket.

Gestire le differenze nelle regole di denominazione degli oggetti

Google Cloud Storage ha un set diverso di convenzioni di denominazione per i nomi di oggetti rispetto ai BLOB di Azure. Tutte le informazioni a riguardo sono disponibili qui.

Archiviazione di Azure non consente ai nomi degli oggetti (o a qualsiasi segmento nel percorso della directory virtuale) di terminare con punti finali ( ad esempio my-bucket...). I punti finali vengono eliminati quando viene eseguita l'operazione di copia.

Gestire le differenze nei metadati degli oggetti

Google Cloud Storage e Azure consentono diversi set di caratteri nei nomi delle chiavi oggetto. È possibile leggere informazioni sui metadati in Google Cloud Storage 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: