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