Habilitación automática de la creación de imágenes con desencadenadores de Azure Image Builder
Puede usar desencadenadores en Azure Image Builder (AIB) para configurar compilaciones automáticas de imágenes cuando se cumplen determinados criterios en la canalización de compilación.
Importante
Tenga en cuenta que existe una restricción en la cantidad de desencadenadores permitidos por región, específicamente 100 por región por suscripción.
Nota:
Actualmente, solo se admite la configuración de un desencadenador para una nueva imagen de origen, pero se prevé admitir distintos tipos de desencadenadores en el futuro.
Nota:
Para evitar errores de compilación innecesarios, la creación automática de imágenes a través de desencadenadores se desactivará si la compilación de la plantilla de imagen ha producido un error varias veces consecutivamente (ya sea manual o automáticamente desencadenada). Todavía puede compilar manualmente la plantilla de imagen y, una vez que una compilación manual se realice correctamente, se reactivarán los desencadenadores automáticos.
Requisitos previos
Antes de configurar el primer desencadenador, asegúrese de que usa la versión 2022-07-01 de la API de Azure Image Builder.
Configuración de un desencadenador en Azure Image Builder
Registro de los proveedores
Para usar VM Image Builder con los desencadenadores, debe registrar los proveedores siguientes. Ejecute los siguientes comandos para comprobar el registro:
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
Si la salida no dice registrada, ejecute los siguientes comandos:
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
Registre la característica de desencadenadores de compilación automática de imágenes:
az feature register --namespace Microsoft.VirtualMachineImages --name Triggers
Configuración de variables
En primer lugar, debe establecer algunas variables que usará varias veces en los comandos.
# 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)
Creación de un grupo de recursos
Ahora, debe crear un grupo de recursos donde pueda almacenar la plantilla de imagen. Use el siguiente comando para hacer el grupo de recursos:
az group create -n $resourceGroupName -l $location
Creación de una identidad administrada para el servicio
También deberá crear una identidad administrada que se usará para la plantilla de imagen (y, posiblemente, la VM de compilación de Azure Image Builder). En este ejemplo, se crea una identidad administrada con acceso de "Colaborador", pero puede refinar los permisos o el rol asignados a la identidad administrada como desee, siempre que incluya los permisos necesarios para que el servicio Azure Image Builder funcione correctamente.
Para más información sobre los permisos necesarios para el servicio Azure Image Builder, consulte la siguiente documentación: Configuración de permisos de Azure VM Image Builder mediante la CLI de Azure.
Para más información sobre cómo se pueden asignar y usar las identidades administradas en Azure Image Builder, consulte la siguiente documentación: Referencia de plantilla de VM Image Builder: Identidad.
Use el siguiente comando para crear la identidad administrada que se usará para la plantilla de imagen:
# 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
Creación de una galería y una definición de imagen
Para usar VM Image Builder con una instancia de Azure Compute Gallery, debe tener una galería y una definición de imagen existentes. VM Image Builder no crea la galería ni la definición de imagen automáticamente.
Si aún no tiene una galería y una definición de imagen para usar, empiece por crearlas.
En primer lugar, cree una galería:
az sig create \
-g $resourceGroupName \
--gallery-name $acgName
Luego, cree una definición de imagen:
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
Creación de la plantilla de imagen
Descargue la plantilla JSON de ejemplo y configúrela con las variables. La plantilla de imagen siguiente usa una imagen de plataforma como origen, pero puede cambiar el origen a una imagen de Azure Compute Gallery si desea configurar compilaciones automáticas de imágenes en cualquier momento en que haya una nueva versión de la imagen en Azure Compute Gallery.
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
Requisitos de plantilla de imagen:
source
debe ser una imagen de plataforma o una imagen de Azure Compute Gallery (actualmente solo se permiten estos dos orígenes).- Si usa una imagen de plataforma, la versión del origen debe ser
Latest
. En el caso de una imagen de Azure Compute Gallery, la última parte del id. de recurso que tiene el nombre de la versión debe establecerse enLatest
. - No se puede especificar una versión si se va a distribuir la imagen a una instancia de Azure Compute Gallery. La versión se incrementa automáticamente.
- Cuando el origen se establece en una imagen de Azure Compute Gallery y la distribución se establece en una instancia de Azure Compute Gallery, la imagen de la galería de origen y la imagen de la galería de distribución no pueden ser iguales. El id. de definición de la imagen de Azure Compute Gallery no puede ser el mismo para la imagen de la galería de origen y para la imagen de la galería de distribución.
- La plantilla de imagen debe decir "Succeeded" (Correcto) en
provisioningState
, lo que significa que la plantilla se creó sin problemas. Si la plantilla no se aprovisiona correctamente, no podrá crear un desencadenador.
Después de configurar la plantilla, use el siguiente comando para enviar la configuración de imagen al servicio Azure Image Builder:
az image builder create -g $resourceGroupName -n $imageTemplateName --image-template helloImageTemplateforTriggers.json
Puede usar el siguiente comando para comprobar que la plantilla de imagen se creó correctamente:
az image builder show --name $imageTemplateName --resource-group $resourceGroupName
Nota:
Al ejecutar el comando anterior, provisioningState
debe decir "Succeeded" (Correcto), lo que significa que la plantilla se creó sin problemas. Si provisioningState
no dice que se ha completado correctamente, no podrá hacer que un desencadenador use la plantilla de imagen.
Creación de un desencadenador de origen
Descargue la plantilla del desencadenador de ejemplo y configúrela con las variables. El siguiente desencadenador inicia una nueva compilación de imagen cada vez que se actualiza la imagen de origen.
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
Requisitos del desencadenador:
- La ubicación del desencadenador debe ser la misma que la ubicación de la plantilla de imagen. Este es un requisito del cmdlet
az resource create
. - Actualmente, se admite un
kind
de desencadenador, que es "SourceImage" - Solo se admite un desencadenador "SourceImage" por imagen. Si ya hay un desencadenador "SourceImage" en la imagen, no podrá crear uno nuevo.
- No se puede actualizar el campo
kind
a otro tipo de desencadenador. Tiene que eliminar el desencadenador y volver a crearlo o crear otro desencadenador con la configuración adecuada.
Use el siguiente comando para agregar el desencadenador al grupo de recursos.
az image builder trigger create --name $ibTriggerName --resource-group $resourceGroupName --image-template-name $imageTemplateName --kind SourceImage
También puede usar el siguiente comando para comprobar que el desencadenador se creó correctamente:
az image builder trigger show --name $ibTriggerName --image-template-name $imageTemplateName --resource-group $resourceGroupName
Nota:
Al ejecutar el comando anterior, provisioningState
debe decir Succeeded
, lo que significa que el desencadenador se creó sin problemas. En status
, el código debe decir Healthy
y el mensaje debe decir Trigger is active.
Limpieza de los recursos
Eliminación del desencadenador
Utilice el comando siguiente para eliminar el desencadenador:
az image builder trigger delete --name $ibTriggerName --image-template-name $imageTemplateName --resource-group $resourceGroupName
Eliminación de la plantilla de imagen
Use el siguiente comando para eliminar la plantilla de imagen:
az image builder delete --name $imageTemplateName --resource-group $resourceGroupName
Pasos siguientes
Consulte la referencia de plantilla de Image Builder para más información.