Copiar dados do Amazon S3 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 Amazon Web Services (AWS) S3 para o Armazenamento de Blobs do Azure usando o AzCopy.
Nota
O AzCopy é compatível com URLs padrão de estilo virtual hospedado ou de caminho definido pela AWS. Por exemplo: https://bucket.s3.amazonaws.com
ou https://s3.amazonaws.com/bucket
.
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 AWS S3, use uma chave de acesso da AWS e uma chave de acesso secreta.
Autorizar com o Armazenamento do Azure
Consulte 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.
Nota
Os exemplos neste artigo pressupõem que você autenticou sua identidade usando o AzCopy login
comando. Em seguida, o AzCopy usa sua conta Microsoft Entra para autorizar o acesso aos dados no armazenamento de Blob.
Se preferir usar um token SAS para autorizar o acesso aos dados de blob, você pode acrescentar esse token à URL do recurso em cada comando AzCopy.
Por exemplo: https://mystorageaccount.blob.core.windows.net/mycontainer?<SAS-token>
.
Autorizar com o AWS S3
Reúna a chave de acesso da AWS e a chave de acesso secreta e defina estas variáveis de ambiente:
Sistema operativo | Comando |
---|---|
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, portanto, 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 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 com 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 Armazenamento Data Lake 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'
Nota
Exemplos neste artigo usam URLs no estilo de caminho para buckets do AWS S3 (por exemplo: http://s3.amazonaws.com/<bucket-name>
).
Você também pode usar URLs virtuais no estilo hospedado (por exemplo: http://bucket.s3.amazonaws.com
).
Para saber mais sobre hospedagem virtual de buckets, consulte Virtual Hosting of 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
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://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
Copie 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 específica do S3
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
Manipular diferenças nas regras de nomenclatura de objetos
O AWS S3 tem 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.
AzCopy lida com dois dos problemas mais comuns que podem surgir; buckets que contêm pontos e buckets que contêm hífenes consecutivos. Os nomes de bucket do AWS S3 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
.
Além disso, à medida que o AzCopy copia arquivos, ele verifica colisões de nomes e tenta resolvê-las. Por exemplo, se houver buckets com o nome bucket-name
e , AzCopy resolve um bucket nomeado bucket.name
primeiro para bucket-name
e depois para bucket-name-2
bucket.name
.
Manipular diferenças nos metadados do objeto
O AWS S3 e o Azure permitem conjuntos diferentes 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 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 | Description |
---|---|
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:
Substitui caracteres inválidos por '_'.
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.
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:
- Exemplos: Upload
- Exemplos: Download
- Exemplos: Copiar entre contas
- Exemplos: Sincronizar
- Exemplos: Google Cloud Storage
- Exemplos: Arquivos do Azure
- Tutorial: Migrar dados locais para armazenamento em nuvem usando o AzCopy
Consulte estes artigos para definir configurações, otimizar o desempenho e solucionar problemas: