Поделиться через


Передача ACR с помощью Az CLI

В этой статье показано, как использовать функцию передачи ACR с расширением acrtransfer Az CLI.

Завершите выполнение предварительных условий

Перед выполнением действий, описанных в этой статье, выполните предварительные требования, описанные здесь. Это означает, что:

  • У вас есть существующий реестр SKU "Премиум" в обоих облаках.
  • У вас есть контейнер учетной записи хранения в обоих облаках.
  • У вас есть существующее хранилище ключей с секретом, который содержит действительный маркер SAS с необходимыми разрешениями в обоих облаках.
  • У вас есть последняя версия Az CLI, установленная в обоих облаках.

Установка расширения Az CLI

В AzureCloud можно установить расширение с помощью следующей команды:

az extension add --name acrtransfer

Создание ExportPipeline с расширением acrtransfer Az CLI

Создайте ресурс ExportPipeline для реестра контейнеров AzureCloud с помощью расширения acrtransfer Az CLI.

Создайте экспортный конвейер без параметров и с системно назначенной идентификацией.

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.

Если вы создали конвейер с удостоверением, назначаемым системой, вам сначала необходимо получить идентификатор объекта, который система назначила вашему ресурсу конвейера.

Выполните следующую команду, чтобы получить ресурс конвейера:

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

Из этого вывода необходимо скопировать значение из поля principalId.

Затем выполните следующую команду, чтобы предоставить этому субъекту соответствующие secret get разрешения политики доступа в ваше хранилище ключей.

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

Создайте ImportPipeline с использованием расширения acrtransfer Az CLI

Создайте ресурс ImportPipeline в целевом реестре контейнеров с помощью расширения acrtransfer Az CLI. По умолчанию конвейер настроен на автоматическое создание Import PipelineRun, когда контейнер в подключенной учетной записи хранилища получает новый blob артефакта.

Создайте поток импорта без опций и идентификатор, назначаемый системой.

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 доступ к политике Key Vault

Если вы создали конвейер с пользовательским удостоверением, просто предоставьте этому пользовательскому удостоверению разрешения политики доступа в хранилище ключей secret get.

Если вы создали конвейер с удостоверением, назначаемым системой, сначала необходимо получить идентификатор субъекта (principalId), назначенный вашему ресурсу конвейера системой.

Выполните следующую команду, чтобы получить ресурс конвейера:

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

Из этих выходных данных необходимо скопировать значение в поле principalId.

Затем выполните следующую команду для предоставления этому субъекту соответствующей secret get политики доступа в хранилище ключей.

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

Создайте PipelineRun для экспорта с использованием расширения acrtransfer для az CLI.

Создайте ресурс PipelineRun для реестра контейнеров с помощью расширения acrtransfer Az CLI. Этот ресурс запускает ресурс 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.

Экспорт артефактов может занять несколько минут. После успешного завершения развертывания проверьте экспорт артефактов, убедившись, что экспортированный блоб присутствует в контейнере исходной учетной записи хранения. Например, выполните команду az storage blob list:

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

Передача BLOB между доменами

В большинстве случаев вы будете использовать решение для междоменного взаимодействия или другой метод для передачи вашего блоба из учетной записи хранения в исходном домене (учетная запись хранения, связанная с экспортным конвейером) в учетную запись хранения в целевом домене (учетная запись хранения, связанная с импортным конвейером). На этом этапе предполагается, что объект BLOB прибыл в целевую учетную запись хранилища в домене, связанную с импортной конвейерной линией.

Триггер ресурса ImportPipeline

Если вы не использовали параметр --source-trigger-enabled False при создании конвейера импорта, то конвейер запустится в течение 15 минут после поступления blob в контейнер учетной записи хранения. Импорт артефактов может занять несколько минут. После успешного завершения импорта проверьте импорт артефактов, перечислив теги в репозитории, который вы импортируете в целевом реестре контейнеров. Например, выполните az acr repository show-tags:

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

Замечание

Триггер источника будет импортировать только БЛОБы, измененные за последние 60 дней. Если вы планируете использовать Source Trigger для импорта BLOB-объектов, которые старше этого срока, обновите время их последнего изменения, добавив к ним метаданные, или импортируйте их с помощью вручную созданных запусков конвейера.

При использовании параметра --source-trigger-enabled False при создании ImportPipeline следует вручную создать PipelineRun, как показано в следующем разделе.

Создайте PipelineRun для импорта, используя расширение Azure CLI acrtransfer.

Создайте ресурс PipelineRun для реестра контейнеров с помощью расширения acrtransfer Az CLI. Этот ресурс запускает созданный вами ранее ресурс ImportPipeline и импортирует указанные блобы из вашей учетной записи хранения в реестр контейнеров.

Создайте конвейер импорта:

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 Transfer.

Дальнейшие шаги