Share via


Transferência ACR com Az CLI

Este artigo mostra como usar o recurso ACR Transfer com a extensão acrtransfer Az CLI.

Pré-requisitos completos

Preencha os pré-requisitos descritos aqui antes de tentar as ações neste artigo. Isto significa que:

  • Você tem um Registro SKU Premium existente em ambas as nuvens.
  • Você tem um contêiner de conta de armazenamento existente em ambas as nuvens.
  • Você tem um Keyvault existente com um segredo contendo um token SAS válido com as permissões necessárias em ambas as nuvens.
  • Você tem uma versão recente do Az CLI instalada em ambas as nuvens.

Instale a extensão Az CLI

No AzureCloud, você pode instalar a extensão com o seguinte comando:

az extension add --name acrtransfer

No AzureCloud e em outras nuvens, você pode instalar o blob diretamente de um contêiner de conta de armazenamento público. O blob é hospedado na acrtransferext conta de armazenamento, contêiner, acrtransfer-1.0.0-py2.py3-none-any.whdist blob. Pode ser necessário alterar o sufixo URI de armazenamento, dependendo da nuvem em que você está. O seguinte será instalado no AzureCloud:

az extension add --source https://acrtransferext.blob.core.windows.net/dist/acrtransfer-1.0.0-py2.py3-none-any.whl

Criar ExportPipeline com a extensão acrtransfer Az CLI

Crie um recurso ExportPipeline para seu registro de contêiner do AzureCloud usando a extensão acrtransfer Az CLI.

Crie um pipeline de exportação sem opções e uma identidade atribuída ao sistema:

az acr export-pipeline create \
--resource-group $MyRG \
--registry $MyReg \
--name $MyPipeline \
--secret-uri https://$MyKV.vault.azure.net/secrets/$MySecret \
--storage-container-uri https://$MyStorage.blob.core.windows.net/$MyContainer

Crie um pipeline de exportação com todas as opções possíveis e uma identidade atribuída pelo usuário:

az acr export-pipeline create \
--resource-group $MyRG \
--registry $MyReg \
--name $MyPipeline \
--secret-uri https://$MyKV.vault.azure.net/secrets/$MySecret \
--storage-container-uri https://$MyStorage.blob.core.windows.net/$MyContainer \
--options OverwriteBlobs ContinueOnErrors \
--assign-identity /subscriptions/$MySubID/resourceGroups/$MyRG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$MyIdentity

Opções de exportação

A options propriedade para os pipelines de exportação oferece suporte a valores booleanos opcionais. Os seguintes valores são recomendados:

Parâmetro Valor
options OverwriteBlobs - Substituir blobs de destino existentes
ContinueOnErrors - Continue a exportação de artefatos restantes no registro de origem se uma exportação de artefato falhar.

Dê acesso à política keyvault de identidade ExportPipeline

Se você criou seu pipeline com uma identidade atribuída pelo usuário, basta conceder a essa política de acesso de identidade secret get atribuída pelo usuário permissões no keyvault.

Se você criou seu pipeline com uma identidade atribuída ao sistema, primeiro precisará recuperar o principalId que o sistema atribuiu ao seu recurso de pipeline.

Execute o seguinte comando para recuperar seu recurso de pipeline:

az acr export-pipeline show --resource-group $MyRG --registry $MyReg --name $MyPipeline

A partir desta saída, você desejará copiar o principalId valor no campo.

Em seguida, você executará o seguinte comando para dar a essa entidade as permissões de política de acesso apropriadas secret get em seu keyvault.

az keyvault set-policy --name $MyKeyvault --secret-permissions get --object-id $MyPrincipalID

Crie ImportPipeline com a extensão acrtransfer Az CLI

Crie um recurso ImportPipeline em seu registro de contêiner de destino usando a extensão acrtransfer Az CLI. Por padrão, o pipeline é habilitado para criar um Import PipelineRun automaticamente quando o contêiner da conta de armazenamento anexada recebe um novo blob de artefato.

Crie um pipeline de importação sem opções e uma identidade atribuída ao sistema:

az acr import-pipeline create \
--resource-group $MyRG \
--registry $MyReg \
--name $MyPipeline \
--secret-uri https://$MyKV.vault.azure.net/secrets/$MySecret \
--storage-container-uri https://$MyStorage.blob.core.windows.net/$MyContainer

Crie um pipeline de importação com todas as opções possíveis, source-trigger desabilitado e uma identidade atribuída pelo usuário:

az acr import-pipeline create \
--resource-group $MyRG \
--registry $MyReg \
--name $MyPipeline \
--secret-uri https://$MyKV.vault.azure.net/secrets/$MySecret \
--storage-container-uri https://$MyStorage.blob.core.windows.net/$MyContainer \
--options DeleteSourceBlobOnSuccess OverwriteTags ContinueOnErrors \
--assign-identity /subscriptions/$MySubID/resourceGroups/$MyRG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$MyIdentity \
--source-trigger-enabled False

Opções de importação

A options propriedade para o pipeline de importação suporta valores booleanos opcionais. Os seguintes valores são recomendados:

Parâmetro Valor
options OverwriteTags - Substituir tags de destino existentes
DeleteSourceBlobOnSuccess - Exclua o blob de armazenamento de origem após a importação bem-sucedida para o registro de destino
ContinueOnErrors - Continue a importação de artefatos restantes no registro de destino se uma importação de artefato falhar.

Dê acesso à política keyvault de identidade ImportPipeline

Se você criou seu pipeline com uma identidade atribuída pelo usuário, basta conceder a essa política de acesso de identidade secret get atribuída pelo usuário permissões no keyvault.

Se você criou seu pipeline com uma identidade atribuída ao sistema, primeiro precisará recuperar o principalId que o sistema atribuiu ao seu recurso de pipeline.

Execute o seguinte comando para recuperar seu recurso de pipeline:

az acr import-pipeline show --resource-group $MyRG --registry $MyReg --name $MyPipeline

A partir desta saída, você desejará copiar o principalId valor no campo.

Em seguida, você executará o seguinte comando para dar a essa entidade a política de acesso apropriada secret get em seu keyvault.

az keyvault set-policy --name $MyKeyvault --secret-permissions get --object-id $MyPrincipalID

Criar PipelineRun para exportação com a extensão acrtransfer Az CLI

Crie um recurso PipelineRun para seu registro de contêiner usando a extensão acrtransfer Az CLI. Este recurso executa o recurso ExportPipeline criado anteriormente e exporta artefatos especificados do registro do contêiner como um blob para o contêiner da conta de armazenamento.

Crie um pipeline-run de exportação:

az acr pipeline-run create \
--resource-group $MyRG \
--registry $MyReg \
--pipeline $MyPipeline \
--name $MyPipelineRun \
--pipeline-type export \
--storage-blob $MyBlob \
--artifacts hello-world:latest hello-world@sha256:90659bf80b44ce6be8234e6ff90a1ac34acbeb826903b02cfa0da11c82cbc042 \
--force-redeploy

Se reimplantar um recurso PipelineRun com propriedades idênticas, você deverá usar o sinalizador --force-redeploy.

Pode levar vários minutos para que os artefatos sejam exportados. Quando a implantação for concluída com êxito, verifique a exportação do artefato listando o blob exportado no contêiner da conta de armazenamento de origem. Por exemplo, execute o comando az storage blob list :

az storage blob list --account-name $MyStorageAccount --container $MyContainer --output table

Blob de transferência entre domínios

Na maioria dos casos de uso, agora você usará uma solução entre domínios ou outro método para transferir seu blob da conta de armazenamento no domínio de origem (a conta de armazenamento associada ao pipeline de exportação) para a conta de armazenamento no domínio de destino (a conta de armazenamento associada ao pipeline de importação). Neste ponto, assumiremos que o blob chegou à conta de armazenamento de domínio de destino associada ao seu pipeline de importação.

Acionar o recurso ImportPipeline

Se você não usou o parâmetro ao criar seu pipeline de importação, o pipeline será acionado dentro de 15 minutos após o --source-trigger-enabled False blob chegar ao contêiner da conta de armazenamento. Pode levar vários minutos para que os artefatos sejam importados. Quando a importação for concluída com êxito, verifique a importação de artefatos listando as tags no repositório que você está importando no registro do contêiner de destino. Por exemplo, execute az acr repository show-tags:

az acr repository show-tags --name $MyRegistry --repository $MyRepository

Nota

O Gatilho de Origem só importará blobs que tenham um tempo de Última Modificação nos últimos 60 dias. Se você pretende usar o Source Trigger para importar blobs mais antigos do que isso, atualize a hora da Última Modificação dos blobs adicionando metadados de blob a eles ou importe-os com execuções de pipeline criadas manualmente.

Se você usou o --source-trigger-enabled False parâmetro ao criar seu ImportPipeline, precisará criar um PipelineRun manualmente, conforme mostrado na seção a seguir.

Criar PipelineRun para importação com a extensão acrtransfer Az CLI

Crie um recurso PipelineRun para seu registro de contêiner usando a extensão acrtransfer Az CLI. Este recurso executa o recurso ImportPipeline criado anteriormente e importa blobs especificados da sua conta de armazenamento para o registro do contêiner.

Crie um pipeline-run de importação:

az acr pipeline-run create \
--resource-group $MyRG \
--registry $MyReg \
--pipeline $MyPipeline \
--name $MyPipelineRun \
--pipeline-type import \
--storage-blob $MyBlob \
--force-redeploy

Se reimplantar um recurso PipelineRun com propriedades idênticas, você deverá usar o sinalizador --force-redeploy.

Pode levar vários minutos para que os artefatos sejam importados. Quando a importação for concluída com êxito, verifique a importação de artefatos listando os repositórios no registro do contêiner de destino. Por exemplo, execute az acr repository show-tags:

az acr repository show-tags --name $MyRegistry --repository $MyRepository

Excluir recursos de transferência ACR

Exclua um ExportPipeline:

az acr export-pipeline delete --resource-group $MyRG --registry $MyReg --name $MyPipeline

Exclua um ImportPipeline:

az acr import-pipeline delete --resource-group $MyRG --registry $MyReg --name $MyPipeline

Exclua um recurso PipelineRun. Observe que isso não reverte a ação executada pelo PipelineRun. Isso é mais como excluir o log do PipelineRun.

az acr pipeline-run delete --resource-group $MyRG --registry $MyReg --name $MyPipelineRun

Solução de problemas de transferência ACR

Consulte a Solução de problemas de transferência ACR para obter orientação sobre solução de problemas .

Próximos passos

  • Saiba como bloquear a criação de pipelines de exportação a partir de um registro de contêiner restrito à rede.