Transfer ACR za pomocą interfejsu wiersza polecenia az

W tym artykule pokazano, jak używać funkcji ACR Transfer z rozszerzeniem interfejsu wiersza polecenia acrtransfer Az.

Pełne wymagania wstępne

Przed podjęciem próby wykonania akcji w tym artykule należy spełnić wymagania wstępne opisane tutaj . To oznacza, że:

  • Masz istniejący rejestr jednostek SKU Premium w obu chmurach.
  • Masz istniejący kontener konta magazynu w obu chmurach.
  • Masz istniejącą usługę Keyvault z wpisem tajnym zawierającym prawidłowy token SAS z niezbędnymi uprawnieniami w obu chmurach.
  • Masz najnowszą wersję interfejsu wiersza polecenia Az zainstalowaną w obu chmurach.

Instalowanie rozszerzenia interfejsu wiersza polecenia Az

W usłudze AzureCloud można zainstalować rozszerzenie za pomocą następującego polecenia:

az extension add --name acrtransfer

W usłudze AzureCloud i innych chmurach można zainstalować obiekt blob bezpośrednio z kontenera konta magazynu publicznego. Obiekt blob jest hostowany na acrtransferext koncie magazynu, dist kontenerze, acrtransfer-1.0.0-py2.py3-none-any.wh obiekcie blob. Może być konieczne zmianę sufiksu identyfikatora URI magazynu w zależności od chmury, w której się znajdują. Następujące elementy zostaną zainstalowane w usłudze AzureCloud:

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

Tworzenie polecenia ExportPipeline za pomocą rozszerzenia interfejsu wiersza polecenia acrtransfer Az

Utwórz zasób ExportPipeline dla rejestru kontenerów usługi AzureCloud przy użyciu rozszerzenia interfejsu wiersza polecenia acrtransfer Az.

Utwórz potok eksportu bez opcji i tożsamości przypisanej przez system:

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

Utwórz potok eksportu z wszystkimi możliwymi opcjami i tożsamością przypisaną przez użytkownika:

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

Opcje eksportu

Właściwość options potoków eksportu obsługuje opcjonalne wartości logiczne. Zalecane są następujące wartości:

Parametr Wartość
options Zastępowanie obiektów Blob — zastępowanie istniejących obiektów blob docelowych
ContinueOnErrors — kontynuuj eksportowanie pozostałych artefaktów w rejestrze źródłowym, jeśli jeden eksport artefaktu zakończy się niepowodzeniem.

Przyznawanie dostępu zasad keyvault tożsamości ExportPipeline

Jeśli potok został utworzony przy użyciu tożsamości przypisanej przez użytkownika, po prostu nadaj temu użytkownikowi uprawnienia zasad dostępu tożsamości w secret get usłudze Keyvault.

Jeśli potok został utworzony przy użyciu tożsamości przypisanej przez system, należy najpierw pobrać identyfikator principalId przypisany do zasobu potoku.

Uruchom następujące polecenie, aby pobrać zasób potoku:

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

Z tych danych wyjściowych chcesz skopiować wartość w principalId polu.

Następnie uruchomisz następujące polecenie, aby nadać temu podmiotowi zabezpieczeń odpowiednie secret get uprawnienia zasad dostępu w usłudze Keyvault.

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

Tworzenie polecenia ImportPipeline za pomocą rozszerzenia interfejsu wiersza polecenia acrtransfer Az

Utwórz zasób ImportPipeline w docelowym rejestrze kontenerów przy użyciu rozszerzenia interfejsu wiersza polecenia acrtransfer Az. Domyślnie potok jest włączony, aby automatycznie utworzyć potok importuUruchom, gdy dołączony kontener konta magazynu otrzyma nowy obiekt blob artefaktu.

Utwórz potok importu bez opcji i tożsamości przypisanej przez system:

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

Utwórz potok importu z wszystkimi możliwymi opcjami, wyłączonym wyzwalaczem źródłowym i tożsamością przypisaną przez użytkownika:

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

Opcje importu

Właściwość options potoku importu obsługuje opcjonalne wartości logiczne. Zalecane są następujące wartości:

Parametr Wartość
options OverwriteTags — zastępowanie istniejących tagów docelowych
DeleteSourceBlobOnSuccess — usuwanie źródłowego obiektu blob magazynu po pomyślnym zaimportowaniu do rejestru docelowego
ContinueOnErrors — kontynuuj importowanie pozostałych artefaktów w rejestrze docelowym, jeśli importowanie jednego artefaktu zakończy się niepowodzeniem.

Przyznawanie dostępu zasad keyvault tożsamości ImportPipeline

Jeśli potok został utworzony przy użyciu tożsamości przypisanej przez użytkownika, po prostu nadaj temu użytkownikowi uprawnienia zasad dostępu tożsamości w secret get usłudze Keyvault.

Jeśli potok został utworzony przy użyciu tożsamości przypisanej przez system, należy najpierw pobrać identyfikator principalId przypisany do zasobu potoku.

Uruchom następujące polecenie, aby pobrać zasób potoku:

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

Z tych danych wyjściowych chcesz skopiować wartość w principalId polu.

Następnie uruchomisz następujące polecenie, aby nadać temu podmiotowi zabezpieczeń odpowiednie secret get zasady dostępu w usłudze keyvault.

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

Tworzenie elementu PipelineRun do eksportowania za pomocą rozszerzenia interfejsu wiersza polecenia acrtransfer Az

Utwórz zasób PipelineRun dla rejestru kontenerów przy użyciu rozszerzenia interfejsu wiersza polecenia acrtransfer Az. Ten zasób uruchamia utworzony wcześniej zasób ExportPipeline i eksportuje określone artefakty z rejestru kontenerów jako obiekt blob do kontenera konta magazynu.

Utwórz uruchomienie potoku eksportu:

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

Jeśli ponownie wdrożysz zasób PipelineRun z identycznymi właściwościami, musisz użyć flagi --force-redeploy.

Eksportowanie artefaktów może potrwać kilka minut. Po pomyślnym zakończeniu wdrażania zweryfikuj eksport artefaktu, wyświetlając wyeksportowany obiekt blob w kontenerze źródłowego konta magazynu. Na przykład uruchom polecenie az storage blob list :

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

Przenoszenie obiektu blob między domenami

W większości przypadków użycia użyjesz rozwiązania między domenami lub innej metody, aby przenieść obiekt blob z konta magazynu w domenie źródłowej (konto magazynu skojarzone z potokiem eksportu) do konta magazynu w domenie docelowej (konto magazynu skojarzone z potokiem importu). W tym momencie zakładamy, że obiekt blob dotarł do docelowego konta magazynu domeny skojarzonego z potokiem importu.

Wyzwalanie zasobu ImportPipeline

Jeśli nie użyto parametru --source-trigger-enabled False podczas tworzenia potoku importu, potok zostanie wyzwolony w ciągu 15 minut po nadejściu obiektu blob do kontenera konta magazynu. Importowanie artefaktów może potrwać kilka minut. Po pomyślnym zakończeniu importowania zweryfikuj importowanie artefaktów, wyświetlając listę tagów w repozytorium importowanych w docelowym rejestrze kontenerów. Na przykład uruchom polecenie az acr repository show-tags:

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

Uwaga

Wyzwalacz źródłowy importuje tylko obiekty blob, które mają czas ostatniej modyfikacji w ciągu ostatnich 60 dni. Jeśli zamierzasz użyć wyzwalacza źródłowego do importowania obiektów blob starszych, odśwież czas ostatniej modyfikacji obiektów blob, dodając do nich metadane obiektów blob lub importując je ręcznie utworzonymi przebiegami potoku.

Jeśli podczas tworzenia elementu ImportPipeline użyto parametru --source-trigger-enabled False , należy ręcznie utworzyć element PipelineRun, jak pokazano w poniższej sekcji.

Tworzenie elementu PipelineRun do importowania za pomocą rozszerzenia interfejsu wiersza polecenia acrtransfer Az

Utwórz zasób PipelineRun dla rejestru kontenerów przy użyciu rozszerzenia interfejsu wiersza polecenia acrtransfer Az. Ten zasób uruchamia utworzony wcześniej zasób ImportPipeline i importuje określone obiekty blob z konta magazynu do rejestru kontenerów.

Utwórz uruchomienie potoku importu:

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

Jeśli ponownie wdrożysz zasób PipelineRun z identycznymi właściwościami, musisz użyć flagi --force-redeploy.

Importowanie artefaktów może potrwać kilka minut. Po pomyślnym zakończeniu importowania zweryfikuj importowanie artefaktów, wyświetlając listę repozytoriów w docelowym rejestrze kontenerów. Na przykład uruchom polecenie az acr repository show-tags:

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

Usuwanie zasobów usługi ACR Transfer

Usuń element ExportPipeline:

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

Usuń element ImportPipeline:

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

Usuń zasób PipelineRun. Należy pamiętać, że nie powoduje to odwrócenia akcji podjętej przez element PipelineRun. Jest to bardziej podobne do usuwania dziennika potokuUruchom.

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

Rozwiązywanie problemów z transferem usługi ACR

Zobacz Rozwiązywanie problemów z transferem usługi ACR, aby uzyskać wskazówki dotyczące rozwiązywania problemów.

Następne kroki