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
- Lär dig hur du blockerar skapandet av exportpipelines från ett nätverksbegränsat containerregister.