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
- Dowiedz się, jak zablokować tworzenie potoków eksportu z rejestru kontenerów z ograniczeniami sieci.