ACR Transfer met ARM-sjablonen
Vereisten voltooien
Voltooi de vereisten die hier worden beschreven voordat u de acties in dit artikel uitvoert. Dit betekent het volgende:
- U hebt een bestaand Premium SKU-register in beide clouds.
- U hebt een bestaande opslagaccountcontainer in beide clouds.
- U hebt een bestaande Sleutelkluis met een geheim met een geldig SAS-token met de benodigde machtigingen in beide clouds.
- U hebt een recente versie van Az CLI geïnstalleerd in beide clouds.
Belangrijk
De ACR Transfer ondersteunt artefacten met de laaggroottelimieten tot 8 GB vanwege de technische beperkingen.
Overweeg om de Az CLI-extensie te gebruiken
Voor de meeste niet-automatische use-cases raden we u aan om indien mogelijk de Az CLI-extensie te gebruiken. U kunt hier de documentatie voor de Az CLI-extensie bekijken.
ExportPipeline maken met Resource Manager
Maak een ExportPipeline-resource voor uw broncontainerregister met behulp van azure Resource Manager-sjabloonimplementatie.
Kopieer ExportPipeline Resource Manager-sjabloonbestanden naar een lokale map.
Voer de volgende parameterwaarden in het bestand azuredeploy.parameters.json
in:
Parameter | Weergegeven als |
---|---|
registryName | Naam van het broncontainerregister |
exportPipelineName | Naam die u kiest voor de exportpijplijn |
targetUri | URI van de opslagcontainer in uw bronomgeving (het doel van de exportpijplijn). Voorbeeld: https://sourcestorage.blob.core.windows.net/transfer |
keyVaultName | Naam van de bronsleutelkluis |
sasTokenSecretName | Naam van het SAS-tokengeheim in de bronsleutelkluis Voorbeeld: acrexportsas |
Opties voor exporteren
De options
eigenschap voor de exportpijplijnen ondersteunt optionele Booleaanse waarden. De volgende waarden worden aanbevolen:
Parameter | Weergegeven als |
---|---|
Opties | Overschrijvenblobs - Bestaande doel-blobs overschrijven ContinueOnErrors: doorgaan met het exporteren van resterende artefacten in het bronregister als het exporteren van één artefact mislukt. |
De resource maken
Voer az deployment group create uit om een resource met de naam exportPipeline te maken, zoals wordt weergegeven in de volgende voorbeelden. Met de eerste optie schakelt de voorbeeldsjabloon standaard een door het systeem toegewezen identiteit in de ExportPipeline-resource in.
Met de tweede optie kunt u de resource voorzien van een door de gebruiker toegewezen identiteit. (Het maken van de door de gebruiker toegewezen identiteit wordt niet weergegeven.)
Met beide opties configureert de sjabloon de identiteit voor toegang tot het SAS-token in de exportsleutelkluis.
Optie 1: Resource maken en door het systeem toegewezen identiteit inschakelen
az deployment group create \
--resource-group $SOURCE_RG \
--template-file azuredeploy.json \
--name exportPipeline \
--parameters azuredeploy.parameters.json
Optie 2: Een resource maken en een door de gebruiker toegewezen identiteit opgeven
Geef in deze opdracht de resource-id van de door de gebruiker toegewezen identiteit op als een extra 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"
Noteer in de uitvoer van de opdracht de resource-id (id
) van de pijplijn. U kunt deze waarde opslaan in een omgevingsvariabele voor later gebruik door de az deployment group show uit te voeren. Voorbeeld:
EXPORT_RES_ID=$(az deployment group show \
--resource-group $SOURCE_RG \
--name exportPipeline \
--query 'properties.outputResources[1].id' \
--output tsv)
ImportPipeline maken met Resource Manager
Maak een ImportPipeline-resource in uw doelcontainerregister met behulp van azure Resource Manager-sjabloonimplementatie. Standaard is de pijplijn ingeschakeld om automatisch te importeren wanneer het opslagaccount in de doelomgeving een artefact-blob heeft.
Kopieer ImportPipeline Resource Manager-sjabloonbestanden naar een lokale map.
Voer de volgende parameterwaarden in het bestand azuredeploy.parameters.json
in:
Parameter | Weergegeven als |
---|---|
registryName | Naam van het doelcontainerregister |
importPipelineName | Naam die u kiest voor de importpijplijn |
sourceUri | URI van de opslagcontainer in uw doelomgeving (de bron voor de importpijplijn). Voorbeeld: https://targetstorage.blob.core.windows.net/transfer |
keyVaultName | Naam van de doelsleutelkluis |
sasTokenSecretName | Naam van het SAS-tokengeheim in de doelsleutelkluis Voorbeeld: acr importsas |
Opties voor importeren
De options
eigenschap voor de importpijplijn ondersteunt optionele Booleaanse waarden. De volgende waarden worden aanbevolen:
Parameter | Weergegeven als |
---|---|
Opties | Overschrijftags - Bestaande doeltags overschrijven DeleteSourceBlobOnSuccess - Verwijder de bronopslag-blob na het importeren in het doelregister ContinueOnErrors: doorgaan met het importeren van resterende artefacten in het doelregister als het importeren van één artefact mislukt. |
De resource maken
Voer az deployment group create uit om een resource met de naam importPipeline te maken, zoals wordt weergegeven in de volgende voorbeelden. Met de eerste optie schakelt de voorbeeldsjabloon standaard een door het systeem toegewezen identiteit in de ImportPipeline-resource in.
Met de tweede optie kunt u de resource voorzien van een door de gebruiker toegewezen identiteit. (Het maken van de door de gebruiker toegewezen identiteit wordt niet weergegeven.)
Met beide opties configureert de sjabloon de identiteit voor toegang tot het SAS-token in de importsleutelkluis.
Optie 1: Resource maken en door het systeem toegewezen identiteit inschakelen
az deployment group create \
--resource-group $TARGET_RG \
--template-file azuredeploy.json \
--name importPipeline \
--parameters azuredeploy.parameters.json
Optie 2: Een resource maken en een door de gebruiker toegewezen identiteit opgeven
Geef in deze opdracht de resource-id van de door de gebruiker toegewezen identiteit op als een extra 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"
Als u de import handmatig wilt uitvoeren, noteert u de resource-id (id
) van de pijplijn. U kunt deze waarde opslaan in een omgevingsvariabele voor later gebruik door de opdracht az deployment group show uit te voeren. Voorbeeld:
IMPORT_RES_ID=$(az deployment group show \
--resource-group $TARGET_RG \
--name importPipeline \
--query 'properties.outputResources[1].id' \
--output tsv)
PipelineRun maken voor export met Resource Manager
Maak een PipelineRun-resource voor uw broncontainerregister met behulp van azure Resource Manager-sjabloonimplementatie. Deze resource voert de ExportPipeline-resource uit die u eerder hebt gemaakt en exporteert opgegeven artefacten uit uw containerregister als blob naar uw bronopslagaccount.
Kopieer PipelineRun Resource Manager-sjabloonbestanden naar een lokale map.
Voer de volgende parameterwaarden in het bestand azuredeploy.parameters.json
in:
Parameter | Weergegeven als |
---|---|
registryName | Naam van het broncontainerregister |
pipelineRunName | Naam die u kiest voor de uitvoering |
pipelineResourceId | Resource-id van de exportpijplijn. Voorbeeld: /subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.ContainerRegistry/registries/<sourceRegistryName>/exportPipelines/myExportPipeline |
targetName | Naam die u kiest voor de artefacten-blob die is geëxporteerd naar uw bronopslagaccount, zoals myblob |
Artefacten | Matrix van bronartefacten die moeten worden overgedragen, als tags of manifestsamenvatten Voorbeeld: [samples/hello-world:v1", "samples/nginx:v1" , "myrepository@sha256:0a2e01852872..."] |
Als u een PipelineRun-resource opnieuw implementeert met identieke eigenschappen, moet u ook de eigenschap forceUpdateTag gebruiken.
Voer az deployment group create uit om de PipelineRun-resource te maken. In het volgende voorbeeld wordt de implementatie exportPipelineRun genoemd.
az deployment group create \
--resource-group $SOURCE_RG \
--template-file azuredeploy.json \
--name exportPipelineRun \
--parameters azuredeploy.parameters.json
Sla voor later gebruik de resource-id van de pijplijnuitvoering op in een omgevingsvariabele:
EXPORT_RUN_RES_ID=$(az deployment group show \
--resource-group $SOURCE_RG \
--name exportPipelineRun \
--query 'properties.outputResources[0].id' \
--output tsv)
Het kan enkele minuten duren voordat artefacten zijn geëxporteerd. Wanneer de implementatie is voltooid, controleert u het exporteren van artefacten door de geëxporteerde blob in de overdrachtscontainer van het bronopslagaccount op te slaan. Voer bijvoorbeeld de opdracht az storage blob list uit:
az storage blob list \
--account-name $SOURCE_SA \
--container transfer \
--output table
Blob overdragen (optioneel)
Gebruik het hulpprogramma AzCopy of andere methoden om blobgegevens van het bronopslagaccount over te dragen naar het doelopslagaccount.
Met de volgende azcopy copy
opdracht wordt bijvoorbeeld myblob gekopieerd van de overdrachtscontainer in het bronaccount naar de overdrachtscontainer in het doelaccount. Als de blob in het doelaccount bestaat, wordt deze overschreven. Verificatie maakt gebruik van SAS-tokens met de juiste machtigingen voor de bron- en doelcontainers. (Stappen voor het maken van tokens worden niet weergegeven.)
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
ImportPipeline-resource activeren
Als u de sourceTriggerStatus
parameter van de ImportPipeline (de standaardwaarde) hebt ingeschakeld, wordt de pijplijn geactiveerd nadat de blob is gekopieerd naar het doelopslagaccount. Het kan enkele minuten duren voordat artefacten zijn geïmporteerd. Wanneer het importeren is voltooid, controleert u het importeren van artefacten door de opslagplaatsen in het doelcontainerregister weer te laten zien. Voer bijvoorbeeld az acr repository list uit:
az acr repository list --name <target-registry-name>
Notitie
Brontrigger importeert alleen blobs met een tijd voor laatst gewijzigd binnen de afgelopen 60 dagen. Als u van plan bent om brontriggers te gebruiken om blobs ouder te importeren, vernieuwt u de tijd van de laatste wijziging van de blobs door er blobmetagegevens aan toe te voegen of importeert u deze met handmatig gemaakte pijplijnuitvoeringen.
Als u de parameter van de sourceTriggerStatus
importpijplijn niet hebt ingeschakeld, voert u de ImportPipeline-resource handmatig uit, zoals wordt weergegeven in de volgende sectie.
PipelineRun maken voor importeren met Resource Manager (optioneel)
U kunt ook een PipelineRun-resource gebruiken om een ImportPipeline te activeren voor het importeren van artefacten in uw doelcontainerregister.
Kopieer PipelineRun Resource Manager-sjabloonbestanden naar een lokale map.
Voer de volgende parameterwaarden in het bestand azuredeploy.parameters.json
in:
Parameter | Weergegeven als |
---|---|
registryName | Naam van het doelcontainerregister |
pipelineRunName | Naam die u kiest voor de uitvoering |
pipelineResourceId | Resource-id van de importpijplijn. Voorbeeld: /subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.ContainerRegistry/registries/<sourceRegistryName>/importPipelines/myImportPipeline |
sourceName | Naam van de bestaande blob voor geëxporteerde artefacten in uw opslagaccount, zoals myblob |
Als u een PipelineRun-resource opnieuw implementeert met identieke eigenschappen, moet u ook de eigenschap forceUpdateTag gebruiken.
Voer az deployment group create uit om de resource uit te voeren.
az deployment group create \
--resource-group $TARGET_RG \
--name importPipelineRun \
--template-file azuredeploy.json \
--parameters azuredeploy.parameters.json
Sla voor later gebruik de resource-id van de pijplijnuitvoering op in een omgevingsvariabele:
IMPORT_RUN_RES_ID=$(az deployment group show \
--resource-group $TARGET_RG \
--name importPipelineRun \
--query 'properties.outputResources[0].id' \
--output tsv)
Wanneer de implementatie is voltooid, controleert u het importeren van artefacten door de opslagplaatsen in het doelcontainerregister te vermelden. Voer bijvoorbeeld az acr repository list uit:
az acr repository list --name <target-registry-name>
PipelineRun-resource opnieuw implementeren
Als u een PipelineRun-resource opnieuw implementeert met identieke eigenschappen, moet u gebruikmaken van de eigenschap forceUpdateTag . Deze eigenschap geeft aan dat de PipelineRun-resource opnieuw moet worden gemaakt, zelfs als de configuratie niet is gewijzigd. Zorg ervoor dat forceUpdateTag steeds anders is wanneer u de PipelineRun-resource opnieuw implementeert. In het onderstaande voorbeeld wordt een PipelineRun opnieuw gemaakt voor export. De huidige datum/tijd wordt gebruikt om forceUpdateTag in te stellen, waardoor deze eigenschap altijd uniek is.
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
Pijplijnbronnen verwijderen
In de volgende voorbeeldopdrachten wordt az resource delete gebruikt om de pijplijnresources te verwijderen die in dit artikel zijn gemaakt. De resource-id's zijn eerder opgeslagen in omgevingsvariabelen.
# 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
Problemen met ACR Transfer oplossen
Bekijk ACR Transfer Troubleshooting voor richtlijnen voor probleemoplossing.
Volgende stappen
- Meer informatie over het blokkeren van het maken van exportpijplijnen uit een containerregister met netwerkbeperking.