Compartilhar via


Transferência de ACR com a CLI do Azure

Este artigo mostra como usar o recurso transferência de ACR com a extensão da CLI do Az acrtransfer.

Completar os pré-requisitos

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

  • Você tem um registro de 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 que contém um token SAS válido com as permissões necessárias em ambas as nuvens.
  • Você tem uma versão recente da CLI do AZ instalada em ambas as nuvens.

Instalar a extensão da CLI do Az

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 conta de armazenamento acrtransferext, contêiner dist, blob acrtransfer-1.0.0-py2.py3-none-any.wh. Talvez seja necessário alterar o sufixo de 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 da CLI do Az acrtransfer

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

Crie um pipeline de exportação sem opções e uma identidade atribuída pelo 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 sem opções e uma identidade atribuída pelo 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 \
--options OverwriteBlobs ContinueOnErrors \
--assign-identity /subscriptions/$MySubID/resourceGroups/$MyRG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$MyIdentity

Opções de exportação

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

Parâmetro Valor
opções OverwriteBlobs – substitui os blobs de destino existentes
ContinueOnErrors – dá continuidade à exportação dos artefatos restantes no registro de origem se uma exportação de artefato falhar.

Dar acesso à política de keyvault de identidade ExportPipeline

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

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

Execute o seguinte comando para recuperar o recurso de pipeline:

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

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

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

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

Criar ImportPipeline com a extensão da CLI do Az acrtransfer

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

Crie um pipeline de importação sem opções e uma identidade atribuída pelo 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, gatilho de origem 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 propriedade options para os pipelines de importação dá suporte a valores boolianos opcionais. Os seguintes valores são recomendados:

Parâmetro Valor
opções OverwriteTags – substitui as marcas de destino existentes
DeleteSourceBlobOnSuccess – exclui o blob de armazenamento de origem após a importação bem-sucedida para o registro de destino
ContinueOnErrors – dá continuidade à importação dos artefatos restantes no registro de destino se uma importação de artefato falhar.

Dar acesso à política de keyvault de identidade ImportPipeline

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

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

Execute o seguinte comando para recuperar o recurso de pipeline:

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

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

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

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

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

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

Criar uma exportação de pipeline-run:

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 você reimplantar um recurso PipelineRun com propriedades idênticas, também deverá usar o sinalizador -force-redeploy.

Pode demorar alguns minutos para exportar os artefatos. Quando a implantação for concluída com sucesso, verifique a exportação de artefatos, 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

Transferir blob 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 em seu domínio de origem (a conta de armazenamento associada ao pipeline de exportação) para a conta de armazenamento em seu domínio de destino (a conta de armazenamento associada ao pipeline de importação). Neste ponto, vamos supor que o blob chegou à conta de armazenamento de domínio de destino associada ao pipeline de importação.

Disparar o recurso ImportPipeline

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

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

Observação

O Gatilho de Origem importa apenas os blobs que têm uma hora da Última Modificação nos últimos 60 dias. Se você pretende usar o Gatilho de Origem 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 as executações de pipeline criadas manualmente.

Se você usou o parâmetro --source-trigger-enabled False 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 da CLI do Az acrtransfer

Crie um recurso PipelineRun para o registro de contêiner usando a extensão da CLI do Az acrtransfer. Esse recurso executa o recurso ImportPipeline que você criou anteriormente e importa os blobs especificados de sua conta de armazenamento para o registro de contêiner.

Criar uma importação de pipeline-run:

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

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

Pode demorar alguns minutos para importar os artefatos. Quando a importação for concluída com sucesso, verifique a importação de artefatos listando os repositórios no registro de 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 do ACR

Excluir um ExportPipeline:

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

Excluir um ExportPipeline:

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

Excluir o recurso PipelineRun. Observe que isso não reverte a ação tomada pelo PipelineRun. Isso é mais parecido com a exclusão do log do PipelineRun.

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

Solução de problemas de transferência de ACR

Veja Solução de problemas de transferência de ACR para obter as diretrizes de solução de problemas.

Próximas etapas