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
- Saiba como bloquear a criação de pipelines de exportação de um registro de contêiner de rede restrita.