Compartilhar via


Copiar dados do Amazon S3 para o Armazenamento do Azure usando o AzCopy

AzCopy é um utilitário de linha de comando que você pode usar para copiar blobs ou arquivos de ou para uma conta de armazenamento. Este artigo ajuda você a copiar objetos, diretórios e buckets do Amazon Web Services (AWS) S3 para o Armazenamento de Blobs do Azure usando o AzCopy.

Observação

O AzCopy dá suporte aos URLs padrão de estilo hospedado virtual ou estilo de caminho definidas pela AWS. Por exemplo: https://bucket.s3.amazonaws.com ou https://s3.amazonaws.com/bucket.

Escolha como você fornecerá credenciais de autorização

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

  • Para autorizar com o AWS S3, use uma chave de acesso AWS e uma chave de acesso secreta.

Autorizar com Armazenamento Azure

Confira o artigo Introdução ao AzCopy para baixar o AzCopy e escolha como você fornecerá credenciais de autorização para o serviço de armazenamento.

Observação

Os exemplos neste artigo pressupõem que você autentique sua identidade usando o AzCopy login comando. Em seguida, o AzCopy usa sua conta do Microsoft Entra para autorizar o acesso aos dados no Armazenamento Blob.

Se você preferir usar um token SAS para autorizar o acesso aos dados de blob, poderá acrescentar esse token à URL do recurso em cada comando do AzCopy.

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

Autorizar com o AWS S3

Reúna a chave de acesso do AWS e a chave de acesso secreta e defina estas variáveis de ambiente:

Sistema Operacional Command
Windows PowerShell:$env:AWS_ACCESS_KEY_ID=<access-key>
$env:AWS_SECRET_ACCESS_KEY=<secret-access-key>
Em um prompt de comando, use: 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>

Essas credenciais são usadas para gerar URLs pré-assinadas que são usadas para copiar objetos.

Copiar objetos, diretórios e buckets

O AzCopy usa a API put block from URL , de modo que os dados são copiados diretamente entre o AWS S3 e os servidores de armazenamento. Essas operações de cópia não usam a largura de banda de rede do computador.

Dica

Os exemplos nesta seção incluem argumentos de caminho com aspas simples (''). Use aspas simples em todos os shells de comando, exceto pelo shell de comando do Windows (cmd.exe). Se você estiver usando um shell de comando do Windows (cmd.exe), coloque os 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 a vários protocolos 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://s3.amazonaws.com/<bucket-name>/<object-name>' 'https://<storage-account-name>.blob.core.windows.net/<container-name>/<blob-name>'

Exemplo

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

Observação

Exemplos neste artigo usam URLs de estilo de caminho para buckets AWS S3 (por exemplo: http://s3.amazonaws.com/<bucket-name>).

Você também pode usar URLs de estilo hospedado virtual (por exemplo: http://bucket.s3.amazonaws.com).

Para saber mais sobre a hospedagem virtual de buckets, consulte a Hospedagem Virtual de Buckets.

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

Exemplo

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

Observação

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

Exemplo

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

Copiar um bucket

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

Sintaxe

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

Exemplo

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

Copiar todos os buckets em todas as regiões

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

Sintaxe

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

Exemplo

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

Copiar todos os buckets em uma região S3 específica

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

Sintaxe

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

Exemplo

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

Lidar com diferenças nas regras de nomenclatura de objeto

O AWS S3 usa um conjunto diferente de convenções de nomenclatura para nomes de bucket em comparação com 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.

O AzCopy lida com dois dos problemas mais comuns que podem surgir: buckets que contêm pontos e buckets que contêm hifens consecutivos. Os nomes de bucket do AWS S3 podem conter pontos e hifens consecutivos, mas um contêiner no Azure não pode. O AzCopy substitui os pontos por hifens e hifens consecutivos por um número que representa o número de hifens consecutivos (por exemplo: um bucket chamado my----bucket se torna my-4-bucket).

Além disso, à medida que o AzCopy copia arquivos, ele verifica se há colisões de nomenclatura e tenta resolvê-las. Por exemplo, se houver buckets com o nome bucket-name e bucket.name, AzCopy resolve um bucket nomeado bucket.name primeiro para bucket-name e depois para bucket-name-2.

Lidar com diferenças nos metadados de objeto

O AWS S3 e o Azure permitem diferentes conjuntos de caracteres nos nomes das chaves de objeto. Você pode ler sobre os caracteres que o AWS S3 usa aqui. No lado do Azure, as chaves de objeto de blob aderem às regras de nomenclatura para identificadores C#.

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

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

Como o AzCopy renomeia as chaves de objeto

O 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 é 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 é usada para salvar a chave inválida de metadados original. Você pode usar essa chave para tentar recuperar os metadados no lado do Azure, pois a chave de metadados é preservada como um valor no serviço de Armazenamento de Blobs.

Especificar tipos de origem e destino

O AzCopy usa o --from-to parâmetro para definir explicitamente os tipos de recursos de origem e de destino quando a detecção automática pode falhar, como em cenários de tubulação ou emuladores. Esse parâmetro ajuda o AzCopy a entender o contexto da transferência e otimizar adequadamente. Defina esse parâmetro para S3Blob indicar explicitamente que o comando está copiando do Amazon S3 para o Armazenamento de Blobs do Azure.

Próximas etapas

Encontre mais exemplos nestes artigos:

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