Copiar dados do Google Cloud Storage para o Armazenamento do Azure usando o AzCopy

O AzCopy é um utilitário da linha de comandos que pode utilizar para copiar blobs ou ficheiros de/para uma conta de armazenamento. Este artigo ajuda você a copiar objetos, diretórios e buckets do Google Cloud Storage para o Armazenamento de Blobs do Azure usando o AzCopy.

Escolher como disponibilizar as credenciais de autorização

  • Para autorizar com o Armazenamento do Azure, use a ID do Microsoft Entra ou um token SAS (Assinatura de Acesso Compartilhado).

  • Para autorizar com o Google Cloud Storage, use uma chave de conta de serviço.

Autorizar com o Armazenamento do Azure

Consulte o artigo Introdução ao AzCopy para baixar o AzCopy e saiba mais sobre as maneiras de fornecer credenciais de autorização para o serviço de armazenamento.

Nota

Os exemplos neste artigo pressupõem que você forneceu credenciais de autorização usando o Microsoft Entra ID.

Se preferir usar um token SAS para autorizar o acesso a dados de blob, você pode acrescentar esse token à URL do recurso em cada comando AzCopy. Por exemplo: 'https://<storage-account-name>.blob.core.windows.net/<container-name><SAS-token>'.

Autorizar com o Google Cloud Storage

Para autorizar com o Google Cloud Storage, você usará uma chave de conta de serviço. Para obter informações sobre como criar uma chave de conta de serviço, consulte Criando e gerenciando chaves de conta de serviço.

Depois de obter uma chave de serviço, defina a GOOGLE_APPLICATION_CREDENTIALS variável de ambiente como caminho absoluto para o arquivo de chave da conta de serviço:

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>

Copiar objetos, diretórios e buckets

O AzCopy usa a API Put Block From URL, portanto, os dados são copiados diretamente entre o Google Cloud Storage e os servidores de armazenamento. Essas operações de cópia não usam a largura de banda de rede do seu computador.

Gorjeta

Os exemplos nesta seção incluem argumentos de caminho com aspas simples (''). Use aspas simples em todos os shells de comando, exceto no Shell de Comando do Windows (cmd.exe). Se você estiver usando um Shell de Comando do Windows (cmd.exe), coloque argumentos de caminho entre aspas duplas ("") em vez de aspas simples ('').

Esses exemplos também funcionam com contas que têm um namespace hierárquico. O acesso multiprotocolo no Data Lake Storage permite que você use a mesma sintaxe de URL (blob.core.windows.net) nessas contas.

Copiar um objeto

Use a mesma sintaxe de URL (blob.core.windows.net) para contas que têm um namespace hierárquico.

Sintaxe

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

Exemplo

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

Copiar um diretório

Use a mesma sintaxe de URL (blob.core.windows.net) para contas que têm um namespace hierárquico.

Sintaxe

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

Exemplo

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

Nota

Este exemplo acrescenta o --recursive sinalizador para copiar arquivos em todos os subdiretórios.

Copiar o conteúdo de um diretório

Você pode copiar o conteúdo de um diretório sem copiar o próprio diretório que contém usando o símbolo curinga (*).

Sintaxe

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

Exemplo

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

Copiar um bucket de armazenamento em nuvem

Use a mesma sintaxe de URL (blob.core.windows.net) para contas que têm um namespace hierárquico.

Sintaxe

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

Exemplo

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

Copiar todos os buckets em um projeto do Google Cloud

Primeiro, defina o ID do projeto do Google Cloud como o GOOGLE_CLOUD_PROJECT ID do projeto.

Use a mesma sintaxe de URL (blob.core.windows.net) para contas que têm um namespace hierárquico.

Sintaxe

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

Exemplo

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

Copiar um subconjunto de buckets em um projeto do Google Cloud

Primeiro, defina o ID do projeto do Google Cloud como o GOOGLE_CLOUD_PROJECT ID do projeto.

Copie um subconjunto de buckets usando um símbolo curinga (*) no nome do bucket. Use a mesma sintaxe de URL (blob.core.windows.net) para contas que têm um namespace hierárquico.

Sintaxe

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

Exemplo

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

Lidar com diferenças nas regras de nomenclatura de bucket

O Google Cloud Storage tem um conjunto diferente de convenções de nomenclatura para nomes de bucket em comparação com os contêineres de blob do Azure. Você pode ler sobre eles aqui. Se você optar por copiar um grupo de buckets para uma conta de armazenamento do Azure, a operação de cópia poderá falhar devido a diferenças de nomenclatura.

AzCopy lida com três dos problemas mais comuns que podem surgir; buckets que contêm pontos, buckets que contêm hífenes consecutivos e buckets que contêm sublinhados. Os nomes dos buckets do Google Cloud Storage podem conter períodos e hífenes consecutivos, mas um contêiner no Azure não pode. AzCopy substitui períodos com hífenes e hífenes consecutivos por um número que representa o número de hífenes consecutivos (Por exemplo: um bucket chamado my----bucket torna-se my-4-bucket. Se o nome do bucket tiver um sublinhado (_), AzCopy substituirá o sublinhado por um hífen. Por exemplo, um bucket chamado my_bucket torna-se my-bucket.

Manipular diferenças nas regras de nomenclatura de objetos

O Google Cloud Storage tem um conjunto diferente de convenções de nomenclatura para nomes de objetos em comparação com os blobs do Azure. Você pode ler sobre eles aqui.

O Armazenamento do Azure não permite que nomes de objetos (ou qualquer segmento no caminho do diretório virtual) terminem com pontos à direita (Por exemplo my-bucket...). Os pontos à direita são cortados quando a operação de cópia é executada.

Manipular diferenças nos metadados do objeto

O Google Cloud Storage e o Azure permitem diferentes conjuntos de caracteres nos nomes das chaves de objeto. Você pode ler sobre metadados no Google Cloud Storage aqui. No lado do Azure, as chaves de objeto de blob aderem às regras de nomenclatura para identificadores C#.

Como parte de um comando AzCopy copy , você pode fornecer um valor para opcional o s2s-handle-invalid-metadata sinalizador que especifica como você gostaria de lidar com arquivos onde os metadados do arquivo contêm nomes de chave incompatíveis. A tabela a seguir descreve cada valor de sinalizador.

Valor da bandeira Descrição
ExcludeIfInvalid (Opção padrão) Os metadados não são incluídos no objeto transferido. AzCopy registra um aviso.
FailIfInvalid Os objetos não são copiados. AzCopy registra um erro e inclui esse erro na contagem de falha que aparece no resumo da transferência.
RenameIfInvalid AzCopy resolve a chave de metadados inválida e copia o objeto para o Azure usando o par de valores de chave de metadados resolvidos. Para saber exatamente quais etapas o AzCopy executa para renomear chaves de objeto, consulte a seção Como o AzCopy renomeia chaves de objeto abaixo. Se AzCopy não conseguir renomear a chave, o objeto não será copiado.

Como o AzCopy renomeia chaves de objeto

AzCopy executa estas etapas:

  1. Substitui caracteres inválidos por '_'.

  2. Adiciona a cadeia de caracteres rename_ ao início de uma nova chave válida.

    Essa chave será usada para salvar o valor de metadados original.

  3. Adiciona a cadeia de caracteres rename_key_ ao início de uma nova chave válida. Essa chave será usada para salvar a chave inválida de metadados originais. Você pode usar essa chave para tentar recuperar os metadados no lado do Azure, já que a chave de metadados é preservada como um valor no serviço de armazenamento de Blob.

Próximos passos

Encontre mais exemplos nestes artigos:

Consulte estes artigos para definir configurações, otimizar o desempenho e solucionar problemas: