Включение автоматического создания изображений с помощью триггеров построителя образов Azure
Триггеры в Конструкторе образов Azure (AIB) можно использовать для включения автоматического создания образа, если в конвейере сборки выполняются определенные критерии.
Внимание
Обратите внимание, что существует ограничение на количество триггеров, допустимых для каждого региона, в частности 100 на каждый регион на подписку.
Примечание.
В настоящее время мы поддерживаем только настройку триггера для нового исходного образа, но в будущем мы ожидаем поддержки различных типов триггеров.
Примечание.
Чтобы предотвратить ненужные сбои сборки, автоматическое создание образа с помощью триггеров будет деактивировано, если сборка шаблона образа несколько раз подряд (вручную или автоматически активируется). Вы по-прежнему можете вручную создать шаблон образа и после успешной сборки вручную автоматически активируются автоматические триггеры.
Необходимые компоненты
Перед настройкой первого триггера убедитесь, что вы используете API построителя образов Azure версии 2022-07-01.
Настройка триггера в построителе образов Azure
Регистрация поставщиков
Чтобы использовать построителе образов виртуальных машин с триггерами, необходимо зарегистрировать указанные ниже поставщики. Проверьте регистрацию, выполнив следующие команды:
az provider show -n Microsoft.VirtualMachineImages -o json | grep registrationState
az provider show -n Microsoft.KeyVault -o json | grep registrationState
az provider show -n Microsoft.Compute -o json | grep registrationState
az provider show -n Microsoft.Storage -o json | grep registrationState
az provider show -n Microsoft.Network -o json | grep registrationState
az provider show -n Microsoft.ContainerInstance -o json | grep registrationState
Если в выходных данных не указано, что функция зарегистрирована, выполните следующие команды:
az provider register -n Microsoft.VirtualMachineImages
az provider register -n Microsoft.Compute
az provider register -n Microsoft.KeyVault
az provider register -n Microsoft.Storage
az provider register -n Microsoft.Network
az provider register -n Microsoft.ContainerInstance
Зарегистрируйте функцию триггеров сборки автоматического образа:
az feature register --namespace Microsoft.VirtualMachineImages --name Triggers
Задание переменных
Сначала необходимо задать некоторые переменные, которые будут многократно использоваться в командах.
# Resource group name - ibTriggersTestRG in this example
resourceGroupName=ibTriggersRG
# Datacenter location - West US 2 in this example
location=westus2
# Additional region to replicate the image to - East US in this example
additionalregion=eastus2
# Name of the Azure Compute Gallery - ibTriggersGallery in this example
acgName=ibTriggersGallery
# Name of the image definition to be created - ibTriggersImageDef in this example
imageDefName=ibTriggersImageDef
# Name of the Trigger to be created - ibTrigger in this example
ibTriggerName=ibTrigger
# Name of the image template to be created - ibTriggersImageTemplate in this example
imageTemplateName=ibTriggersImageTemplate
# Reference name in the image distribution metadata
runOutputName=ibTriggersTestRun
# Create a variable for your subscription ID
subscriptionID=$(az account show --query id --output tsv)
Создать группу ресурсов
Теперь необходимо создать группу ресурсов, в которой можно сохранить шаблон образа. Используйте следующую команду, чтобы сделать группу ресурсов:
az group create -n $resourceGroupName -l $location
Создание управляемого удостоверения для службы
Вам также потребуется создать управляемое удостоверение, которое будет использоваться для шаблона образа (и потенциально виртуальной машины сборки Конструктора образов Azure). В этом примере мы создадим управляемое удостоверение с доступом "Участник", но вы можете уточнить разрешения или роль, назначенные управляемому удостоверению, если вы хотите включить разрешения, необходимые для правильной работы службы Конструктора образов Azure.
Дополнительные сведения о разрешениях, необходимых для службы построителя образов Azure, см. в следующей документации. Настройка разрешений построителя образов виртуальных машин Azure с помощью Azure CLI
Дополнительные сведения о том, как управляемые удостоверения можно назначить и использовать в Конструкторе образов Azure, см. в следующей документации: справочник по шаблону конструктора образов виртуальных машин: Удостоверение
Используйте следующую команду, чтобы создать управляемое удостоверение, которое будет использоваться для шаблона образа:
# Create user-assigned identity for VM Image Builder to access the storage account where the script is stored
identityName=aibBuiUserId$(date +'%s')
az identity create -g $resourceGroupName -n $identityName
# Get the identity client and principal ID
imgBuilderCliId=$(az identity show -g $resourceGroupName -n $identityName --query clientId -o tsv)
# Get the user identity URI that's needed for the template
imgBuilderId=/subscriptions/$subscriptionID/resourcegroups/$resourceGroupName/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$identityName
# Grant "Contributor" access to the user-assigned identity
az role assignment create \
--assignee $imgBuilderCliId \
--role "Contributor" \
--scope /subscriptions/$subscriptionID/resourceGroups/$resourceGroupName
Создание коллекции и определения изображений
Чтобы использовать Конструктор образов виртуальных машин с Коллекцией вычислений Azure, вам потребуются существующая коллекция и определение образа. Конструктор образов виртуальных машин автоматические не создает коллекцию и определение образа.
Если у вас еще нет коллекции и определения образа, начните с их создания.
Сначала создайте коллекцию:
az sig create \
-g $resourceGroupName \
--gallery-name $acgName
Затем создайте определение образа:
az sig image-definition create \
-g $resourceGroupName \
--gallery-name $acgName \
--gallery-image-definition $imageDefName \
--publisher myIbPublisher \
--offer myOffer \
--sku 18.04-LTS \
--os-type Linux
Создание шаблона образа
Скачайте пример шаблона JSON и настройте его с помощью переменных. Следующий шаблон образа использует образ платформы в качестве источника, но вы можете изменить источник на образ коллекции вычислений Azure, если вы хотите включить автоматическое создание образа в любое время в коллекции вычислений Azure.
curl https://raw.githubusercontent.com/Azure/azvmimagebuilder/main/quickquickstarts/9_Setting_up_a_Trigger_with_a_Custom_Linux_Image/helloImageTemplate.json -o helloImageTemplateforTriggers.json
sed -i -e "s/<subscriptionID>/$subscriptionID/g" helloImageTemplateforTriggers.json
sed -i -e "s/<rgName>/$resourceGroupName/g" helloImageTemplateforTriggers.json
sed -i -e "s/<imageDefName>/$imageDefName/g" helloImageTemplateforTriggers.json
sed -i -e "s/<acgName>/$acgName/g" helloImageTemplateforTriggers.json
sed -i -e "s/<region1>/$location/g" helloImageTemplateforTriggers.json
sed -i -e "s/<region2>/$additionalregion/g" helloImageTemplateforTriggers.json
sed -i -e "s/<runOutputName>/$runOutputName/g" helloImageTemplateforTriggers.json
sed -i -e "s%<imgBuilderId>%$imgBuilderId%g" helloImageTemplateforTriggers.json
Требования к шаблону изображения:
- Это
source
должен быть образ платформы или образ коллекции вычислений Azure (только эти два источника разрешены в настоящее время). - Если вы используете образ платформы, то версия в источнике должна быть
Latest
. Для образа коллекции вычислений Azure для последней части идентификатора ресурса с именем версии необходимо задать значениеLatest
. - Невозможно указать версию, если вы распространяете образ в коллекцию вычислений Azure. Версия автоматически увеличивается.
- Если для источника задан образ коллекции вычислений Azure и распределение устанавливается в коллекцию вычислений Azure, исходный образ коллекции и образ распространяемой коллекции не может совпадать. Идентификатор определения образа коллекции вычислений Azure не может совпадать как для исходного образа коллекции, так и для образа распределенной коллекции.
- В шаблоне изображения должно быть выполнено сообщение "Успешно"
provisioningState
, что означает, что шаблон был создан без каких-либо проблем. Если шаблон не подготовлен успешно, вы не сможете создать триггер.
После настройки шаблона выполните следующую команду, чтобы отправить конфигурацию образа в службу Конструктора образов Azure:
az image builder create -g $resourceGroupName -n $imageTemplateName --image-template helloImageTemplateforTriggers.json
Чтобы убедиться, что шаблон образа был создан успешно, можно использовать следующую команду:
az image builder show --name $imageTemplateName --resource-group $resourceGroupName
Примечание.
При выполнении команды выше provisioningState
следует сказать "Успешно", что означает, что шаблон был создан без каких-либо проблем. Если не provisioningState
говорится об успешном завершении, вы не сможете использовать шаблон образа.
Создание триггера источника
Скачайте пример шаблона триггера и настройте его с помощью переменных. Следующий триггер запускает новую сборку образа при обновлении исходного образа.
curl https://raw.githubusercontent.com/kof-f/azvmimagebuilder/main/quickquickstarts/9_Setting_up_a_Trigger_with_a_Custom_Linux_Image/trigger.json -o trigger.json
sed -i -e "s/<region1>/$location/g" trigger.json
Требования к триггеру:
- Расположение в триггере должно совпадать с расположением в шаблоне изображения. Это требование командлета
az resource create
. - В настоящее время мы поддерживаем один из
kind
триггеров, который является "SourceImage" - Для каждого изображения поддерживается только один триггер SourceImage. Если у вас уже есть триггер SourceImage на изображении, вы не можете создать новый.
- Вы не можете обновить
kind
поле до другого типа триггера. Необходимо удалить триггер и повторно создать его или создать другой триггер с соответствующей конфигурацией.
Используйте следующую команду, чтобы добавить триггер в группу ресурсов.
az image builder trigger create --name $ibTriggerName --resource-group $resourceGroupName --image-template-name $imageTemplateName --kind SourceImage
Для проверки успешности создания триггера можно также использовать следующую команду:
az image builder trigger show --name $ibTriggerName --image-template-name $imageTemplateName --resource-group $resourceGroupName
Примечание.
При выполнении команды, приведенной выше, provisioningState
следует сказать Succeeded
, что триггер был создан без каких-либо проблем. В status
коде должно быть указано Healthy
, и сообщение должно сказать Trigger is active.
Очистка ресурсов
Удаление триггера
Чтобы удалить триггер, используйте следующую команду:
az image builder trigger delete --name $ibTriggerName --image-template-name $imageTemplateName --resource-group $resourceGroupName
Удаление шаблона изображения
Чтобы удалить шаблон изображения, используйте следующую команду:
az image builder delete --name $imageTemplateName --resource-group $resourceGroupName
Следующие шаги
Дополнительные сведения см. в справочнике по шаблону построителя образов.