Freigeben über


ACR-Übertragung mit ARM-Vorlagen

Erfüllen der Voraussetzungen

Vergewissern Sie sich, dass die hier aufgeführten Voraussetzungen erfüllt sind, bevor Sie die Aktionen in diesem Artikel ausführen. Dies bedeutet Folgendes:

  • Sie verfügen über eine Premium-SKU-Registrierung in beiden Clouds.
  • Sie besitzen einen Speicherkontocontainer in beiden Clouds.
  • Sie verfügen über einen vorhandenen Schlüsseltresor mit einem Geheimnis, das ein gültiges SAS-Token mit den erforderlichen Berechtigungen in beiden Clouds enthält.
  • In beiden Clouds ist eine aktuelle Version der Azure CLI installiert.

Wichtig

Aufgrund der technischen Einschränkungen unterstützt die ACR-Übertragung Artefakte, deren Ebenengröße auf 8 GB begrenzt ist.

Erwägen der Verwendung der Azure CLI-Erweiterung

Für die meisten nicht automatisierten Anwendungsfälle sollte nach Möglichkeit die Azure CLI-Erweiterung verwendet werden. Die Dokumentation für die Azure CLI-Erweiterung finden Sie hier.

Erstellen von ExportPipeline mit Resource Manager

Erstellen Sie mithilfe der Azure Resource Manager-Vorlagenbereitstellung eine ExportPipeline-Ressource für Ihre Quellcontainerregistrierung.

Kopieren Sie die ExportPipeline-Vorlagendateien von Resource Manager in einen lokalen Ordner.

Geben Sie die folgenden Parameterwerte in die Datei azuredeploy.parameters.json ein:

Parameter Wert
registryName Der Name der Quellcontainerregistrierung.
exportPipelineName Der Name, den Sie für die Exportpipeline auswählen.
targetUri Der URI des Speichercontainers in der Quellumgebung (das Ziel der Exportpipeline).
Beispiel: https://sourcestorage.blob.core.windows.net/transfer
keyVaultName Der Name des Quellschlüsseltresors.
sasTokenSecretName Der Name des SAS-Tokengeheimnisses im Quellschlüsseltresor.
Beispiel: acrexportsas

Exportoptionen

Die options-Eigenschaft für die Exportpipelines unterstützt optionale boolesche Werte. Die folgenden Werte werden empfohlen:

Parameter Wert
Optionen OverwriteBlobs: Überschreiben vorhandener Zielblobs
ContinueOnErrors: Fortsetzen des Exports verbleibender Artefakte in der Quellregistrierung, wenn ein Artefaktexport fehlschlägt.

Erstellen der Ressource

Führen Sie az deployment group create aus, um eine Ressource mit dem Namen exportPipeline wie in den folgenden Beispielen zu erstellen. Mit der ersten Option wird von der Beispielvorlage standardmäßig eine vom System zugewiesene Identität in der Ressource „ExportPipeline“ aktiviert.

Mit der zweiten Option können Sie die Ressource mit einer vom Benutzer zugewiesenen Identität bereitstellen. (Die Erstellung der vom Benutzer zugewiesenen Identität ist nicht dargestellt.)

Mit beiden Optionen konfiguriert die Vorlage die Identität für den Zugriff auf das SAS-Token im Exportschlüsseltresor.

Option 1: Erstellen von Ressourcen und Aktivieren systemseitig zugewiesener Identitäten

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

Option 2: Erstellen von Ressourcen und Bereitstellen benutzerseitig zugewiesener Identitäten

Geben Sie die Ressourcen-ID der vom Benutzer zugewiesenen Identität in diesem Befehl als zusätzlichen Parameter an.

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"

Notieren Sie sich in der Befehlsausgabe die Ressourcen-ID (id) der Pipeline. Sie können diesen Wert zur späteren Verwendung in einer Umgebungsvariablen speichern, indem Sie az deployment group show ausführen. Beispiel:

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

Erstellen Sie mithilfe der Azure Resource Manager-Vorlagenbereitstellung eine ImportPipeline-Ressource in der Zielcontainerregistrierung.

Erstellen Sie mithilfe der Azure Resource Manager-Vorlagenbereitstellung eine ImportPipeline-Ressource in der Zielcontainerregistrierung. Standardmäßig ist die Pipeline für automatischen Import aktiviert, wenn das Speicherkonto in der Zielumgebung über ein Artefaktblob verfügt.

Kopieren Sie die ImportPipeline-Vorlagendateien von Resource Manager in einen lokalen Ordner.

Geben Sie die folgenden Parameterwerte in die Datei azuredeploy.parameters.json ein:

Parameter Wert
registryName Der Name der Zielcontainerregistrierung.
importPipelineName Der Name, den Sie für die Importpipeline auswählen.
sourceUri Der URI des Speichercontainers in der Zielumgebung (die Quelle der Importpipeline).
Beispiel: https://targetstorage.blob.core.windows.net/transfer
keyVaultName Der Name des Zielschlüsseltresors.
sasTokenSecretName Der Name des SAS-Tokengeheimnisses im Zielschlüsseltresor.
Beispiel: acr importsas

Importoptionen

Die options-Eigenschaft für die Importpipeline unterstützt optionale boolesche Werte. Die folgenden Werte werden empfohlen:

Parameter Wert
Optionen OverwriteTags: Überschreiben vorhandener Zieltags
DeleteSourceBlobOnSuccess: Löscht das Quellspeicherblob nach dem erfolgreichen Import in die Zielregistrierung.
ContinueOnErrors: Fortsetzen des Imports verbleibender Artefakte in der Zielregistrierung, wenn ein Artefaktimport fehlschlägt.

Erstellen der Ressource

Führen Sie az deployment group create aus, um eine Ressource mit dem Namen importPipeline wie in den folgenden Beispielen zu erstellen. Mit der ersten Option wird von der Beispielvorlage standardmäßig eine vom System zugewiesene Identität in der Ressource „ImportPipeline“ aktiviert.

Mit der zweiten Option können Sie die Ressource mit einer vom Benutzer zugewiesenen Identität bereitstellen. (Die Erstellung der vom Benutzer zugewiesenen Identität ist nicht dargestellt.)

Mit beiden Optionen konfiguriert die Vorlage die Identität für den Zugriff auf das SAS-Token im Importschlüsseltresor.

Option 1: Erstellen von Ressourcen und Aktivieren systemseitig zugewiesener Identitäten

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

Option 2: Erstellen von Ressourcen und Bereitstellen benutzerseitig zugewiesener Identitäten

Geben Sie die Ressourcen-ID der vom Benutzer zugewiesenen Identität in diesem Befehl als zusätzlichen Parameter an.

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"

Wenn Sie beabsichtigen, den Import manuell auszuführen, notieren Sie sich die Ressourcen-ID (id) der Pipeline. Sie können diesen Wert zur späteren Verwendung in einer Umgebungsvariablen speichern, indem Sie den Befehl az deployment group show ausführen. Beispiel:

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

Erstellen von PipelineRun für den Export mit Resource Manager

Erstellen Sie mithilfe der Azure Resource Manager-Vorlagenbereitstellung eine PipelineRun-Ressource für Ihre Quellcontainerregistrierung. Diese Ressource führt die ExportPipeline-Ressource aus, die Sie zuvor erstellt haben, und exportiert angegebene Artefakte als Blob aus Ihrer Containerregistrierung in Ihr Quellspeicherkonto.

Kopieren Sie die PipelineRun-Vorlagendateien von Resource Manager in einen lokalen Ordner.

Geben Sie die folgenden Parameterwerte in die Datei azuredeploy.parameters.json ein:

Parameter Wert
registryName Der Name der Quellcontainerregistrierung.
pipelineRunName Der Name, den Sie für den Testlauf auswählen.
pipelineResourceId Die Ressourcen-ID der Exportpipeline.
Beispiel: /subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.ContainerRegistry/registries/<sourceRegistryName>/exportPipelines/myExportPipeline
targetName Der Name, den Sie für das in Ihr Quellspeicherkonto exportierte Artefaktblob auswählen, z. B. myblob.
artifacts Das Array der zu übertragenden Quellartefakte als Tags oder als Manifesthashes
Beispiel: [samples/hello-world:v1", "samples/nginx:v1" , "myrepository@sha256:0a2e01852872..."]

Wenn Sie eine PipelineRun-Ressource mit identischen Eigenschaften erneut bereitstellen, müssen Sie auch die Eigenschaft forceUpdateTag verwenden.

Führen Sie az deployment group create aus, um die PipelineRun-Ressource zu erstellen. Im folgenden Beispiel wird die Bereitstellung exportPipelineRun genannt.

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

Speichern Sie die Ressourcen-ID der Pipelineausführung zur späteren Verwendung in einer Umgebungsvariablen:

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

Es kann einige Minuten dauern, bis Artefakte exportiert werden. Wenn die Bereitstellung erfolgreich abgeschlossen wurde, überprüfen Sie den Artefaktexport, indem Sie das exportierte Blob im Container transfer des Quellspeicherkontos auflisten. Führen Sie z. B. den Befehl az storage blob list Befehl aus:

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

Übertragen des Blobs (optional)

Verwenden Sie das AzCopy-Tool oder andere Methoden, um Blobdaten aus dem Quellspeicherkonto in das Zielspeicherkonto zu übertragen.

Beispielsweise kopiert der folgende azcopy copy-Befehl „myblob“ aus dem Container transfer des Quellkontos in den Container transfer im Zielkonto. Wenn das Blob im Zielkonto vorhanden ist, wird es überschrieben. Bei der Authentifizierung werden SAS-Token mit den entsprechenden Berechtigungen für die Quell- und Zielcontainer verwendet. (Die Schritte zum Erstellen von Token werden nicht gezeigt.)

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

Auslösen der ImportPipeline-Ressource

Wenn Sie den sourceTriggerStatus-Parameter von ImportPipeline (den Standardwert) aktiviert haben, wird die Pipeline ausgelöst, nachdem das Blob in das Zielspeicherkonto kopiert wurde. Es kann einige Minuten dauern, bis Artefakte importiert werden. Wenn der Import erfolgreich abgeschlossen wurde, überprüfen Sie den Artefaktimport, indem Sie die Repositorys in der Zielcontainerregistrierung auflisten. Führen Sie z. B. az acr repository list aus:

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

Hinweis

Der Quelltrigger importiert nur Blobs, für die der Zeitpunkt der letzten Änderung innerhalb der letzten 60 Tage liegt. Wenn Sie den Quelltrigger zum Importieren von Blobs verwenden möchten, die außerhalb dieses Zeitraums liegen, aktualisieren Sie den Zeitpunkt der letzten Änderung der Blobs, indem Sie ihnen Blobmetadaten hinzufügen. Importieren Sie sie andernfalls mit manuell erstellten Pipelineausführungen.

Wenn Sie den sourceTriggerStatus-Parameter der Importpipeline nicht aktiviert haben, führen Sie die ImportPipeline-Ressource manuell aus, wie im folgenden Abschnitt gezeigt.

Erstellen von PipelineRun für den Import mit Resource Manager (optional)

Sie können eine PipelineRun-Ressource auch verwenden, um eine ImportPipeline für den Artefaktimport in der Zielcontainerregistrierung auszulösen.

Kopieren Sie die PipelineRun-Vorlagendateien von Resource Manager in einen lokalen Ordner.

Geben Sie die folgenden Parameterwerte in die Datei azuredeploy.parameters.json ein:

Parameter Wert
registryName Der Name der Zielcontainerregistrierung.
pipelineRunName Der Name, den Sie für den Testlauf auswählen.
pipelineResourceId Die Ressourcen-ID der Importpipeline.
Beispiel: /subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.ContainerRegistry/registries/<sourceRegistryName>/importPipelines/myImportPipeline
sourceName Der Name des vorhandenen Blobs für exportierte Artefakte in Ihrem Speicherkonto, z. B. myblob

Wenn Sie eine PipelineRun-Ressource mit identischen Eigenschaften erneut bereitstellen, müssen Sie auch die Eigenschaft forceUpdateTag verwenden.

Führen Sie az deployment group create aus, um die Ressource auszuführen.

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

Speichern Sie die Ressourcen-ID der Pipelineausführung zur späteren Verwendung in einer Umgebungsvariablen:

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

Wenn die Bereitstellung erfolgreich abgeschlossen wurde, überprüfen Sie den Artefaktimport, indem Sie die Repositorys in der Zielcontainerregistrierung auflisten. Führen Sie z. B. az acr repository list aus:

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

Erneutes Bereitstellen der PipelineRun-Ressource

Wenn Sie eine PipelineRun-Ressource mit identischen Eigenschaften erneut bereitstellen, müssen Sie die Eigenschaft forceUpdateTag nutzen. Diese Eigenschaft gibt an, dass die PipelineRun-Ressource neu erstellt werden soll, auch wenn sich die Konfiguration nicht geändert hat. ForceUpdateTag muss bei jeder erneuten Bereitstellung der PipelineRun-Ressource eindeutig sein. Mit dem folgenden Beispiel wird eine PipelineRun-Ressource für den Export erstellt. Der aktuelle datetime-Wert wird zum Festlegen von forceUpdateTag verwendet. Dadurch wird sichergestellt, dass diese Eigenschaft immer eindeutig ist.

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

Löschen von Pipelineressourcen

In den folgenden Beispielbefehlen wird az resource delete verwendet, um die in diesem Artikel erstellten Pipelineressourcen zu löschen. Früher wurden die Ressourcen-IDs in Umgebungsvariablen gespeichert.

# 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

Problembehandlung für die ACR-Übertragung

Informationen zur Problembehandlung finden Sie unter Problembehandlung für die ACR-Übertragung.

Nächste Schritte