Перенос 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.
Следующие шаги
- Узнайте, как заблокировать возможность создания конвейеров экспорта из ограниченного сетью реестра контейнеров.