Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Передача ACR позволяет переносить образы контейнеров и артефакты OCI между реестрами контейнеров Azure, используя промежуточную учетную запись хранения, что делает её идеальной для изолированных и кросс-облачных сценариев. Общие сведения о функции см. в разделе "Передача артефактов в другой реестр".
Полные предварительные требования
Выполните предварительные требования, описанные в предварительных требованиях для передачи ACR , прежде чем пытаться выполнить действия в этой статье. Это означает следующее.
- У вас есть существующий реестр SKU "Премиум" в обоих облаках.
- У вас есть контейнер учетной записи хранения в обоих облаках.
- Если используется режим доступа к хранилищу маркеров SAS , убедитесь, что у вас есть хранилище ключей с секретом, содержащим допустимый маркер SAS с необходимыми разрешениями в обоих облаках.
- При использовании режима доступа к хранилищу управляемых удостоверений убедитесь, что управляемое удостоверение конвейера имеет соответствующую роль RBAC (например
Storage Blob Data Contributor, ) в учетной записи хранения. Для этого требуется версия2025-06-01-previewAPI или более поздняя. - У вас есть последняя версия Az CLI, установленная в обоих облаках.
Передача ACR поддерживает два режима доступа к хранилищу: токен SAS и управляемая идентификация. Необходимо указать, какой режим следует использовать через свойство storageAccessMode в вашем шаблоне ARM. Подробное сравнение см. в разделе "Режимы доступа к хранилищу".
Это важно
ACR Transfer поддерживает артефакты с размером слоя до 8 ГБ из-за технических ограничений.
Рассмотрите возможность использования расширения Az CLI
Для большинства неавтомированных вариантов использования рекомендуется использовать расширение Az CLI, если это возможно. Здесь можно просмотреть документацию по расширению Az CLI.
Создание exportPipeline с помощью Resource Manager
Создайте ресурс ExportPipeline для исходного реестра контейнеров с помощью развертывания шаблона Azure Resource Manager.
Скопируйте файлы шаблонов ExportPipeline Resource Manager в локальную папку.
Введите следующие значения параметров в файле azuredeploy.parameters.json:
| Параметр | Ценность |
|---|---|
| registryName | Имя исходного реестра контейнеров |
| exportPipelineName | Имя, выбранное для конвейера экспорта |
| targetUri | URI контейнера хранилища в исходной среде (целевой объект конвейера экспорта). Пример: https://sourcestorage.blob.core.windows.net/transfer |
| ИмяХранилищаКлючей | Имя исходного хранилища ключей. Требуется при использовании режима токена SAS; при использовании режима управляемой идентичности можно указать любое уже существующее имя хранилища ключей (шаблон условно пропускает создание политики доступа хранилища ключей). |
| sasTokenSecretName | Имя секрета токена SAS в исходном Key Vault. Требуется при использовании режима SAS-токена; при использовании режима управляемой идентичности можно указать любое значение-заполнитель. Пример: acrexportsas |
| режимДоступаКХранилищу | Режим доступа к хранилищу для конвейера. Укажите SasToken или ManagedIdentity. |
Параметры экспорта
Свойство options для конвейеров экспорта поддерживает необязательные булевые значения. Рекомендуются следующие значения.
| Параметр | Ценность |
|---|---|
| options | OverwriteBlobs — перезапись существующих целевых BLOB-объектов. ContinueOnErrors — продолжение экспорта оставшихся в исходном реестре артефактов в случае сбоя экспорта одного артефакта. |
Создание ресурса
Запустите az deployment group create , чтобы создать ресурс с именем exportPipeline , как показано в следующих примерах. Задайте значение storageAccessMode в azuredeploy.parameters.json перед развертыванием.
По умолчанию пример шаблона включает системно назначенное удостоверение в ресурсе ExportPipeline. Вы также можете предоставить пользовательскую назначенную идентификацию (см. Опцию 2).
Вариант 1. Создание ресурса с помощью назначаемого системой удостоверения
az deployment group create \
--resource-group $SOURCE_RG \
--template-file azuredeploy.json \
--name exportPipeline \
--parameters azuredeploy.parameters.json
Вариант 2. Создание ресурса с помощью удостоверения, назначаемого пользователем
Укажите идентификатор ресурса удостоверения, назначенного пользователем, в данной команде в качестве дополнительного параметра.
az deployment group create \
--resource-group $SOURCE_RG \
--template-file azuredeploy.json \
--name exportPipeline \
--parameters azuredeploy.parameters.json \
--parameters userAssignedIdentity="/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myUserAssignedIdentity"
В выходных данных команды запишите идентификатор ресурса (id) конвейера. Это значение можно сохранить в переменной среды для последующего использования, выполнив команду az deployment group show. Рассмотрим пример.
EXPORT_RES_ID=$(az deployment group show \
--resource-group $SOURCE_RG \
--name exportPipeline \
--query 'properties.outputResources[1].id' \
--output tsv)
Создание ImportPipeline с помощью Resource Manager
Создайте ресурс ImportPipeline в целевом реестре контейнеров с помощью развертывания шаблона Azure Resource Manager. По умолчанию конвейер настроен для автоматического импорта, когда учетная запись хранения в целевой среде содержит blob артефакта.
Скопируйте файлы шаблонов ImportPipeline Resource Manager в локальную папку.
Введите следующие значения параметров в файле azuredeploy.parameters.json:
| Параметр | Ценность |
|---|---|
| registryName | Имя целевого реестра контейнеров |
| importPipelineName | Имя, выбранное для конвейера импорта |
| sourceUri | URI контейнера хранилища в целевой платформе (источник для потока импорта). Пример: https://targetstorage.blob.core.windows.net/transfer |
| ИмяХранилищаКлючей | Имя целевого хранилища ключей. Требуется при использовании режима токена SAS; при использовании режима управляемой идентичности можно указать любое уже существующее имя хранилища ключей (шаблон условно пропускает создание политики доступа хранилища ключей). |
| sasTokenSecretName | Имя секрета SAS-токена в целевом Key Vault. Требуется при использовании режима SAS-токена; при использовании режима управляемой идентичности можно указать любое значение-заполнитель. Пример: acrimportsas |
| режимДоступаКХранилищу | Режим доступа к хранилищу для конвейера. Укажите SasToken или ManagedIdentity. |
Параметры импорта
Свойство options для конвейера импорта поддерживает дополнительные логические значения. Рекомендуются следующие значения.
| Параметр | Ценность |
|---|---|
| options | OverwriteTags — перезапись существующих целевых тегов. DeleteSourceBlobOnSuccess — удаление BLOB-объекта исходного хранилища после успешного импорта в целевой реестр. ContinueOnErrors — продолжение импорта оставшихся в целевом реестре артефактов в случае сбоя импорта одного артефакта. |
Создание ресурса
Запустите az deployment group create , чтобы создать ресурс с именем importPipeline , как показано в следующих примерах. Задайте значение storageAccessMode в azuredeploy.parameters.json перед развертыванием.
По умолчанию пример шаблона включает назначаемое системой удостоверение в ресурсе ImportPipeline. Вы также можете предоставить пользовательскую назначенную идентификацию (см. Опцию 2).
Вариант 1. Создание ресурса с помощью назначаемого системой удостоверения
az deployment group create \
--resource-group $TARGET_RG \
--template-file azuredeploy.json \
--name importPipeline \
--parameters azuredeploy.parameters.json
Вариант 2. Создание ресурса с помощью удостоверения, назначаемого пользователем
Укажите идентификатор ресурса удостоверения, назначенного пользователем, в данной команде в качестве дополнительного параметра.
az deployment group create \
--resource-group $TARGET_RG \
--template-file azuredeploy.json \
--name importPipeline \
--parameters azuredeploy.parameters.json \
--parameters userAssignedIdentity="/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myUserAssignedIdentity"
Если вы планируете выполнить импорт вручную, запишите идентификатор ресурса (id) конвейера. Это значение можно сохранить в переменной среды для последующего использования, выполнив команду az deployment group show . Рассмотрим пример.
IMPORT_RES_ID=$(az deployment group show \
--resource-group $TARGET_RG \
--name importPipeline \
--query 'properties.outputResources[1].id' \
--output tsv)
Создание PipelineRun для экспорта с помощью Resource Manager
Создайте ресурс PipelineRun для исходного реестра контейнеров с помощью развертывания шаблона Azure Resource Manager. Этот ресурс запускает ранее созданный ресурс ExportPipeline и экспортирует указанные артефакты из реестра контейнеров в виде блоб-объекта в вашу учетную запись хранения источника.
Скопируйте файлы шаблонов PipelineRun Resource Manager в локальную папку.
Введите следующие значения параметров в файле azuredeploy.parameters.json:
| Параметр | Ценность |
|---|---|
| registryName | Имя исходного реестра контейнеров |
| pipelineRunName | Имя, выбранное для запуска |
| идентификаторРесурсаКонвейера | Идентификатор ресурса конвейера экспорта. Пример: /subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.ContainerRegistry/registries/<sourceRegistryName>/exportPipelines/myExportPipeline |
| targetName | Имя, выбранное для большого двоичного объекта артефактов, экспортированного в исходную учетную запись хранения, например myblob |
| artifacts | Массив исходных артефактов для передачи, как теги или дайджесты манифеста. Пример: ["samples/hello-world:v1", "samples/nginx:v1", "myrepository@sha256:0a2e01852872..."] |
При повторном развертывании ресурса PipelineRun с идентичными свойствами необходимо также использовать свойство forceUpdateTag .
Выполните команду az deployment group create чтобы создать ресурс PipelineRun. В следующем примере развертывание получает имя exportPipelineRun.
az deployment group create \
--resource-group $SOURCE_RG \
--template-file azuredeploy.json \
--name exportPipelineRun \
--parameters azuredeploy.parameters.json
Для последующего использования сохраните идентификатор ресурса конвейера в переменной среды:
EXPORT_RUN_RES_ID=$(az deployment group show \
--resource-group $SOURCE_RG \
--name exportPipelineRun \
--query 'properties.outputResources[0].id' \
--output tsv)
Экспорт артефактов может занять несколько минут. После успешного завершения развертывания проверьте экспорт артефактов, перечислив экспортированный блоб в контейнере передачи исходной учетной записи хранения. Например, выполните команду az storage blob list:
az storage blob list \
--account-name $SOURCE_SA \
--container-name transfer \
--output table
Передача BLOB (необязательно)
Используйте средство AzCopy или другие методы для передачи данных BLOB-объектов из исходной учетной записи хранения в целевую учетную запись хранения.
Например, следующая azcopy copy команда копирует myblob из контейнера передачи в исходной учетной записи в контейнер передачи в целевой учетной записи. Если блоб существует в целевой учетной записи, он будет перезаписан. Проверка подлинности для этой междоменной копии использует маркеры SAS с соответствующими разрешениями для исходных и целевых контейнеров независимо от режима доступа к хранилищу, используемого конвейерами. (Действия по созданию маркеров не отображаются.)
azcopy copy \
'https://<source-storage-account-name>.blob.core.windows.net/transfer/myblob'$SOURCE_SAS \
'https://<destination-storage-account-name>.blob.core.windows.net/transfer/myblob'$TARGET_SAS \
--overwrite true
Триггер ресурса ImportPipeline
Если вы включили параметр sourceTriggerStatus ImportPipeline (значение по умолчанию), конвейер активируется после того как объект BLOB скопирован в целевую учетную запись хранения. Импорт артефактов может занять несколько минут. После успешного завершения процесса проверьте, как прошел импорт артефактов. Для этого выведите список репозиториев в целевом реестре контейнеров. Например, выполните команду az acr repository list:
az acr repository list --name <target-registry-name>
Замечание
Триггер источника будет импортировать только БЛОБы, измененные за последние 60 дней. Если вы планируете использовать триггер источника для импорта больших двоичных объектов старше этого, обновите время последнего изменения больших двоичных объектов, добавив к ним метаданные большого двоичного объекта или импортировав их с помощью вручную созданных конвейеров.
Если вы не включили параметр sourceTriggerStatus конвейера импорта, запустите ресурс ImportPipeline вручную, как показано в следующем разделе.
Создание PipelineRun для импорта с помощью Resource Manager (необязательно)
Вы также можете использовать ресурс PipelineRun для активации ImportPipeline для импорта артефактов в целевой реестр контейнеров.
Скопируйте файлы шаблонов PipelineRun Resource Manager в локальную папку.
Введите следующие значения параметров в файле azuredeploy.parameters.json:
| Параметр | Ценность |
|---|---|
| registryName | Имя целевого реестра контейнеров |
| pipelineRunName | Имя, выбранное для запуска |
| идентификаторРесурсаКонвейера | Идентификатор ресурса конвейера импорта. Пример: /subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.ContainerRegistry/registries/<targetRegistryName>/importPipelines/myImportPipeline |
| sourceName | Имя существующего BLOB для экспортированных артефактов в вашей учетной записи хранения, например myblob |
При повторном развертывании ресурса PipelineRun с идентичными свойствами необходимо также использовать свойство forceUpdateTag .
Запустите az deployment group create для запуска ресурса.
az deployment group create \
--resource-group $TARGET_RG \
--name importPipelineRun \
--template-file azuredeploy.json \
--parameters azuredeploy.parameters.json
Для последующего использования сохраните идентификатор ресурса конвейера в переменной среды:
IMPORT_RUN_RES_ID=$(az deployment group show \
--resource-group $TARGET_RG \
--name importPipelineRun \
--query 'properties.outputResources[0].id' \
--output tsv)
После успешного завершения развертывания проверьте импорт артефактов, перечислив репозитории в целевом реестре контейнеров. Например, выполните команду az acr repository list:
az acr repository list --name <target-registry-name>
Ресурс PipelineRun для повторного развертывания
При повторном развертывании ресурса PipelineRun с идентичными свойствами необходимо использовать свойство forceUpdateTag . Это свойство указывает, что ресурс PipelineRun должен быть повторно создан, даже если конфигурация не изменилась. Убедитесь, что forceUpdateTag отличается при каждом повторном развертывании ресурса PipelineRun. В примере ниже заново создается PipelineRun для экспорта. Текущая дата и время используется для задания forceUpdateTag, тем самым гарантируя, что это свойство всегда уникально.
CURRENT_DATETIME=`date +"%Y-%m-%d:%T"`
az deployment group create \
--resource-group $SOURCE_RG \
--template-file azuredeploy.json \
--name exportPipelineRun \
--parameters azuredeploy.parameters.json \
--parameters forceUpdateTag=$CURRENT_DATETIME
Удаление ресурсов конвейера
В следующем примере команд используется az resource delete для удаления ресурсов конвейера, созданных в этой статье. Идентификаторы ресурсов ранее хранились в переменных среды.
# Delete export resources
az resource delete \
--resource-group $SOURCE_RG \
--ids $EXPORT_RES_ID $EXPORT_RUN_RES_ID \
--api-version 2025-06-01-preview
# Delete import resources
az resource delete \
--resource-group $TARGET_RG \
--ids $IMPORT_RES_ID $IMPORT_RUN_RES_ID \
--api-version 2025-06-01-preview
Устранение неполадок при передаче ACR
Ознакомьтесь с руководством по устранению неполадок с ACR Transfer.
Дальнейшие шаги
- Узнайте, как заблокировать возможность создания конвейеров экспорта из ограниченного сетью реестра контейнеров.