Transferir artefatos para outro registro
Este artigo mostra como transferir coleções de imagens ou outros artefatos de um registro de contêiner do Azure para outro registro. Os registros de origem e de destino podem estar na mesma assinatura, em assinaturas diferentes, em locatários do AD DS, em nuvens do Azure ou em nuvens fisicamente desconectadas.
Para transferir artefatos, você deve criar um pipeline de transferência que replica os artefatos entre dois registros usando o Armazenamento de Blobs:
- Os artefatos do registro de origem são exportados para um blob em uma conta de armazenamento de origem
- O blob é copiado da conta de armazenamento de origem para a conta de armazenamento de destino
- O blob na conta de armazenamento de destino é importado como um artefato no registro de destino. Você pode configurar o pipeline de importação para disparar sempre que o artefato blob for atualizado no armazenamento de destino.
Neste artigo, você criará os recursos de pré-requisito para criar e executar o pipeline de transferência. A CLI do Azure é usada para provisionar recursos associados, como os segredos de armazenamento. A CLI do Azure versão 2.2.0 ou posterior é recomendada. Se você precisar instalar ou atualizar a CLI, confira como instalar a CLI do Azure.
Esse recurso está disponível na camada de serviço Premium do registro de contêiner. Para obter informações sobre os limites e as camadas de serviço do registro, confira Camadas do Registro de Contêiner do Azure.
Importante
Esse recurso está atualmente na visualização. As versões prévias são disponibilizadas com a condição de que você concorde com os termos de uso complementares. Alguns aspectos desse recurso podem alterar antes da GA (disponibilidade geral).
Considere seu caso de uso
A transferência é ideal para copiar conteúdo entre dois registros de contêiner do Azure em nuvens fisicamente desconectadas, mediadas pelas contas de armazenamento em cada nuvem. Se você preferir copiar imagens de registros de contêiner em nuvens conectadas, incluindo o Docker Hub e outros fornecedores de nuvem, a importação de imagem é recomendada.
Pré-requisitos
Registros de contêiner – você precisa ter um registro de origem existente com artefatos para transferência e um registro de destino. A transferência de ACR é destinada à movimentação entre nuvens desconectadas fisicamente. Para teste, os registros de origem e de destino podem estar na mesma assinatura, em uma assinatura do Azure diferente, em um locatário do AD DS ou na nuvem.
Se você precisar criar um registro, confira o Guia de início rápido: criar um registro de contêiner usando a CLI do Azure.
Contas de armazenamento – criar as contas de armazenamento de origem e de destino na assinatura e na localização de sua escolha. Para fins de teste, você pode usar as mesmas assinaturas que os registros de origem e de destino. Para cenários entre nuvens, normalmente é criada uma conta de armazenamento separada em cada nuvem.
Se necessário, crie as contas de armazenamento com a CLI do Azure ou outras ferramentas.
Crie um contêiner de blob para transferência de artefato em cada conta. Por exemplo, crie um contêiner chamado transferência.
Cofres de chaves – os cofres de chaves são necessários para armazenar os segredos de token SAS usados para acessar as contas de armazenamento de origem e de destino. Crie os cofres de chaves de origem e de destino nas mesmas assinaturas do Azure dos registros de origem e de destino. Para fins de demonstração, os modelos e os comandos usados neste artigo também pressupõem que os cofres de chaves de origem e de destino estão localizados nos mesmos grupos de recursos que os registros de origem e de destino, respectivamente. Não é obrigatório usar os mesmos grupos de recursos, mas isso simplifica os modelos e comandos usados neste artigo.
Se necessário, crie cofres de chaves com a CLI do Azure ou outras ferramentas.
Variáveis de ambiente – para os comandos de exemplo deste artigo, você precisa definir as variáveis a seguir para os ambientes de origem e de destino. Todos os exemplos são formatados para o shell do Bash.
SOURCE_RG="<source-resource-group>" TARGET_RG="<target-resource-group>" SOURCE_KV="<source-key-vault>" TARGET_KV="<target-key-vault>" SOURCE_SA="<source-storage-account>" TARGET_SA="<target-storage-account>"
Visão geral do cenário
Você deve criar os três recursos de pipeline a seguir para transferência de imagem entre registros. Os três são criados usando operações PUT. Esses recursos operam em seus registros e contas de armazenamento de origem e de destino.
A autenticação de armazenamento usa tokens SAS gerenciados como segredos em cofres de chaves. Os pipelines usam identidades gerenciadas para ler os segredos nos cofres.
- ExportPipeline – recurso de longa duração que contém informações de alto nível sobre o registro e a conta de armazenamento de origem. Essas informações incluem o URI do contêiner do blob de armazenamento de origem e o cofre de chaves que gerencia o token SAS de origem.
- ImportPipeline – recurso de longa duração que contém informações de alto nível sobre o registro e a conta de armazenamento de origem. Essas informações incluem o URI do contêiner do blob de armazenamento de destino e o cofre de chaves que gerencia o token SAS de destino. Um gatilho de importação é habilitado por padrão. Por isso, o pipeline é executado automaticamente quando um blob de artefato chega no contêiner de armazenamento de destino.
- PipelineRun – recurso usado para invocar um recurso ExportPipeline ou ImportPipeline.
- Execute o ExportPipeline manualmente criando um recurso PipelineRun e especifique os artefatos a serem exportados.
- Se um gatilho de importação estiver habilitado, o ImportPipeline será executado automaticamente. Ele também pode ser executado manualmente usando um PipelineRun.
- No momento, até 50 artefatos podem ser transferidos com cada PipelineRun.
Observações importantes
- O ExportPipeline e o ImportPipeline normalmente estão em locatários do AD DS diferentes associados às nuvens de origem e de destino. Esse cenário requer identidades gerenciadas e cofres de chaves separados para os recursos de exportação e importação. Para fins de teste, os recursos podem ser colocados na mesma nuvem, compartilhando identidades.
- Por padrão, cada modelo de ExportPipeline e de ImportPipeline habilita uma identidade gerenciada atribuída pelo sistema para acessar os segredos do cofre de chaves. Os modelos de ExportPipeline e de ImportPipeline também dão suporte à identidade atribuída pelo usuário fornecida por você.
Criar e armazenar chaves SAS
A transferência usa tokens SAS (Assinatura de Acesso Compartilhado) para acessar as contas de armazenamento nos ambientes de origem e de destino. Gere e armazene os tokens conforme descrito nas seções a seguir.
Importante
Enquanto a transferência de ACR funciona com um token SAS gerado manualmente e armazenado em um Keyvault Secret, para cargas de trabalho de produção, é altamente recomendável usar o Keyvault Managed Storage SAS Definition Secrets.
Gerar o token SAS para exportação
Execute o comando az storage container generate-sas para gerar um token SAS para o contêiner na conta de armazenamento de origem usada para exportação de artefato.
Permissões de token recomendadas: ler, gravar, listar e adicionar.
No exemplo a seguir, a saída do comando é atribuída à variável de ambiente EXPORT_SAS com o caractere '?' como prefixo. Atualize o valor --expiry
do seu ambiente:
EXPORT_SAS=?$(az storage container generate-sas \
--name transfer \
--account-name $SOURCE_SA \
--expiry 2021-01-01 \
--permissions alrw \
--https-only \
--output tsv)
Armazenar o token SAS para exportação
Armazene o token SAS em seu cofre de chaves do Azure de origem usando o comando az keyvault secret set:
az keyvault secret set \
--name acrexportsas \
--value $EXPORT_SAS \
--vault-name $SOURCE_KV
Gerar o token SAS para importação
Execute o comando az storage container generate-sas para gerar um token SAS para o contêiner na conta de armazenamento de destino usada para importação de artefato.
Permissões de token recomendadas: ler, excluir e listar
No exemplo a seguir, a saída do comando é atribuída à variável de ambiente IMPORT_SAS com o caractere '?' como prefixo. Atualize o valor --expiry
do seu ambiente:
IMPORT_SAS=?$(az storage container generate-sas \
--name transfer \
--account-name $TARGET_SA \
--expiry 2021-01-01 \
--permissions dlr \
--https-only \
--output tsv)
Armazenar o token SAS para importação
Armazene o token SAS em seu cofre de chaves do Azure de destino usando o comando az keyvault secret set:
az keyvault secret set \
--name acrimportsas \
--value $IMPORT_SAS \
--vault-name $TARGET_KV
Próximas etapas
Siga um dos tutoriais abaixo para criar seus recursos de transferência de ACR. Para a maioria dos casos de uso não automatizados, é recomendável usar a Extensão da CLI do Az.