Transferência de ACR com modelos do ARM
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.
Importante
A Transferência do registro de controle de acesso suporta artefatos com limites de tamanho de camada de 8 GB devido às limitações técnicas.
Considerar o uso da extensão AZ CLI
Para a maioria dos casos de uso não automatizados, recomendamos o uso da extensão Az CLI, se possível. Você pode exibir a documentação da extensão da CLI do AZ aqui.
Criar ExportPipeline com o Resource Manager
Crie um recurso ExportPipeline para o registro de contêiner de origem usando a implantação de modelo do Azure Resource Manager.
Copie os arquivos de modelo do ExportPipeline do Resource Manager para uma pasta local.
Insira os seguintes valores de parâmetro no arquivo azuredeploy.parameters.json
:
Parâmetro | Valor |
---|---|
registryName | Nome do registro de contêiner de origem |
exportPipelineName | Nome escolhido para o pipeline de exportação |
targetUri | URI do contêiner de armazenamento no ambiente de origem (o destino do pipeline de exportação). Exemplo: https://sourcestorage.blob.core.windows.net/transfer |
keyVaultName | Nome do cofre de chaves de origem |
sasTokenSecretName | Nome do segredo do token SAS no cofre de chaves de origem Exemplo: acrexportsas |
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. |
Criar o recurso
Execute o comando az deployment group create para criar um recurso chamado exportPipeline, conforme mostrado nos exemplos a seguir. Por padrão, com a primeira opção, o modelo de exemplo habilita uma identidade atribuída pelo sistema no recurso ExportPipeline.
Com a segunda opção, você pode fornecer uma identidade atribuída pelo usuário para o recurso. (A criação da identidade atribuída pelo usuário não é exibida.)
Para qualquer uma das opções, o modelo configura a identidade para acessar o token SAS no cofre de chaves de exportação.
Opção 1: criar o recurso e habilitar a identidade atribuída pelo sistema
az deployment group create \
--resource-group $SOURCE_RG \
--template-file azuredeploy.json \
--name exportPipeline \
--parameters azuredeploy.parameters.json
Opção 2: criar o recurso e fornecer a identidade atribuída pelo usuário
Nesse comando, forneça a ID do recurso da identidade atribuída pelo usuário como um parâmetro adicional.
az deployment group create \
--resource-group $SOURCE_RG \
--template-file azuredeploy.json \
--name exportPipeline \
--parameters azuredeploy.parameters.json \
--parameters userAssignedIdentity="/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myUserAssignedIdentity"
Na saída do comando, anote a ID do recurso (id
) do pipeline. Você pode armazenar esse valor em uma variável de ambiente para uso posterior executando o comando az deployment group show. Por exemplo:
EXPORT_RES_ID=$(az deployment group show \
--resource-group $SOURCE_RG \
--name exportPipeline \
--query 'properties.outputResources[1].id' \
--output tsv)
Criar ImportPipeline com o Resource Manager
Crie um recurso ImportPipeline para o registro de contêiner de destino usando a implantação de modelo do Azure Resource Manager. Por padrão, o pipeline é habilitado para importar automaticamente quando a conta de armazenamento no ambiente de destino tem um blob de artefato.
Copie os arquivos de modelo do ImportPipeline do Resource Manager para uma pasta local.
Insira os seguintes valores de parâmetro no arquivo azuredeploy.parameters.json
:
Parâmetro | Valor |
---|---|
registryName | Nome do registro de contêiner de destino |
importPipelineName | Nome escolhido para o pipeline de importação |
sourceUri | URI do contêiner de armazenamento no ambiente de destino (a origem do pipeline de importação). Exemplo: https://targetstorage.blob.core.windows.net/transfer |
keyVaultName | Nome do cofre de chaves de destino |
sasTokenSecretName | Nome do segredo do token SAS no cofre de chaves de destino Exemplo: acr importsas |
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. |
Criar o recurso
Execute o comando az deployment group create para criar um recurso chamado importPipeline, conforme mostrado nos exemplos a seguir. Por padrão, com a primeira opção, o modelo de exemplo habilita uma identidade atribuída pelo sistema no recurso ImportPipeline.
Com a segunda opção, você pode fornecer uma identidade atribuída pelo usuário para o recurso. (A criação da identidade atribuída pelo usuário não é exibida.)
Para qualquer uma das opções, o modelo configura a identidade para acessar o token SAS no cofre de chaves de importação.
Opção 1: criar o recurso e habilitar a identidade atribuída pelo sistema
az deployment group create \
--resource-group $TARGET_RG \
--template-file azuredeploy.json \
--name importPipeline \
--parameters azuredeploy.parameters.json
Opção 2: criar o recurso e fornecer a identidade atribuída pelo usuário
Nesse comando, forneça a ID do recurso da identidade atribuída pelo usuário como um parâmetro adicional.
az deployment group create \
--resource-group $TARGET_RG \
--template-file azuredeploy.json \
--name importPipeline \
--parameters azuredeploy.parameters.json \
--parameters userAssignedIdentity="/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myUserAssignedIdentity"
Se você planeja executar a importação manualmente, anote a ID do recurso (id
) do pipeline. Você pode armazenar esse valor em uma variável de ambiente para uso posterior executando o comando az deployment group show. Por exemplo:
IMPORT_RES_ID=$(az deployment group show \
--resource-group $TARGET_RG \
--name importPipeline \
--query 'properties.outputResources[1].id' \
--output tsv)
Criar um PipelineRun para exportação com o Resource Manager
Crie um recurso PipelineRun para o registro de contêiner de origem usando a implantação de modelo do Azure Resource Manager. Esse recurso executa o recurso ExportPipeline criado anteriormente e exporta os artefatos especificados do registro de contêiner como um blob para a conta de armazenamento de origem.
Copie os arquivos de modelo do PipelineRun do Resource Manager para uma pasta local.
Insira os seguintes valores de parâmetro no arquivo azuredeploy.parameters.json
:
Parâmetro | Valor |
---|---|
registryName | Nome do registro de contêiner de origem |
pipelineRunName | Nome escolhido para a execução |
pipelineResourceId | ID do recurso do pipeline de exportação. Exemplo: /subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.ContainerRegistry/registries/<sourceRegistryName>/exportPipelines/myExportPipeline |
targetName | Nome escolhido para o blob de artefatos exportado para sua conta de armazenamento de origem, por exemplo myblob |
artefatos | Matriz de artefatos de origem a serem transferidos, como marcas ou hashs de manifesto Exemplo: [samples/hello-world:v1", "samples/nginx:v1" , "myrepository@sha256:0a2e01852872..."] |
Se você reimplantar um recurso PipelineRun com propriedades idênticas, também deverá usar a propriedade forceUpdateTag.
Execute o comando az deployment group creat para criar o recurso PipelineRun. O exemplo a seguir nomeia o exportPipelineRun de implantação.
az deployment group create \
--resource-group $SOURCE_RG \
--template-file azuredeploy.json \
--name exportPipelineRun \
--parameters azuredeploy.parameters.json
Para uso posterior, armazene a ID do recurso da execução de pipeline em uma variável de ambiente:
EXPORT_RUN_RES_ID=$(az deployment group show \
--resource-group $SOURCE_RG \
--name exportPipelineRun \
--query 'properties.outputResources[0].id' \
--output tsv)
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 de transferência da conta de armazenamento de origem. Por exemplo, execute o comando az storage blob list:
az storage blob list \
--account-name $SOURCE_SA \
--container transfer \
--output table
Transferir blob (opcional)
Use a ferramenta AzCopy ou outros métodos para transferir dados de blob da conta de armazenamento de origem para a conta de armazenamento de destino.
Por exemplo, o comando azcopy copy
copia o myblob do contêiner de transferência na conta de origem para o contêiner de transferência na conta de destino. Se o blob já existir na conta de destino, ele será substituído. A autenticação usa os tokens SAS com as permissões apropriadas para os contêineres de origem e de destino. (As etapas para criar os tokens não estão sendo mostradas.)
azcopy copy \
'https://<source-storage-account-name>.blob.core.windows.net/transfer/myblob'$SOURCE_SAS \
'https://<destination-storage-account-name>.blob.core.windows.net/transfer/myblob'$TARGET_SAS \
--overwrite true
Disparar o recurso ImportPipeline
Se você habilitou o parâmetro sourceTriggerStatus
do ImportPipeline (o valor padrão), o pipeline será disparado depois que o blob for copiado para a conta de armazenamento de destino. 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 o comando az acr repository list:
az acr repository list --name <target-registry-name>
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ê não tiver habilitado o parâmetro sourceTriggerStatus
do pipeline de importação, execute o recurso ImportPipeline manualmente, conforme mostrado na seção a seguir.
Criar um PipelineRun para importação com o Resource Manager (opcional)
Você também pode usar um recurso PipelineRun para disparar um ImportPipeline para a importação de artefato para o registro de contêiner de destino.
Copie os arquivos de modelo do PipelineRun do Resource Manager para uma pasta local.
Insira os seguintes valores de parâmetro no arquivo azuredeploy.parameters.json
:
Parâmetro | Valor |
---|---|
registryName | Nome do registro de contêiner de destino |
pipelineRunName | Nome escolhido para a execução |
pipelineResourceId | ID do recurso do pipeline de importação. Exemplo: /subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.ContainerRegistry/registries/<sourceRegistryName>/importPipelines/myImportPipeline |
sourceName | Nome do blob existente para artefatos exportados na conta de armazenamento, como myblob |
Se você reimplantar um recurso PipelineRun com propriedades idênticas, também deverá usar a propriedade forceUpdateTag.
Execute o comando az deployment group create para executar o recurso.
az deployment group create \
--resource-group $TARGET_RG \
--name importPipelineRun \
--template-file azuredeploy.json \
--parameters azuredeploy.parameters.json
Para uso posterior, armazene a ID do recurso da execução de pipeline em uma variável de ambiente:
IMPORT_RUN_RES_ID=$(az deployment group show \
--resource-group $TARGET_RG \
--name importPipelineRun \
--query 'properties.outputResources[0].id' \
--output tsv)
Quando a implantação 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 o comando az acr repository list:
az acr repository list --name <target-registry-name>
Reimplantar o recurso PipelineRun
Se você reimplantar um recurso PipelineRun com propriedades idênticas, também precisará aproveitar a propriedade forceUpdateTag. Essa propriedade indica que o recurso PipelineRun deve ser recriado mesmo que a configuração não tenha sido alterada. Certifique-se de que forceUpdateTag seja diferente sempre que você reimplantar o recurso PipelineRun. O exemplo a seguir recria um PipelineRun para exportação. O datetime atual é usado para definir a forceUpdateTag, garantindo assim que essa propriedade seja sempre exclusiva.
CURRENT_DATETIME=`date +"%Y-%m-%d:%T"`
az deployment group create \
--resource-group $SOURCE_RG \
--template-file azuredeploy.json \
--name exportPipelineRun \
--parameters azuredeploy.parameters.json \
--parameters forceUpdateTag=$CURRENT_DATETIME
Excluir os recursos de pipeline
Os comandos de exemplo a seguir usam o comando az resource delete para excluir os recursos de pipeline criados neste artigo. As IDs de recurso foram armazenadas anteriormente nas variáveis de ambiente.
# Delete export resources
az resource delete \
--resource-group $SOURCE_RG \
--ids $EXPORT_RES_ID $EXPORT_RUN_RES_ID \
--api-version 2019-12-01-preview
# Delete import resources
az resource delete \
--resource-group $TARGET_RG \
--ids $IMPORT_RES_ID $IMPORT_RUN_RES_ID \
--api-version 2019-12-01-preview
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.