Transferência ACR com modelos ARM
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.
Importante
O ACR Transfer suporta artefatos com o tamanho da camada limitado a 8 GB devido às limitações técnicas.
Considere 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 ver a documentação para a extensão Az CLI aqui.
Criar ExportPipeline com o Resource Manager
Crie um recurso ExportPipeline para seu registro de contêiner de origem usando a implantação de modelo do Azure Resource Manager.
Copie os arquivos de modelo do ExportPipeline Resource Manager para uma pasta local.
Insira os seguintes valores de parâmetro no arquivo azuredeploy.parameters.json
:
Parâmetro | Value |
---|---|
nome_do_registo | Nome do registro do contêiner de origem |
exportPipelineName | Nome escolhido para o pipeline de exportação |
targetUri | URI do contêiner de armazenamento em seu ambiente de origem (o destino do pipeline de exportação). Exemplo: https://sourcestorage.blob.core.windows.net/transfer |
keyVaultName | Nome do cofre da chave de origem |
sasTokenSecretName | Nome do segredo do token SAS no cofre da chave de origem Exemplo: acrexportsas |
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 | Value |
---|---|
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. |
Criar o recurso
Execute 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 ao sistema no recurso ExportPipeline.
Com a segunda opção, você pode fornecer ao recurso uma identidade atribuída pelo usuário. (A criação da identidade atribuída pelo usuário não é mostrada.)
Com qualquer uma das opções, o modelo configura a identidade para acessar o token SAS no cofre da chave de exportação.
Opção 1: Criar recurso e habilitar identidade atribuída ao sistema
az deployment group create \
--resource-group $SOURCE_RG \
--template-file azuredeploy.json \
--name exportPipeline \
--parameters azuredeploy.parameters.json
Opção 2: Criar recurso e fornecer identidade atribuída ao usuário
Neste 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 o ID do recurso (id
) do pipeline. Você pode armazenar esse valor em uma variável de ambiente para uso posterior executando o show do grupo de implantação az. 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 em seu 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 Resource Manager para uma pasta local.
Insira os seguintes valores de parâmetro no arquivo azuredeploy.parameters.json
:
Parâmetro | Value |
---|---|
nome_do_registo | Nome do registro do contêiner de destino |
importPipelineName | Nome escolhido para o pipeline de importação |
fonteUri | URI do contêiner de armazenamento em seu ambiente de destino (a origem do pipeline de importação). Exemplo: https://targetstorage.blob.core.windows.net/transfer |
keyVaultName | Nome do cofre da chave de destino |
sasTokenSecretName | Nome do segredo do token SAS no cofre da chave de destino Exemplo: acr importsas |
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 | Value |
---|---|
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. |
Criar o recurso
Execute 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 ao sistema no recurso ImportPipeline.
Com a segunda opção, você pode fornecer ao recurso uma identidade atribuída pelo usuário. (A criação da identidade atribuída pelo usuário não é mostrada.)
Com 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 recurso e habilitar identidade atribuída ao sistema
az deployment group create \
--resource-group $TARGET_RG \
--template-file azuredeploy.json \
--name importPipeline \
--parameters azuredeploy.parameters.json
Opção 2: Criar recurso e fornecer identidade atribuída ao usuário
Neste 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 PipelineRun para exportação com o Resource Manager
Crie um recurso PipelineRun para seu registro de contêiner de origem usando a implantação do modelo do Azure Resource Manager. Este recurso executa o recurso ExportPipeline criado anteriormente e exporta artefatos especificados do seu registro de contêiner como um blob para sua conta de armazenamento de origem.
Copie os arquivos de modelo do PipelineRun Resource Manager para uma pasta local.
Insira os seguintes valores de parâmetro no arquivo azuredeploy.parameters.json
:
Parâmetro | Value |
---|---|
nome_do_registo | Nome do registro do 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, como myblob |
artefatos | Matriz de artefatos de origem a serem transferidos, como tags ou resumos de manifesto Exemplo: [samples/hello-world:v1", "samples/nginx:v1" , "myrepository@sha256:0a2e01852872..."] |
Se reimplantar um recurso PipelineRun com propriedades idênticas, você também deve usar a propriedade forceUpdateTag .
Execute az deployment group create para criar o recurso PipelineRun. O exemplo a seguir nomeia a implantação exportPipelineRun.
az deployment group create \
--resource-group $SOURCE_RG \
--template-file azuredeploy.json \
--name exportPipelineRun \
--parameters azuredeploy.parameters.json
Para uso posterior, armazene o ID do recurso executado no pipeline executado 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 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 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
Blob de transferência (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 a seguir azcopy copy
copia 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 existir na conta de destino, ele será substituído. A autenticação usa tokens SAS com permissões apropriadas para os contêineres de origem e destino. (As etapas para criar tokens não são 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
Acionar o recurso ImportPipeline
Se você habilitou o sourceTriggerStatus
parâmetro do ImportPipeline (o valor padrão), o pipeline é acionado depois que o blob é copiado para a conta de armazenamento de destino. 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 list:
az acr repository list --name <target-registry-name>
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ê não habilitou o sourceTriggerStatus
parâmetro do pipeline de importação, execute o recurso ImportPipeline manualmente, conforme mostrado na seção a seguir.
Criar PipelineRun para importação com o Resource Manager (opcional)
Você também pode usar um recurso PipelineRun para acionar um ImportPipeline para importação de artefato para seu registro de contêiner de destino.
Copie os arquivos de modelo do PipelineRun Resource Manager para uma pasta local.
Insira os seguintes valores de parâmetro no arquivo azuredeploy.parameters.json
:
Parâmetro | Value |
---|---|
nome_do_registo | Nome do registro do 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 |
Nome da fonte | Nome do blob existente para artefatos exportados em sua conta de armazenamento, como myblob |
Se reimplantar um recurso PipelineRun com propriedades idênticas, você também deve usar a propriedade forceUpdateTag .
Execute 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 o ID do recurso executado no pipeline executado 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 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 list:
az acr repository list --name <target-registry-name>
Reimplantar recurso PipelineRun
Se reimplantar um recurso PipelineRun com propriedades idênticas, você deve aproveitar a propriedade forceUpdateTag . Essa propriedade indica que o recurso PipelineRun deve ser recriado mesmo que a configuração não tenha sido alterada. Verifique se forceUpdateTag é diferente cada vez que você reimplantar o recurso PipelineRun. O exemplo abaixo recria um PipelineRun para exportação. O datetime atual é usado para definir 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 recursos de pipeline
Os comandos de exemplo a seguir usam az resource delete para excluir os recursos de pipeline criados neste artigo. Os IDs dos recursos foram previamente armazenados em 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 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.