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.json
zadejte 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.json
zadejte 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.json
zadejte 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.json
zadejte 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
- Zjistěte, jak blokovat vytváření kanálů exportu z registru kontejnerů s omezeným přístupem k síti.