Přenos ACR pomocí Az CLI

Tento článek ukazuje, jak používat funkci ACR Transfer s rozšířením Az CLI acrtransfer.

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.

Instalace rozšíření Az CLI

V AzureCloudu můžete rozšíření nainstalovat pomocí následujícího příkazu:

az extension add --name acrtransfer

V AzureCloudu a dalších cloudech můžete objekt blob nainstalovat přímo z kontejneru veřejného účtu úložiště. Objekt blob je hostovaný v acrtransferext účtu úložiště, dist kontejneru nebo acrtransfer-1.0.0-py2.py3-none-any.wh objektu blob. Možná budete muset změnit příponu identifikátoru URI úložiště v závislosti na tom, ve kterém cloudu se nacházíte. V AzureCloudu se nainstaluje následující:

az extension add --source https://acrtransferext.blob.core.windows.net/dist/acrtransfer-1.0.0-py2.py3-none-any.whl

Vytvoření ExportPipeline pomocí rozšíření Az CLI pro acrtransfer

Vytvořte prostředek ExportPipeline pro registr kontejneru AzureCloud pomocí rozšíření Az CLI acrtransfer.

Vytvořte kanál exportu bez možností a identitu přiřazenou systémem:

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

Vytvořte kanál exportu se všemi možnými možnostmi a identitou přiřazenou uživatelem:

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

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.

Udělení přístupu k zásadám služby KeyVault identity ExportPipeline

Pokud jste kanál vytvořili s identitou přiřazenou uživatelem, jednoduše udělte této zásadě přístupu identit secret get přiřazené uživatelem oprávnění ke službě keyvault.

Pokud jste vytvořili kanál s identitou přiřazenou systémem, budete nejprve muset načíst id objektu zabezpečení, které systém přiřadil vašemu prostředku kanálu.

Spuštěním následujícího příkazu načtěte prostředek kanálu:

az acr export-pipeline show --resource-group $MyRG --registry $MyReg --name $MyPipeline

Z tohoto výstupu principalId budete chtít zkopírovat hodnotu v poli.

Potom spustíte následující příkaz, který tomuto objektu zabezpečení udělí příslušná secret get oprávnění zásad přístupu ke službě keyvault.

az keyvault set-policy --name $MyKeyvault --secret-permissions get --object-id $MyPrincipalID

Vytvoření ImportPipeline s rozšířením Az CLI acrtransfer

Vytvořte prostředek ImportPipeline v cílovém registru kontejneru pomocí rozšíření Az CLI acrtransfer. Ve výchozím nastavení je kanál povolený tak, aby automaticky vytvořil Import PipelineRun, když připojený kontejner účtu úložiště obdrží nový objekt blob artefaktu.

Vytvořte kanál importu bez možností a identitu přiřazenou systémem:

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

Vytvořte kanál importu se všemi možnými možnostmi, zakázaným triggerem zdroje a identitou přiřazenou uživatelem:

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

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.

Udělení přístupu k zásadám služby KeyVault identity ImportPipeline

Pokud jste kanál vytvořili s identitou přiřazenou uživatelem, jednoduše udělte této zásadě přístupu identit secret get přiřazené uživatelem oprávnění ke službě keyvault.

Pokud jste vytvořili kanál s identitou přiřazenou systémem, budete nejprve muset načíst id objektu zabezpečení, které systém přiřadil vašemu prostředku kanálu.

Spuštěním následujícího příkazu načtěte prostředek kanálu:

az acr import-pipeline show --resource-group $MyRG --registry $MyReg --name $MyPipeline

Z tohoto výstupu principalId budete chtít zkopírovat hodnotu v poli.

Potom spustíte následující příkaz, který tomuto objektu zabezpečení udělí odpovídající secret get zásady přístupu ve službě keyvault.

az keyvault set-policy --name $MyKeyvault --secret-permissions get --object-id $MyPrincipalID

Vytvoření pipelineRunu pro export pomocí rozšíření Az CLI acrtransfer

Vytvořte prostředek PipelineRun pro registr kontejneru pomocí rozšíření Az CLI acrtransfer. Tento prostředek spustí prostředek ExportPipeline, který jste vytvořili dříve, a exportuje zadané artefakty z registru kontejneru jako objekt blob do kontejneru účtu úložiště.

Vytvoření exportu spuštění kanálu:

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

Pokud znovu nasadíte prostředek PipelineRun se stejnými vlastnostmi, musíte použít příznak --force-redeploy.

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 zdrojového účtu úložiště. Spusťte například příkaz az storage blob list :

az storage blob list --account-name $MyStorageAccount --container $MyContainer --output table

Přenos objektu blob mezi doménou

Ve většině případů použití teď použijete řešení křížové domény nebo jinou metodu k přenosu objektu blob z účtu úložiště ve zdrojové doméně (účet úložiště přidružený k vašemu exportnímu kanálu) do účtu úložiště ve vaší cílové doméně (účet úložiště přidružený k vašemu importnímu kanálu). V tomto okamžiku budeme předpokládat, že objekt blob přišel do cílového účtu úložiště domény přidruženého k vašemu kanálu importu.

Aktivace prostředku ImportPipeline

Pokud jste při vytváření kanálu importu nepoužili --source-trigger-enabled False parametr, kanál se aktivuje do 15 minut od doručení objektu blob do kontejneru úč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 značek v úložišti, které importujete do cílového registru kontejneru. Například spusťte příkaz az acr repository show-tags:

az acr repository show-tags --name $MyRegistry --repository $MyRepository

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 při vytváření importPipeline použili --source-trigger-enabled False parametr, budete muset ručně vytvořit PipelineRun, jak je znázorněno v následující části.

Vytvoření pipelineRunu pro import pomocí rozšíření Az CLI pro acrtransfer

Vytvořte prostředek PipelineRun pro registr kontejneru pomocí rozšíření Az CLI acrtransfer. Tento prostředek spustí prostředek ImportPipeline, který jste vytvořili dříve, a importuje zadané objekty blob z vašeho účtu úložiště do registru kontejneru.

Vytvoření spuštění kanálu importu:

az acr pipeline-run create \
--resource-group $MyRG \
--registry $MyReg \
--pipeline $MyPipeline \
--name $MyPipelineRun \
--pipeline-type import \
--storage-blob $MyBlob \
--force-redeploy

Pokud znovu nasadíte prostředek PipelineRun se stejnými vlastnostmi, musíte použít příznak --force-redeploy.

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 show-tags:

az acr repository show-tags --name $MyRegistry --repository $MyRepository

Odstranění prostředků ACR Transfer

Odstraňte exportpipeline:

az acr export-pipeline delete --resource-group $MyRG --registry $MyReg --name $MyPipeline

Odstraňte importpipeline:

az acr import-pipeline delete --resource-group $MyRG --registry $MyReg --name $MyPipeline

Odstranění prostředku PipelineRun Všimněte si, že se tím nevrátí akce provedené spuštěním kanálu. To se podobá odstranění protokolu Spuštění kanálu.

az acr pipeline-run delete --resource-group $MyRG --registry $MyReg --name $MyPipelineRun

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

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

Další kroky