Udostępnij za pośrednictwem


Transfer ACR z szablonami usługi ARM

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.

Ważne

Usługa ACR Transfer obsługuje artefakty z limitami rozmiaru warstwy do 8 GB ze względu na ograniczenia techniczne.

Rozważ użycie rozszerzenia interfejsu wiersza polecenia Az

W przypadku większości przypadków użycia nonautomated zalecamy użycie rozszerzenia interfejsu wiersza polecenia Az, jeśli to możliwe. Dokumentację rozszerzenia interfejsu wiersza polecenia az można wyświetlić tutaj.

Tworzenie elementu ExportPipeline za pomocą usługi Resource Manager

Utwórz zasób ExportPipeline dla źródłowego rejestru kontenerów przy użyciu wdrożenia szablonu usługi Azure Resource Manager.

Skopiuj pliki szablonów usługi Resource Manager ExportPipeline do folderu lokalnego.

Wprowadź następujące wartości parametrów w pliku azuredeploy.parameters.json:

Parametr Wartość
registryName Nazwa źródłowego rejestru kontenerów
exportPipelineName Nazwa wybrana dla potoku eksportu
targetUri Identyfikator URI kontenera magazynu w środowisku źródłowym (element docelowy potoku eksportu).
Przykład: https://sourcestorage.blob.core.windows.net/transfer
keyVaultName Nazwa źródłowego magazynu kluczy
sasTokenSecretName Nazwa wpisu tajnego tokenu SYGNATURy dostępu współdzielonego w źródłowym magazynie kluczy
Przykład: acrexportsas

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.

Tworzenie zasobu

Uruchom polecenie az deployment group create , aby utworzyć zasób o nazwie exportPipeline , jak pokazano w poniższych przykładach. Domyślnie przy pierwszej opcji przykładowy szablon włącza tożsamość przypisaną przez system w zasobie ExportPipeline.

Przy użyciu drugiej opcji możesz podać zasób z tożsamością przypisaną przez użytkownika. (Nie pokazano tworzenia tożsamości przypisanej przez użytkownika).

W przypadku każdej z opcji szablon konfiguruje tożsamość w celu uzyskania dostępu do tokenu SAS w magazynie kluczy eksportu.

Opcja 1. Tworzenie zasobu i włączanie tożsamości przypisanej przez system

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

Opcja 2. Tworzenie zasobu i podawanie tożsamości przypisanej przez użytkownika

W tym poleceniu podaj identyfikator zasobu tożsamości przypisanej przez użytkownika jako dodatkowy parametr.

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"

W danych wyjściowych polecenia zanotuj identyfikator zasobu (id) potoku. Tę wartość można przechowywać w zmiennej środowiskowej do późniejszego użycia, uruchamiając polecenie az deployment group show. Na przykład:

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

Tworzenie elementu ImportPipeline za pomocą usługi Resource Manager

Utwórz zasób ImportPipeline w docelowym rejestrze kontenerów przy użyciu wdrożenia szablonu usługi Azure Resource Manager. Domyślnie potok jest włączony do automatycznego importowania, gdy konto magazynu w środowisku docelowym ma artefaktowy obiekt blob.

Skopiuj pliki szablonów usługi Resource Manager ImportPipeline do folderu lokalnego.

Wprowadź następujące wartości parametrów w pliku azuredeploy.parameters.json:

Parametr Wartość
registryName Nazwa docelowego rejestru kontenerów
importPipelineName Nazwa wybrana dla potoku importu
sourceUri Identyfikator URI kontenera magazynu w środowisku docelowym (źródło potoku importu).
Przykład: https://targetstorage.blob.core.windows.net/transfer
keyVaultName Nazwa docelowego magazynu kluczy
sasTokenSecretName Nazwa wpisu tajnego tokenu SAS w docelowym magazynie kluczy
Przykład: acr importas

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.

Tworzenie zasobu

Uruchom polecenie az deployment group create , aby utworzyć zasób o nazwie importPipeline , jak pokazano w poniższych przykładach. Domyślnie przy pierwszej opcji przykładowy szablon włącza tożsamość przypisaną przez system w zasobie ImportPipeline.

Przy użyciu drugiej opcji możesz podać zasób z tożsamością przypisaną przez użytkownika. (Nie pokazano tworzenia tożsamości przypisanej przez użytkownika).

W przypadku każdej opcji szablon konfiguruje tożsamość w celu uzyskania dostępu do tokenu SAS w magazynie kluczy importu.

Opcja 1. Tworzenie zasobu i włączanie tożsamości przypisanej przez system

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

Opcja 2. Tworzenie zasobu i podawanie tożsamości przypisanej przez użytkownika

W tym poleceniu podaj identyfikator zasobu tożsamości przypisanej przez użytkownika jako dodatkowy parametr.

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"

Jeśli planujesz ręcznie uruchomić importowanie, zanotuj identyfikator zasobu (id) potoku. Tę wartość można przechowywać w zmiennej środowiskowej do późniejszego użycia, uruchamiając polecenie az deployment group show . Na przykład:

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

Tworzenie elementu PipelineRun do eksportowania za pomocą usługi Resource Manager

Utwórz zasób PipelineRun dla źródłowego rejestru kontenerów przy użyciu wdrożenia szablonu usługi Azure Resource Manager. Ten zasób uruchamia utworzony wcześniej zasób ExportPipeline i eksportuje określone artefakty z rejestru kontenerów jako obiekt blob do źródłowego konta magazynu.

Skopiuj pliki szablonu PipelineRun Resource Manager do folderu lokalnego.

Wprowadź następujące wartości parametrów w pliku azuredeploy.parameters.json:

Parametr Wartość
registryName Nazwa źródłowego rejestru kontenerów
pipelineRunName Nazwa wybrana dla przebiegu
pipelineResourceId Identyfikator zasobu potoku eksportu.
Przykład: /subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.ContainerRegistry/registries/<sourceRegistryName>/exportPipelines/myExportPipeline
targetName Nazwa wybrana dla obiektu blob artefaktów wyeksportowanego na źródłowe konto magazynu, na przykład myblob
Artefakty Tablica artefaktów źródłowych do transferu, jako tagi lub skróty manifestu
Przykład: [samples/hello-world:v1", "samples/nginx:v1" , "myrepository@sha256:0a2e01852872..."]

Jeśli ponownie wdrożysz zasób PipelineRun z identycznymi właściwościami, należy również użyć właściwości forceUpdateTag .

Uruchom polecenie az deployment group create , aby utworzyć zasób PipelineRun. W poniższym przykładzie nazwa to exportPipelineRun wdrożenia.

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

Do późniejszego użycia zapisz identyfikator zasobu przebiegu potoku w zmiennej środowiskowej:

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

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 transferu źródłowego konta magazynu. Na przykład uruchom polecenie az storage blob list :

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

Transfer obiektu blob (opcjonalnie)

Użyj narzędzia AzCopy lub innych metod do transferu danych obiektów blob ze źródłowego konta magazynu do docelowego konta magazynu.

Na przykład następujące azcopy copy polecenie kopiuje obiekt myblob z kontenera transferu na koncie źródłowym do kontenera transferu na koncie docelowym. Jeśli obiekt blob istnieje na koncie docelowym, zostanie zastąpiony. Uwierzytelnianie używa tokenów SAS z odpowiednimi uprawnieniami dla kontenerów źródłowych i docelowych. (Kroki tworzenia tokenów nie są wyświetlane).

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

Wyzwalanie zasobu ImportPipeline

Jeśli włączono parametr ImportPipeline (wartość domyślna), potok zostanie wyzwolony sourceTriggerStatus po skopiowaniu obiektu blob do docelowego konta magazynu. 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 list:

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

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 nie włączono sourceTriggerStatus parametru potoku importu, uruchom zasób ImportPipeline ręcznie, jak pokazano w poniższej sekcji.

Tworzenie elementu PipelineRun do importowania za pomocą usługi Resource Manager (opcjonalnie)

Możesz również użyć zasobu PipelineRun, aby wyzwolić element ImportPipeline na potrzeby importowania artefaktów do docelowego rejestru kontenerów.

Skopiuj pliki szablonu PipelineRun Resource Manager do folderu lokalnego.

Wprowadź następujące wartości parametrów w pliku azuredeploy.parameters.json:

Parametr Wartość
registryName Nazwa docelowego rejestru kontenerów
pipelineRunName Nazwa wybrana dla przebiegu
pipelineResourceId Identyfikator zasobu potoku importu.
Przykład: /subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.ContainerRegistry/registries/<sourceRegistryName>/importPipelines/myImportPipeline
sourceName Nazwa istniejącego obiektu blob dla wyeksportowanych artefaktów na koncie magazynu, na przykład myblob

Jeśli ponownie wdrożysz zasób PipelineRun z identycznymi właściwościami, należy również użyć właściwości forceUpdateTag .

Uruchom polecenie az deployment group create , aby uruchomić zasób.

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

Do późniejszego użycia zapisz identyfikator zasobu przebiegu potoku w zmiennej środowiskowej:

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

Po pomyślnym zakończeniu wdrażania zweryfikuj importowanie artefaktów, wyświetlając listę repozytoriów w docelowym rejestrze kontenerów. Na przykład uruchom polecenie az acr repository list:

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

Ponowne wdrażanie zasobu PipelineRun

Jeśli ponownie wdrożysz zasób PipelineRun o identycznych właściwościach, musisz użyć właściwości forceUpdateTag. Ta właściwość wskazuje, że zasób PipelineRun powinien zostać ponownie utworzony, nawet jeśli konfiguracja nie uległa zmianie. Upewnij się, że element forceUpdateTag jest inny za każdym razem, gdy ponownie wdrożysz zasób PipelineRun. Poniższy przykład ponownie utworzy element PipelineRun na potrzeby eksportu. Bieżąca data/godzina służy do ustawiania elementu forceUpdateTag, co gwarantuje, że ta właściwość jest zawsze unikatowa.

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

Usuwanie zasobów potoku

Poniższe przykładowe polecenia używają polecenia az resource delete , aby usunąć zasoby potoku utworzone w tym artykule. Identyfikatory zasobów były wcześniej przechowywane w zmiennych środowiskowych.

# 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

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