Share via


ACR-Übertragung mit der Azure CLI

In diesem Artikel wird gezeigt, wie Sie die Funktion für die ACR-Übertragung mit der Azure CLI-Erweiterung „acrtransfer“ verwenden.

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.

Installieren der Azure CLI-Erweiterung

In AzureCloud können Sie die Erweiterung mit dem folgenden Befehl installieren:

az extension add --name acrtransfer

In AzureCloud und anderen Clouds können Sie das Blob direkt aus einem öffentlichen Speicherkontocontainer installieren. Das Blob wird im Speicherkonto acrtransferext, Container dist, Blob acrtransfer-1.0.0-py2.py3-none-any.wh gehostet. Möglicherweise müssen Sie abhängig von der Cloud, in der Sie sich befinden, das Speicher-URI-Suffix ändern. Folgendes wird in AzureCloud installiert:

az extension add --source https://acrtransferext.blob.core.windows.net/dist/acrtransfer-1.0.0-py2.py3-none-any.whl

Erstellen einer ExportPipeline-Ressource mit der Azure CLI-Erweiterung „acrtransfer“

Erstellen Sie mithilfe der Azure CLI-Erweiterung „acrtransfer“ eine ExportPipeline-Ressource für Ihre AzureCloud-Containerregistrierung.

Erstellen Sie eine Exportpipeline ohne Optionen und mit einer systemseitig zugewiesenen Identität:

az acr export-pipeline create \
--resource-group $MyRG \
--registry $MyReg \
--name $MyPipeline \
--secret-uri https://$MyKV.vault.azure.net/secrets/$MySecret \
--storage-container-uri https://$MyStorage.blob.core.windows.net/$MyContainer

Erstellen Sie eine Exportpipeline mit allen möglichen Optionen und mit einer systemseitig zugewiesenen Identität:

az acr export-pipeline create \
--resource-group $MyRG \
--registry $MyReg \
--name $MyPipeline \
--secret-uri https://$MyKV.vault.azure.net/secrets/$MySecret \
--storage-container-uri https://$MyStorage.blob.core.windows.net/$MyContainer \
--options OverwriteBlobs ContinueOnErrors \
--assign-identity /subscriptions/$MySubID/resourceGroups/$MyRG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$MyIdentity

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.

Erteilen von keyvault-Richtlinienzugriff für die ExportPipeline-Identität

Wenn Sie Ihre Pipeline mit einer benutzerseitig zugewiesenen Identität erstellt haben, erteilen Sie dieser benutzerseitig zugewiesenen Identität einfach Zugriffsrichtlinienberechtigungen vom Typ secret get für den Schlüsseltresor.

Wenn Sie Ihre Pipeline mit einer systemseitig zugewiesenen Identität erstellt haben, müssen Sie zuerst die Prinzipal-ID (principalId) abrufen, die das System Ihrer Pipelineressource zugewiesen hat.

Führen Sie den folgenden Befehl aus, um Ihre Pipelineressource abzurufen:

az acr export-pipeline show --resource-group $MyRG --registry $MyReg --name $MyPipeline

Es wird empfohlen, den Wert aus dieser Ausgabe in das Feld principalId zu kopieren.

Anschließend führen Sie den folgenden Befehl aus, um diesem Prinzipal die entsprechenden Zugriffsrichtlinienberechtigungen vom Typ secret get für Ihren Schlüsseltresor zu erteilen.

az keyvault set-policy --name $MyKeyvault --secret-permissions get --object-id $MyPrincipalID

Erstellen einer ImportPipeline-Ressource mit der Azure CLI-Erweiterung „acrtransfer“

Erstellen Sie mithilfe der Azure CLI-Erweiterung „acrtransfer“ eine ImportPipeline-Ressource in Ihrer Zielcontainerregistrierung. In der Pipeline ist standardmäßig aktiviert, dass automatisch eine Import PipelineRun-Ressource erstellt wird, wenn der angefügte Speicherkontocontainer ein neues Artefaktblob empfängt.

Erstellen Sie eine Importpipeline ohne Optionen und mit einer systemseitig zugewiesenen Identität:

az acr import-pipeline create \
--resource-group $MyRG \
--registry $MyReg \
--name $MyPipeline \
--secret-uri https://$MyKV.vault.azure.net/secrets/$MySecret \
--storage-container-uri https://$MyStorage.blob.core.windows.net/$MyContainer

Erstellen Sie eine Importpipeline mit allen möglichen Optionen, deaktiviertem Quelltrigger und einer benutzerseitig zugewiesenen Identität:

az acr import-pipeline create \
--resource-group $MyRG \
--registry $MyReg \
--name $MyPipeline \
--secret-uri https://$MyKV.vault.azure.net/secrets/$MySecret \
--storage-container-uri https://$MyStorage.blob.core.windows.net/$MyContainer \
--options DeleteSourceBlobOnSuccess OverwriteTags ContinueOnErrors \
--assign-identity /subscriptions/$MySubID/resourceGroups/$MyRG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$MyIdentity \
--source-trigger-enabled False

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.

Erteilen von keyvault-Richtlinienzugriff für die ImportPipeline-Identität

Wenn Sie Ihre Pipeline mit einer benutzerseitig zugewiesenen Identität erstellt haben, erteilen Sie dieser benutzerseitig zugewiesenen Identität einfach Zugriffsrichtlinienberechtigungen vom Typ secret get für den Schlüsseltresor.

Wenn Sie Ihre Pipeline mit einer systemseitig zugewiesenen Identität erstellt haben, müssen Sie zuerst die Prinzipal-ID (principalId) abrufen, die das System Ihrer Pipelineressource zugewiesen hat.

Führen Sie den folgenden Befehl aus, um Ihre Pipelineressource abzurufen:

az acr import-pipeline show --resource-group $MyRG --registry $MyReg --name $MyPipeline

Es wird empfohlen, den Wert aus dieser Ausgabe in das Feld principalId zu kopieren.

Anschließend führen Sie den folgenden Befehl aus, um diesem Prinzipal die entsprechende Zugriffsrichtlinie vom Typ secret get für Ihren Schlüsseltresor zuzuweisen.

az keyvault set-policy --name $MyKeyvault --secret-permissions get --object-id $MyPrincipalID

Erstellen einer PipelineRun-Ressource für den Export mit der Azure CLI-Erweiterung „acrtransfer“

Erstellen Sie mithilfe der Azure CLI-Erweiterung „acrtransfer“ eine PipelineRun-Ressource für Ihre Containerregistrierung. Diese Ressource führt die zuvor von Ihnen erstellte ExportPipeline-Ressource aus und exportiert angegebene Artefakte als Blob aus Ihrer Containerregistrierung in Ihren Speicherkontocontainer.

Erstellen Sie eine Exportpipelineausführung:

az acr pipeline-run create \
--resource-group $MyRG \
--registry $MyReg \
--pipeline $MyPipeline \
--name $MyPipelineRun \
--pipeline-type export \
--storage-blob $MyBlob \
--artifacts hello-world:latest hello-world@sha256:90659bf80b44ce6be8234e6ff90a1ac34acbeb826903b02cfa0da11c82cbc042 \
--force-redeploy

Wenn Sie eine PipelineRun-Ressource mit identischen Eigenschaften erneut bereitstellen, müssen Sie das Flag „--force-redeploy“ verwenden.

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 des Quellspeicherkontos auflisten. Führen Sie z. B. den Befehl az storage blob list Befehl aus:

az storage blob list --account-name $MyStorageAccount --container $MyContainer --output table

Domänenübergreifendes Übertragen eines Blobs

In den meisten Anwendungsfällen verwenden Sie jetzt eine domänenübergreifende Lösung oder eine andere Methode, um Ihr Blob aus dem Speicherkonto in Ihrer Quelldomäne (das Speicherkonto, das Ihrer Exportpipeline zugeordnet ist) in das Speicherkonto in Ihrer Zieldomäne (das Speicherkonto, das Ihrer Importpipeline zugeordnet ist) zu übertragen. An diesem Punkt wird davon ausgegangen, dass das Blob in dem Zieldomänen-Speicherkonto eingegangen ist, das Ihrer Importpipeline zugeordnet ist.

Auslösen der ImportPipeline-Ressource

Wenn Sie beim Erstellen der Importpipeline nicht den Parameter --source-trigger-enabled False verwendet haben, wird die Pipeline innerhalb von 15 Minuten nach dem Eingang des Blobs im Speicherkontocontainer ausgelöst. Es kann einige Minuten dauern, bis Artefakte importiert werden. Wenn der Import erfolgreich abgeschlossen wurde, überprüfen Sie den Artefaktimport, indem Sie die Tags für das importierte Repository in der Zielcontainerregistrierung auflisten. Führen Sie z. B. az acr repository show-tags aus:

az acr repository show-tags --name $MyRegistry --repository $MyRepository

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 beim Erstellen Ihrer ImportPipeline-Ressource den Parameter --source-trigger-enabled False verwendet haben, müssen Sie manuell eine PipelineRun-Ressource erstellen, wie im folgenden Abschnitt gezeigt.

Erstellen von PipelineRun für den Import mit der Azure CLI-Erweiterung „acrtransfer“

Erstellen Sie mithilfe der Azure CLI-Erweiterung „acrtransfer“ eine PipelineRun-Ressource für Ihre Containerregistrierung. Diese Ressource führt die zuvor erstellte ImportPipeline-Ressource aus und importiert angegebene Blobs aus Ihrem Speicherkonto in Ihre Containerregistrierung.

Erstellen Sie eine Importpipelineausführung:

az acr pipeline-run create \
--resource-group $MyRG \
--registry $MyReg \
--pipeline $MyPipeline \
--name $MyPipelineRun \
--pipeline-type import \
--storage-blob $MyBlob \
--force-redeploy

Wenn Sie eine PipelineRun-Ressource mit identischen Eigenschaften erneut bereitstellen, müssen Sie das Flag „--force-redeploy“ verwenden.

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 show-tags aus:

az acr repository show-tags --name $MyRegistry --repository $MyRepository

Löschen von ACR-Übertragungsressourcen

Löschen Sie eine ExportPipeline-Ressource:

az acr export-pipeline delete --resource-group $MyRG --registry $MyReg --name $MyPipeline

Löschen Sie eine ImportPipeline-Ressource:

az acr import-pipeline delete --resource-group $MyRG --registry $MyReg --name $MyPipeline

Löschen Sie eine PipelineRun-Ressource. Beachten Sie, dass dadurch die von PipelineRun ausgeführte Aktion nicht rückgängig gemacht wird. Dies entspricht eher dem Löschen des Protokolls von PipelineRun.

az acr pipeline-run delete --resource-group $MyRG --registry $MyReg --name $MyPipelineRun

Problembehandlung für die ACR-Übertragung

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

Nächste Schritte