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


Включение автоматического создания изображений с помощью триггеров построителя образов 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

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

Дополнительные сведения см. в справочнике по шаблону построителя образов.