Sdílet prostřednictvím


Přenos ACR pomocí šablon ARM

Dokončení požadavků

Před pokusem o akce v tomto článku dokončete požadavky uvedené zde . To znamená, že:

  • V obou cloudech máte existující registr skladové položky Premium.
  • V obou cloudech máte existující kontejner účtu úložiště.
  • Máte existující keyvault s tajným kódem obsahujícím platný token SAS s potřebnými oprávněními v obou cloudech.
  • V obou cloudech máte nainstalovanou nejnovější verzi Az CLI.

Důležité

ACR Transfer podporuje artefakty s omezeními velikosti vrstvy na 8 GB kvůli technickým omezením.

Zvažte použití rozšíření Az CLI.

Pro většinu neautomatovaných případů použití doporučujeme použít rozšíření Az CLI, pokud je to možné. Dokumentaci k rozšíření Az CLI najdete tady.

Vytvoření exportupipeline pomocí Resource Manageru

Vytvořte prostředek ExportPipeline pro zdrojový registr kontejneru pomocí nasazení šablony Azure Resource Manageru.

Zkopírujte soubory šablony ExportPipeline Resource Manageru do místní složky.

Do souboru azuredeploy.parameters.jsonzadejte následující hodnoty parametrů:

Parametr Hodnota
název_registru Název zdrojového registru kontejneru
exportPipelineName Název, který zvolíte pro kanál exportu
Targeturi Identifikátor URI kontejneru úložiště ve zdrojovém prostředí (cíl kanálu exportu).
Příklad: https://sourcestorage.blob.core.windows.net/transfer
keyVaultName Název zdrojového trezoru klíčů
sasTokenSecretName Název tajného kódu tokenu SAS v trezoru zdrojového klíče
Příklad: acrexportsas

Možnosti exportu

options Vlastnost pro export kanálů podporuje volitelné logické hodnoty. Doporučuje se následující hodnoty:

Parametr Hodnota
options PřepsáníBlobs – Přepsání existujících cílových objektů blob
ContinueOnErrors – Pokud selže export jednoho artefaktu, pokračujte v exportu zbývajících artefaktů ve zdrojovém registru.

Vytvoření prostředku

Spuštěním příkazu az deployment group create vytvořte prostředek s názvem exportPipeline , jak je znázorněno v následujících příkladech. Ve výchozím nastavení s první možností umožňuje ukázková šablona v prostředku ExportPipeline identitu přiřazenou systémem.

Druhou možností je zadat prostředek s identitou přiřazenou uživatelem. (Vytvoření identity přiřazené uživatelem se nezobrazuje.)

V obou případech šablona nakonfiguruje identitu pro přístup k tokenu SAS v trezoru klíčů exportu.

Možnost 1: Vytvoření prostředku a povolení identity přiřazené systémem

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

Možnost 2: Vytvoření prostředku a poskytnutí identity přiřazené uživatelem

V tomto příkazu zadejte ID prostředku identity přiřazené uživatelem jako další 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"

Ve výstupu příkazu si poznamenejte ID prostředku (id) kanálu. Tuto hodnotu můžete uložit do proměnné prostředí pro pozdější použití spuštěním příkazu az deployment group show. Příklad:

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

Vytvoření importuPipeline pomocí Resource Manageru

Vytvořte prostředek ImportPipeline v cílovém registru kontejneru pomocí nasazení šablony Azure Resource Manageru. Ve výchozím nastavení je kanál povolený k automatickému importu, pokud má účet úložiště v cílovém prostředí objekt blob artefaktu.

Zkopírujte soubory šablony ImportPipeline Resource Manageru do místní složky.

Do souboru azuredeploy.parameters.jsonzadejte následující hodnoty parametrů:

Parametr Hodnota
název_registru Název cílového registru kontejneru
importPipelineName Název, který zvolíte pro kanál importu
Sourceuri Identifikátor URI kontejneru úložiště ve vašem cílovém prostředí (zdroj pro kanál importu)
Příklad: https://targetstorage.blob.core.windows.net/transfer
keyVaultName Název cílového trezoru klíčů
sasTokenSecretName Název tajného kódu tokenu SAS v cílovém trezoru klíčů
Příklad: acr importsas

Možnosti importu

options Vlastnost kanálu importu podporuje volitelné logické hodnoty. Doporučuje se následující hodnoty:

Parametr Hodnota
options PřepsáníTags – Přepsání existujících cílových značek
DeleteSourceBlobOnSuccess – Odstranění objektu blob zdrojového úložiště po úspěšném importu do cílového registru
ContinueOnErrors – Pokud selže import jednoho artefaktu, pokračujte v importu zbývajících artefaktů v cílovém registru.

Vytvoření prostředku

Spuštěním příkazu az deployment group create vytvořte prostředek s názvem importPipeline , jak je znázorněno v následujících příkladech. Ve výchozím nastavení s první možností povolí ukázková šablona identitu přiřazenou systémem v prostředku ImportPipeline.

Druhou možností je zadat prostředek s identitou přiřazenou uživatelem. (Vytvoření identity přiřazené uživatelem se nezobrazuje.)

V obou případech šablona nakonfiguruje identitu pro přístup k tokenu SAS v trezoru klíčů importu.

Možnost 1: Vytvoření prostředku a povolení identity přiřazené systémem

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

Možnost 2: Vytvoření prostředku a poskytnutí identity přiřazené uživatelem

V tomto příkazu zadejte ID prostředku identity přiřazené uživatelem jako další 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"

Pokud plánujete spustit import ručně, poznamenejte si ID prostředku (id) kanálu. Tuto hodnotu můžete uložit do proměnné prostředí pro pozdější použití spuštěním příkazu az deployment group show . Příklad:

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

Vytvoření spuštění kanálu pro export pomocí Resource Manageru

Vytvořte prostředek PipelineRun pro zdrojový registr kontejneru pomocí nasazení šablony Azure Resource Manageru. Tento prostředek spustí dříve vytvořený prostředek ExportPipeline a exportuje zadané artefakty z registru kontejneru jako objekt blob do zdrojového účtu úložiště.

Zkopírujte soubory šablon Resource Manageru PipelineRun do místní složky.

Do souboru azuredeploy.parameters.jsonzadejte následující hodnoty parametrů:

Parametr Hodnota
název_registru Název zdrojového registru kontejneru
pipelineRunName Název, který zvolíte pro spuštění
pipelineResourceId ID prostředku kanálu exportu
Příklad: /subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.ContainerRegistry/registries/<sourceRegistryName>/exportPipelines/myExportPipeline
Targetname Název, který zvolíte pro objekt blob artefaktů exportovaný do zdrojového účtu úložiště, například myblob
Artefakty Pole zdrojových artefaktů, které se mají přenést, jako značky nebo přehledy manifestu
Příklad: [samples/hello-world:v1", "samples/nginx:v1" , "myrepository@sha256:0a2e01852872..."]

Pokud znovu nasadíte prostředek PipelineRun se stejnými vlastnostmi, musíte také použít forceUpdateTag vlastnost.

Spuštěním příkazu az deployment group create vytvořte prostředek PipelineRun. Následující příklad pojmenuje exportPipelineRun nasazení.

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

Pro pozdější použití uložte ID prostředku spuštění kanálu do proměnné prostředí:

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

Export artefaktů může trvat několik minut. Po úspěšném dokončení nasazení ověřte export artefaktu výpisem exportovaného objektu blob v kontejneru přenosu zdrojového účtu úložiště. Spusťte například příkaz az storage blob list :

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

Přenos objektu blob (volitelné)

K přenosu dat objektů blob ze zdrojového účtu úložiště do cílového účtu úložiště použijte nástroj AzCopy nebo jiné metody.

Například následující azcopy copy příkaz zkopíruje myblob z kontejneru přenosu ve zdrojovém účtu do kontejneru pro přenos v cílovém účtu. Pokud objekt blob v cílovém účtu existuje, přepíše se. Ověřování používá tokeny SAS s příslušnými oprávněními pro zdrojové a cílové kontejnery. (Postup vytvoření tokenů se nezobrazuje.)

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

Aktivace prostředku ImportPipeline

Pokud jste povolili sourceTriggerStatus parametr ImportPipeline (výchozí hodnota), kanál se aktivuje po zkopírování objektu blob do cílového účtu úložiště. Import artefaktů může trvat několik minut. Po úspěšném dokončení importu ověřte import artefaktů výpisem úložišť v cílovém registru kontejneru. Například spusťte příkaz az acr repository list:

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

Poznámka:

Trigger zdroje bude importovat pouze objekty blob, které mají čas poslední změny za posledních 60 dnů. Pokud máte v úmyslu použít trigger zdroje k importu objektů blob starších, aktualizujte čas poslední změny objektů blob přidáním metadat objektů blob nebo je naimportujte pomocí ručně vytvořených spuštění kanálu.

Pokud jste nepovolili sourceTriggerStatus parametr kanálu importu, spusťte prostředek ImportPipeline ručně, jak je znázorněno v následující části.

Vytvoření pipelineRunu pro import pomocí Resource Manageru (volitelné)

Můžete také použít prostředek PipelineRun k aktivaci ImportPipeline pro import artefaktů do cílového registru kontejneru.

Zkopírujte soubory šablon Resource Manageru PipelineRun do místní složky.

Do souboru azuredeploy.parameters.jsonzadejte následující hodnoty parametrů:

Parametr Hodnota
název_registru Název cílového registru kontejneru
pipelineRunName Název, který zvolíte pro spuštění
pipelineResourceId ID prostředku kanálu importu
Příklad: /subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.ContainerRegistry/registries/<sourceRegistryName>/importPipelines/myImportPipeline
sourceName Název existujícího objektu blob pro exportované artefakty ve vašem účtu úložiště, například myblob

Pokud znovu nasadíte prostředek PipelineRun se stejnými vlastnostmi, musíte také použít forceUpdateTag vlastnost.

Spuštěním příkazu az deployment group create spusťte prostředek.

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

Pro pozdější použití uložte ID prostředku spuštění kanálu do proměnné prostředí:

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

Po úspěšném dokončení nasazení ověřte import artefaktů výpisem úložišť v cílovém registru kontejneru. Například spusťte příkaz az acr repository list:

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

Opětovné nasazení prostředku PipelineRun

Pokud opětovné nasazení prostředku PipelineRun se stejnými vlastnostmi, musíte využít forceUpdateTag vlastnost. Tato vlastnost označuje, že prostředek PipelineRun by se měl znovu vytvořit i v případě, že se konfigurace nezměnila. Při opětovném nasazení prostředku PipelineRun se ujistěte, že se forceUpdateTag liší. Následující příklad znovu vytvoří PipelineRun pro export. Aktuální datetime slouží k nastavení forceUpdateTag, čímž se zajistí, že tato vlastnost je vždy jedinečná.

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

Odstranění prostředků kanálu

Následující ukázkové příkazy používají příkazy az resource delete k odstranění prostředků kanálu vytvořených v tomto článku. ID prostředků byla dříve uložena v proměnných prostředí.

# 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

Řešení potíží s ACR Transferem

Pokyny k řešení potíží najdete v řešení potíží s přenosem ACR.

Další kroky