Dela via


ACR-överföring med ARM-mallar

Fullständiga förutsättningar

Slutför de krav som beskrivs här innan du försöker utföra åtgärderna i den här artikeln. Detta innebär att:

  • Du har ett befintligt Premium SKU-register i båda molnen.
  • Du har en befintlig container för lagringskonto i båda molnen.
  • Du har en befintlig Keyvault med en hemlighet som innehåller en giltig SAS-token med nödvändiga behörigheter i båda molnen.
  • Du har en ny version av Az CLI installerad i båda molnen.

Viktigt!

ACR-överföringen stöder artefakter med lagerstorleksgränserna till 8 GB på grund av de tekniska begränsningarna.

Överväg att använda Az CLI-tillägget

För de flesta icke-automatiserade användningsfall rekommenderar vi att du använder Az CLI-tillägget om möjligt. Du kan visa dokumentationen för Az CLI-tillägget här.

Skapa ExportPipeline med Resource Manager

Skapa en ExportPipeline-resurs för ditt källcontainerregister med azure resource manager-malldistribution.

Kopiera ExportPipeline Resource Manager-mallfiler till en lokal mapp.

Ange följande parametervärden i filen azuredeploy.parameters.json:

Parameter Värde
registryName Namnet på källcontainerregistret
exportPipelineName Namn som du väljer för exportpipelinen
targetUri URI för lagringscontainern i källmiljön (målet för exportpipelinen).
Exempel: https://sourcestorage.blob.core.windows.net/transfer
keyVaultName Namnet på källnyckelvalvet
sasTokenSecretName Namnet på SAS-tokenhemligheten i källnyckelvalvet
Exempel: acrexportsas

Exportalternativ

Egenskapen options för exportpipelines stöder valfria booleska värden. Följande värden rekommenderas:

Parameter Värde
alternativ OverwriteBlobs – Skriv över befintliga målblobar
ContinueOnErrors – Fortsätt exportera återstående artefakter i källregistret om en artefaktexport misslyckas.

Skapa resursen

Kör az deployment group create för att skapa en resurs med namnet exportPipeline enligt följande exempel. Med det första alternativet aktiverar exempelmallen som standard en systemtilldelad identitet i ExportPipeline-resursen.

Med det andra alternativet kan du ange resursen med en användartilldelad identitet. (Skapandet av den användartilldelade identiteten visas inte.)

Med båda alternativen konfigurerar mallen identiteten för åtkomst till SAS-token i exportnyckelvalvet.

Alternativ 1: Skapa resurs och aktivera systemtilldelad identitet

az deployment group create \
  --resource-group $SOURCE_RG \
  --template-file azuredeploy.json \
  --name exportPipeline \
  --parameters azuredeploy.parameters.json

Alternativ 2: Skapa resurs och ange användartilldelad identitet

I det här kommandot anger du resurs-ID för den användartilldelade identiteten som ytterligare en parameter.

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"

Anteckna resurs-ID:t (id) för pipelinen i kommandoutdata. Du kan lagra det här värdet i en miljövariabel för senare användning genom att köra az deployment group show. Till exempel:

EXPORT_RES_ID=$(az deployment group show \
  --resource-group $SOURCE_RG \
  --name exportPipeline \
  --query 'properties.outputResources[1].id' \
  --output tsv)

Skapa ImportPipeline med Resource Manager

Skapa en ImportPipeline-resurs i målcontainerregistret med azure Resource Manager-malldistribution. Som standard är pipelinen aktiverad för att importera automatiskt när lagringskontot i målmiljön har en artefaktblob.

Kopiera ImportPipeline Resource Manager-mallfiler till en lokal mapp.

Ange följande parametervärden i filen azuredeploy.parameters.json:

Parameter Värde
registryName Namnet på ditt målcontainerregister
importPipelineName Namn som du väljer för importpipelinen
sourceUri URI för lagringscontainern i målmiljön (källan för importpipelinen).
Exempel: https://targetstorage.blob.core.windows.net/transfer
keyVaultName Namn på målnyckelvalvet
sasTokenSecretName Namnet på SAS-tokenhemligheten i målnyckelvalvet
Exempel: acr importsas

Importalternativ

Egenskapen options för importpipelinen stöder valfria booleska värden. Följande värden rekommenderas:

Parameter Värde
alternativ OverwriteTags – Skriv över befintliga måltaggar
DeleteSourceBlobOnSuccess – Ta bort källlagringsbloben efter lyckad import till målregistret
ContinueOnErrors – Fortsätt importera återstående artefakter i målregistret om en artefaktimport misslyckas.

Skapa resursen

Kör az deployment group create för att skapa en resurs med namnet importPipeline enligt följande exempel. Med det första alternativet aktiverar exempelmallen som standard en systemtilldelad identitet i ImportPipeline-resursen.

Med det andra alternativet kan du ange resursen med en användartilldelad identitet. (Skapandet av den användartilldelade identiteten visas inte.)

Med båda alternativen konfigurerar mallen identiteten för åtkomst till SAS-token i importnyckelvalvet.

Alternativ 1: Skapa resurs och aktivera systemtilldelad identitet

az deployment group create \
  --resource-group $TARGET_RG \
  --template-file azuredeploy.json \
  --name importPipeline \
  --parameters azuredeploy.parameters.json

Alternativ 2: Skapa resurs och ange användartilldelad identitet

I det här kommandot anger du resurs-ID för den användartilldelade identiteten som ytterligare en parameter.

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"

Om du planerar att köra importen manuellt noterar du resurs-ID:t (id) för pipelinen. Du kan lagra det här värdet i en miljövariabel för senare användning genom att köra kommandot az deployment group show . Till exempel:

IMPORT_RES_ID=$(az deployment group show \
  --resource-group $TARGET_RG \
  --name importPipeline \
  --query 'properties.outputResources[1].id' \
  --output tsv)

Skapa PipelineRun för export med Resource Manager

Skapa en PipelineRun-resurs för ditt källcontainerregister med azure Resource Manager-malldistribution. Den här resursen kör ExportPipeline-resursen som du skapade tidigare och exporterar angivna artefakter från containerregistret som en blob till ditt källlagringskonto.

Kopiera PipelineRun Resource Manager-mallfiler till en lokal mapp.

Ange följande parametervärden i filen azuredeploy.parameters.json:

Parameter Värde
registryName Namnet på källcontainerregistret
pipelineRunName Namn som du väljer för körningen
pipelineResourceId Resurs-ID för exportpipelinen.
Exempel: /subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.ContainerRegistry/registries/<sourceRegistryName>/exportPipelines/myExportPipeline
targetName Namn som du väljer för den artefaktblob som exporteras till ditt källlagringskonto, till exempel myblob
Artefakter Matris med källartefakter som ska överföras, som taggar eller manifestsammandrag
Exempel: [samples/hello-world:v1", "samples/nginx:v1" , "myrepository@sha256:0a2e01852872..."]

Om du distribuerar om en PipelineRun-resurs med identiska egenskaper måste du också använda egenskapen forceUpdateTag .

Kör az deployment group create för att skapa PipelineRun-resursen. I följande exempel namnges distributionsexportenPipelineRun.

az deployment group create \
  --resource-group $SOURCE_RG \
  --template-file azuredeploy.json \
  --name exportPipelineRun \
  --parameters azuredeploy.parameters.json

Lagra resurs-ID för pipelinekörningen i en miljövariabel för senare användning:

EXPORT_RUN_RES_ID=$(az deployment group show \
  --resource-group $SOURCE_RG \
  --name exportPipelineRun \
  --query 'properties.outputResources[0].id' \
  --output tsv)

Det kan ta flera minuter innan artefakter exporteras. När distributionen är klar kontrollerar du artefaktexporten genom att visa en lista över den exporterade bloben i överföringscontainern för källlagringskontot. Kör till exempel kommandot az storage blob list :

az storage blob list \
  --account-name $SOURCE_SA \
  --container transfer \
  --output table

Överföra blob (valfritt)

Använd AzCopy-verktyget eller andra metoder för att överföra blobdata från källlagringskontot till mållagringskontot.

Följande kommando kopierar till exempel azcopy copy myblob från överföringscontainern i källkontot till överföringscontainern i målkontot. Om bloben finns i målkontot skrivs den över. Autentisering använder SAS-token med lämpliga behörigheter för käll- och målcontainrarna. (Steg för att skapa token visas inte.)

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

Utlösa ImportPipeline-resurs

Om du har aktiverat parametern sourceTriggerStatus för ImportPipeline (standardvärdet) utlöses pipelinen efter att blobben har kopierats till mållagringskontot. Det kan ta flera minuter innan artefakter importeras. När importen har slutförts kontrollerar du artefaktimporten genom att visa en lista över lagringsplatserna i målcontainerregistret. Kör till exempel az acr repository list:

az acr repository list --name <target-registry-name>

Kommentar

Källutlösaren importerar endast blobar som har en senast ändrad tid under de senaste 60 dagarna. Om du tänker använda källutlösare för att importera blobar som är äldre än så uppdaterar du tiden för blobarna senast ändrade genom att lägga till blobmetadata i dem eller importera dem med manuellt skapade pipelinekörningar.

Om du inte har aktiverat parametern sourceTriggerStatus för importpipelinen kör du ImportPipeline-resursen manuellt, som du ser i följande avsnitt.

Skapa PipelineRun för import med Resource Manager (valfritt)

Du kan också använda en PipelineRun-resurs för att utlösa en ImportPipeline för artefaktimport till målcontainerregistret.

Kopiera PipelineRun Resource Manager-mallfiler till en lokal mapp.

Ange följande parametervärden i filen azuredeploy.parameters.json:

Parameter Värde
registryName Namnet på ditt målcontainerregister
pipelineRunName Namn som du väljer för körningen
pipelineResourceId Resurs-ID för importpipelinen.
Exempel: /subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.ContainerRegistry/registries/<sourceRegistryName>/importPipelines/myImportPipeline
sourceName Namnet på den befintliga bloben för exporterade artefakter i ditt lagringskonto, till exempel myblob

Om du distribuerar om en PipelineRun-resurs med identiska egenskaper måste du också använda egenskapen forceUpdateTag .

Kör az deployment group create för att köra resursen.

az deployment group create \
  --resource-group $TARGET_RG \
  --name importPipelineRun \
  --template-file azuredeploy.json \
  --parameters azuredeploy.parameters.json

Lagra resurs-ID för pipelinekörningen i en miljövariabel för senare användning:

IMPORT_RUN_RES_ID=$(az deployment group show \
  --resource-group $TARGET_RG \
  --name importPipelineRun \
  --query 'properties.outputResources[0].id' \
  --output tsv)

När distributionen är klar kontrollerar du artefaktimporten genom att visa en lista över lagringsplatserna i målcontainerregistret. Kör till exempel az acr repository list:

az acr repository list --name <target-registry-name>

Distribuera om PipelineRun-resurs

Om du distribuerar om en PipelineRun-resurs med identiska egenskaper måste du använda egenskapen forceUpdateTag . Den här egenskapen anger att PipelineRun-resursen ska återskapas även om konfigurationen inte har ändrats. Se till att forceUpdateTag skiljer sig åt varje gång du distribuerar om PipelineRun-resursen. Exemplet nedan återskapar en PipelineRun för export. Den aktuella datetime används för att ange forceUpdateTag, vilket säkerställer att den här egenskapen alltid är unik.

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

Ta bort pipelineresurser

Följande exempelkommandon använder az resource delete för att ta bort pipelineresurserna som skapas i den här artikeln. Resurs-ID:t lagrades tidigare i miljövariabler.

# 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

Felsökning av ACR-överföring

Visa felsökning av ACR-överföring för felsökningsvägledning.

Nästa steg