Share via


使用 Az CLI 進行 ACR 傳輸

本文說明如何搭配 acrtransfer Az CLI 延伸模組使用 ACR 傳輸功能。

完成必要條件

請先完成此處所述的必要條件,再嘗試本文中的動作。 這表示:

  • 您在兩個雲端中都有現有的進階版 SKU 登錄。
  • 您有兩個雲端中現有的儲存體帳戶容器。
  • 您有一個具有秘密的現有 Keyvault,其中包含在兩個雲端中具有必要權限的有效 SAS 權杖。
  • 您已在兩個雲端中安裝最新版的 Az CLI。

安裝 Az CLI 延伸模組

在 AzureCloud 中,您可以使用下列命令來安裝延伸模組:

az extension add --name acrtransfer

在 AzureCloud 和其他雲端中,您可以直接從公用儲存體帳戶容器安裝 Blob。 Blob 裝載於 acrtransferext 儲存體帳戶、dist 容器與 acrtransfer-1.0.0-py2.py3-none-any.wh Blob 中。 視您所在的雲端而定,您可能需要變更儲存體 URI 尾碼。 下列項目會在 AzureCloud 中安裝:

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

使用 acrtransfer Az CLI 延伸模組建立 ExportPipeline

使用 acrtransfer Az CLI 延伸模組,為您的 AzureCloud 容器登錄建立 ExportPipeline 資源。

建立沒有選項和系統指派身分識別的匯出管道:

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

建立具有所有可能選項和使用者指派身分識別的匯出管道:

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

匯出選項

匯出管線的 options 屬性支援選擇性布林值。 以下為建議值:

參數
電子商務選項中 OverwriteBlobs - 覆寫現有的目標 blob
ContinueOnErrors - 如果某個成品匯出失敗,請繼續匯出來源登錄中的剩餘成品。

提供 ExportPipeline 身分識別金鑰保存庫原則存取權

如果您使用使用者指派的身分識別建立管道,只要在 keyvault 上授與此使用者指派的身分識別 secret get 存取原則權限即可。

如果您使用系統指派的身分識別建立管道,您必須先擷取系統指派給管道資源的 principalId。

執行下列命令以擷取管道資源:

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

在此輸出中,您會想要複製 principalId 欄位中的值。

然後,您將執行下列命令,為主體提供 keyvault 的適當 secret get 存取原則權限。

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

使用 acrtransfer Az CLI 延伸模組建立 ImportPipeline

使用 acrtransfer Az CLI 延伸模組,在目標容器登錄中建立 ImportPipeline 資源。 根據預設,管道會在連結的儲存體帳戶容器收到新的成品 Blob 時自動建立 Import PipelineRun。

建立沒有選項和系統指派身分識別的匯入管道:

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

建立匯入管道,其中包含所有可能的選項、已停用來源觸發程序和使用者指派的身分識別:

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

匯入選項

匯入管線的 options 屬性支援選擇性布林值。 以下為建議值:

參數
電子商務選項中 OverwriteTags - 覆寫現有的目標標籤
DeleteSourceBlobOnSuccess - 成功匯入目標登錄之後刪除來源儲存體 Blob
ContinueOnErrors - 如果某個成品匯入失敗,請繼續匯入目標登錄中的剩餘成品。

提供 ImportPipeline 身分識別金鑰保存庫原則存取權

如果您使用使用者指派的身分識別建立管道,只要在 keyvault 上授與此使用者指派的身分識別 secret get 存取原則權限即可。

如果您使用系統指派的身分識別建立管道,您必須先擷取系統指派給管道資源的 principalId。

執行下列命令以擷取管道資源:

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

在此輸出中,您會想要複製 principalId 欄位中的值。

然後,您將執行下列命令,為主體提供 keyvault 的適當 secret get 存取原則。

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

使用 acrtransfer Az CLI 延伸模組建立 PipelineRun 以匯出

使用 acrtransfer Az CLI 延伸模組,為您的容器登錄建立 PipelineRun 資源。 此資源會執行您先前建立的 ExportPipeline 資源,並將指定的成品以 Blob 的形式,從容器登錄匯出至儲存體帳戶容器。

建立匯出管道執行:

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

如果重新部署具有相同屬性的 PipelineRun 資源,您也必須使用 --force-redeploy 旗標。

成品匯出可能需要幾分鐘的時間。 部署成功完成時,請在來源儲存體帳戶容器中列出匯出的 Blob,以確認成品匯出。 例如,執行 az storage blob list 命令:

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

跨網域傳輸 Blob

在大部分的使用案例中,您現在將使用跨網域解決方案或其他方法,將 Blob 從來源網域中的儲存體帳戶 (與匯出管道相關聯的儲存體帳戶) 傳送至目標網域中的儲存體帳戶 (與匯入管道相關聯的儲存體帳戶)。 此時,我們將假設 Blob 已抵達與匯入管道相關聯的目標網域儲存體帳戶。

觸發 ImportPipeline 資源

如果您在建立匯入管道時並未使用 --source-trigger-enabled False 參數,則會在 Blob 抵達儲存體帳戶容器後的 15 分鐘內觸發管道。 成品匯入可能需要幾分鐘的時間。 當匯入成功完成時,請在目標容器登錄中列出所要匯出存放庫上的標籤,以確認成品匯入。 例如,執行 az acr repository show-tags

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

注意

來源觸發程序只會匯入過去 60 天內具有上次修改時間的 Blob。 如果您想要使用來源觸發程序,匯入早於該時間的 Blob,請將 Blob 中繼資料新增至 Blob,或使用手動建立的管線執行加以匯入,以重新整理 Blob 的上次修改時間。

如果您在建立 ImportPipeline 時使用了 --source-trigger-enabled False 參數,則必須手動建立 PipelineRun,如下一節所示。

使用 acrtransfer Az CLI 延伸模組建立 PipelineRun 以匯入

使用 acrtransfer Az CLI 延伸模組,為您的容器登錄建立 PipelineRun 資源。 此資源會執行您先前建立的 ImportPipeline 資源,並將指定的 Blob 從儲存體帳戶匯入容器登錄。

建立匯入管道執行:

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

如果重新部署具有相同屬性的 PipelineRun 資源,您也必須使用 --force-redeploy 旗標。

成品匯入可能需要幾分鐘的時間。 當匯入成功完成時,請在目標容器登錄中列出存放庫,以確認成品匯入。 例如,執行 az acr repository show-tags

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

刪除 ACR 傳輸資源

刪除 ExportPipeline:

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

刪除 ImportPipeline:

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

刪除 PipelineRun 資源。 請注意,這不會反轉 PipelineRun 所採取的動作。 這更像是刪除 PipelineRun 的記錄。

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

ACR 傳輸疑難排解

如需疑難排解指導,請檢視 ACR 傳輸疑難排解

下一步