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


Перенос ACR с помощью Azure CLI

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

Предварительные требования

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

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

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

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

az extension add --name acrtransfer

В AzureCloud и других облачных средах можно установить BLOB-объект непосредственно из общедоступного контейнера учетной записи хранения. BLOB-объект размещается в учетной записи хранения acrtransferext, в контейнере dist, в BLOB-объекте acrtransfer-1.0.0-py2.py3-none-any.wh. Может потребоваться изменить суффикс URI хранилища в зависимости от того, в каком облаке вы находитесь. В AzureCloud будут установлены следующие компоненты:

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

Создание 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 для конвейеров экспорта поддерживает дополнительные логические значения. Мы рекомендуем использовать перечисленные ниже.

Параметр Значение
options OverwriteBlobs — перезапись существующих целевых BLOB-объектов.
ContinueOnErrors — продолжение экспорта оставшихся в исходном реестре артефактов в случае сбоя экспорта одного артефакта.

Предоставление доступа к политике keyvault для удостоверения ExportPipeline

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

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

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

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

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

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

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

Создание ImportPipeline с помощью расширения acrtransfer Az CLI

Создайте ресурс ImportPipeline в целевом реестре контейнеров с помощью расширения Az CLI. По умолчанию конвейер поддерживает автоматическое создание запуска конвейера импорта, когда подключенный контейнер учетной записи хранения получает новый 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 для конвейера импорта поддерживает дополнительные логические значения. Мы рекомендуем использовать перечисленные ниже.

Параметр Значение
options OverwriteTags — перезапись существующих целевых тегов.
DeleteSourceBlobOnSuccess — удаление BLOB-объекта исходного хранилища после успешного импорта в целевой реестр.
ContinueOnErrors — продолжение импорта оставшихся в целевом реестре артефактов в случае сбоя импорта одного артефакта.

Предоставление доступа к политике keyvault для удостоверения ImportPipeline

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

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

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

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

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

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

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.

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

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

Перенос BLOB-объекта между доменами

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

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

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

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

Примечание.

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

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

Создание PipelineRun для импорта с помощью расширения acrtransfer Az CLI

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

Следующие шаги