Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Выполните предварительные требования
Перед выполнением действий, описанных в этой статье, выполните предварительные требования, описанные здесь. Это означает следующее.
- У вас есть существующий реестр SKU "Премиум" в обоих облаках.
- У вас есть контейнер учетной записи хранения в обоих облаках.
- У вас есть существующее хранилище ключей с секретом, который содержит действительный маркер SAS с необходимыми разрешениями в обоих облаках.
- У вас есть последняя версия Az CLI, установленная в обоих облаках.
Внимание
Передача ACR позволяет работать с артефактами, размеры слоев которых ограничены до 8 ГБ из-за технических ограничений.
Рассмотрите возможность использования расширения Azure CLI
Для большинства неавтомированных вариантов использования рекомендуется использовать расширение Az CLI, если это возможно. Документацию по расширению Azure CLI можно просмотреть здесь.
Создание ресурса ExportPipeline с помощью Resource Manager
Создайте ресурс ExportPipeline для исходного реестра контейнеров с помощью развертывания шаблона Azure Resource Manager.
Скопируйте файлы шаблона Resource Manager для ExportPipeline в локальную папку.
В файле azuredeploy.parameters.json
введите значения для перечисленных ниже параметров.
Параметр | Значение |
---|---|
имяРеестра | Имя исходного реестра контейнеров. |
имяЭкспортногоКонвейера | Имя, выбранное для конвейера экспорта. |
targetUri | URI контейнера хранилища в исходной среде (целевой объект конвейера экспорта). Пример: https://sourcestorage.blob.core.windows.net/transfer |
keyVaultName | Имя исходного хранилища ключей. |
sasTokenSecretName | Имя секрета маркера SAS в исходном хранилище ключей Пример: acrexportsas. |
Параметры экспорта
Свойство options
для конвейеров экспорта поддерживает необязательные булевые значения. Рекомендуются следующие значения.
Параметр | Значение |
---|---|
опции | OverwriteBlobs — перезапись существующих целевых BLOB-объектов. ContinueOnErrors — продолжение экспорта оставшихся в исходном реестре артефактов в случае сбоя экспорта одного артефакта. |
Создание ресурса
Выполните команду az deployment group create, чтобы создать ресурс с именем exportPipeline, как показано в примерах ниже. По умолчанию, как показано в первом варианте, пример шаблона позволяет использовать в ресурсе ExportPipeline удостоверение, назначаемое системой.
Второй же вариант позволяет предоставить ресурсу удостоверение, назначаемое пользователем. (Создание пользовательского удостоверения не показано.)
Какой бы вариант вы ни выбрали, этот шаблон настраивает удостоверение для доступа к токену SAS в экспортном хранилище ключей.
Вариант 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
введите значения для перечисленных ниже параметров.
Параметр | Значение |
---|---|
имяРеестра | Имя целевого репозитория контейнеров. |
importPipelineName | Имя, выбранное для конвейера импорта. |
sourceUri | URI контейнера хранилища в вашей целевой среде (источник для конвейера импорта). Пример: https://targetstorage.blob.core.windows.net/transfer |
keyVaultName | Имя целевого хранилища ключей. |
sasTokenSecretName | Имя секрета токена SAS в целевом хранилище ключей. Пример: acrimportsas. |
Параметры импорта
Свойство options
для конвейера импорта поддерживает дополнительные логические значения. Рекомендуемые значения следующие:
Параметр | Значение |
---|---|
опции | OverwriteTags — перезапись существующих целевых тегов. DeleteSourceBlobOnSuccess — удаление BLOB-объекта исходного хранилища после успешного импорта в целевой реестр. ContinueOnErrors — продолжение импорта оставшихся в целевом реестре артефактов в случае сбоя импорта одного артефакта. |
Создание ресурса
Выполните команду az deployment group create, чтобы создать ресурс с именем importPipeline, как показано в примерах ниже. По умолчанию, как показано в первом варианте, пример шаблона позволяет использовать в ресурсе ImportPipeline удостоверение, назначаемое системой.
Второй вариант позволяет назначить ресурсу идентичность, заданную пользователем. (Создание назначенной пользователем идентичности не показано.)
Какой бы из вариантов вы ни использовали, этот шаблон настраивает удостоверение для доступа к токену SAS в хранилище ключей импорта.
Вариант 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 и экспортирует указанные артефакты из вашего реестра контейнеров в виде BLOB-объекта в вашу исходную учетную запись хранения.
Скопируйте файлы шаблонов PipelineRun Resource Manager в локальную папку.
В файле azuredeploy.parameters.json
введите значения для перечисленных ниже параметров.
Параметр | Значение |
---|---|
имя_реестра | Имя исходного реестра контейнеров. |
pipelineRunName | Имя, выбранное для запуска. |
идентификаторРесурсаКонвейера | ИД ресурса для конвейера экспорта. Пример: /subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.ContainerRegistry/registries/<sourceRegistryName>/exportPipelines/myExportPipeline |
targetName | Имя, выбранное для BLOB-объекта артефактов, который экспортирован в вашу исходную учетную запись хранения, например myblob. |
артефакты | Массив исходных артефактов для передачи в виде тегов или дайджестов манифеста. Пример: [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)
Экспорт артефактов может занять несколько минут. После успешного развертывания проверьте, как прошел экспорт артефактов. Для этого выведите список экспортированных BLOB-объектов в контейнере transfer исходной учетной записи хранения. Например, выполните команду az storage blob list:
az storage blob list \
--account-name $SOURCE_SA \
--container transfer \
--output table
Передача объекта Blob (опционально)
Используйте инструмент AzCopy или другие методы, чтобы передать данные блобов из исходной учетной записи хранения в целевую.
Например, команда azcopy copy
копирует myblob из контейнера transfer в исходной учетной записи в контейнер transfer в целевой учетной записи. Если BLOB уже существует в целевой учетной записи, он будет перезаписан. Для проверки подлинности используются маркеры 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
Если для ресурса ImportPipeline включен параметр sourceTriggerStatus
(значение по умолчанию), то конвейер активируется после копирования объекта BLOB в целевую учетную запись хранилища. Импорт артефактов может занять несколько минут. После успешного завершения процесса проверьте, как прошел импорт артефактов. Для этого выведите список репозиториев в целевом реестре контейнеров. Например, выполните команду az acr repository list:
az acr repository list --name <target-registry-name>
Примечание.
Триггер источника будет импортировать только БЛОБы, измененные за последние 60 дней. Если вы планируете использовать Source Trigger для импорта BLOB-объектов, которые старше этого срока, обновите время их последнего изменения, добавив к ним метаданные, или импортируйте их с помощью вручную созданных запусков конвейера.
Если вы не включили для конвейера импорта параметр sourceTriggerStatus
, запустите ресурс ImportPipeline вручную, как описано в следующем разделе.
Создание ресурса PipelineRun для импорта с помощью Resource Manager (дополнительно)
Вы также можете использовать ресурс PipelineRun, чтобы запустить ImportPipeline для импорта артефактов в целевой реестр контейнеров.
Скопируйте файлы шаблона PipelineRun Resource Manager в локальную папку.
В файле azuredeploy.parameters.json
введите значения для перечисленных ниже параметров.
Параметр | Значение |
---|---|
имя реестра | Имя вашего целевого реестра контейнеров. |
pipelineRunName | Имя, выбранное для запуска. |
идентификаторРесурсаКонвейера | Идентификатор ресурса для потока импорта. Пример: /subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.ContainerRegistry/registries/<sourceRegistryName>/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 для удаления ресурсов конвейера, которые были созданы в рамках этой статьи. IDs ресурсов ранее хранились в переменных среды.
# Delete export resources
az resource delete \
--resource-group $SOURCE_RG \
--ids $EXPORT_RES_ID $EXPORT_RUN_RES_ID \
--api-version 2019-12-01-preview
# Delete import resources
az resource delete \
--resource-group $TARGET_RG \
--ids $IMPORT_RES_ID $IMPORT_RUN_RES_ID \
--api-version 2019-12-01-preview
Устранение неполадок при передаче ACR
Ознакомьтесь с руководством по устранению неполадок с ACR Transfer.
Следующие шаги
- Узнайте, как заблокировать возможность создания конвейеров экспорта из ограниченного сетью реестра контейнеров.