使用 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 傳輸疑難排解。
下一步
- 瞭解如何防止從網路限制容器登錄建立匯出管線。