Come abilitare la creazione automatica di immagini con trigger di Image Builder Azure

È possibile usare i trigger in Azure Image Builder (AIB) per abilitare la creazione automatica di immagini quando vengono soddisfatti determinati criteri nella pipeline di compilazione.

Importante

È previsto un limite di 100 trigger per area per sottoscrizione.

Nota

Per evitare errori di compilazione non necessari, la creazione automatica di immagini tramite trigger viene disattivata se la compilazione del modello di immagine ha esito negativo più volte consecutivamente (manualmente o automaticamente attivata). È comunque possibile compilare manualmente il modello di immagine. Una volta completata la compilazione manuale, i trigger automatici vengono riattivati.

Prerequisiti

Prima di configurare il primo trigger, assicurati di usare la versione 2022-07-01 o successiva dell'API Azure Image Builder.

Come configurare un trigger in Image Builder di Azure

Registrare i provider

Per usare VM Image Builder con i trigger, registrare i seguenti provider. Controllare la registrazione eseguendo questi comandi:

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

Se l'output non indica Registrato, eseguire i comandi seguenti:

az provider register -n Microsoft.VirtualMachineImages
az provider register -n Microsoft.KeyVault
az provider register -n Microsoft.Compute
az provider register -n Microsoft.Storage
az provider register -n Microsoft.Network
az provider register -n Microsoft.ContainerInstance

Registra la funzionalità dei trigger di compilazione automatica delle immagini:

az feature register --namespace Microsoft.VirtualMachineImages --name Triggers

Impostare variabili

Prima di tutto, impostare alcune variabili che vengono usate ripetutamente nei comandi.

# Resource group name - ibTriggersTestRG in this example
resourceGroupName=ibTriggersRG
# Datacenter location - Central US in this example
location=centralus
# Additional region to replicate the image to - West US in this example
additionalregion=westus
# 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)

Crea gruppo di risorse

Creare un gruppo di risorse in cui è possibile archiviare il modello di immagine:

az group create -n $resourceGroupName -l $location

Creare un'identità gestita per il servizio

Creare un'identità gestita per il modello di immagine e potenzialmente la macchina virtuale di compilazione di Image Builder Azure. In questo esempio l'identità gestita ottiene l'accesso "Collaboratore", ma è possibile perfezionare le autorizzazioni o il ruolo purché siano incluse le autorizzazioni necessarie per il corretto funzionamento del servizio Image Builder Azure.

Per altre informazioni sulle autorizzazioni necessarie per il servizio Image Builder Azure, vedere Configurare le autorizzazioni di Image Builder di macchine virtuali Azure usando il interfaccia della riga di comando di Azure.

Per altre informazioni su come assegnare e usare le identità gestite in Azure Image Builder, vedere Informazioni di riferimento sul modello di Image Builder della macchina virtuale: Identità.

Eseguire i comandi seguenti per creare l'identità gestita:

# 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

Per usare VM Image Builder con Azure Compute Gallery, è necessario disporre di una galleria e di una definizione di immagine esistenti. VM Image Builder non crea automaticamente la galleria e la definizione di immagine.

Se non si dispone già di una galleria e di una definizione di immagine da usare, inizia creandole.

Per prima cosa, crea una galleria:

az sig create \
    -g $resourceGroupName \
    --gallery-name $acgName

Creare quindi una definizione dell'immagine:

az sig image-definition create \
   -g $resourceGroupName \
   --gallery-name $acgName \
   --gallery-image-definition $imageDefName \
   --publisher myIbPublisher \
   --offer myOffer \
   --sku 22_04-lts-gen2 \
   --os-type Linux \
   --hyper-v-generation V2

Creare il modello di immagine

Scaricare il modello JSON di esempio e configurarlo con le variabili. Il modello di immagine seguente usa come origine un'immagine di piattaforma, ma è possibile modificare l'origine impostando un'immagine di Azure Compute Gallery per abilitare la creazione automatica delle immagini ogni volta che è disponibile una nuova versione dell'immagine nella raccolta.

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

Requisiti del modello di immagine:

  • Il source deve essere un'immagine della piattaforma oppure un'immagine di Azure Compute Gallery (attualmente sono consentite solo queste due origini)
  • Se si utilizza un'immagine della piattaforma, la versione nell'origine deve essere Latest. Per un'immagine di Azure Compute Gallery, l'ultima parte dell'ID della risorsa che contiene il nome della versione deve essere impostata su Latest.
  • Non è possibile specificare una versione se si distribuisce l'immagine in Azure Compute Gallery. La versione viene incrementata automaticamente.
  • Quando l'origine è impostata su un'immagine della raccolta di calcolo di Azure e la distribuzione è impostata su una raccolta di calcolo di Azure, l'immagine della raccolta di origine e l'immagine della raccolta di distribuzione non possono essere uguali. L'ID di definizione dell'immagine di Raccolta di calcolo di Azure non può essere la stessa per le immagini della raccolta di origine e della raccolta distribuita.
  • Il modello di immagine deve avere "Succeeded" nel campo provisioningState, il che significa che il modello è stato creato senza alcun problema. Se il provisioning del modello non viene eseguito correttamente, non sarà possibile creare un trigger.

Dopo aver configurato il modello, usare il comando seguente per inviare la configurazione dell'immagine al servizio Azure Image Builder:

az image builder create -g $resourceGroupName -n $imageTemplateName --image-template helloImageTemplateforTriggers.json

È possibile usare il comando seguente per verificare che il modello di immagine sia stato creato correttamente:

az image builder show --name $imageTemplateName --resource-group $resourceGroupName

Nota

Quando si esegue il comando precedente, provisioningState dovrebbe riportare "Succeeded", il che significa che il template è stato creato senza alcun problema. Se provisioningState non indica "Completato", non sarà possibile fare in modo che un trigger usi il modello di immagine.

Creare un trigger di origine

Scaricare il modello di trigger di esempio e configurarlo con le variabili. Il trigger seguente avvia una nuova compilazione di immagini ogni volta che viene aggiornata l'immagine di origine.

curl https://raw.githubusercontent.com/Azure/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

Requisiti di attivazione:

  • La posizione nel trigger deve corrispondere alla posizione nel modello di immagine.
  • Attualmente è supportato un solo kindtipo di trigger: SourceImage.
  • Per ogni immagine è supportato un solo trigger SourceImage. Se nell'immagine è già presente un SourceImage trigger, non è possibile crearne uno nuovo.
  • Non è possibile modificare il campo kind in un altro tipo di trigger. È necessario eliminare il trigger e ricrearlo oppure creare un altro trigger con la configurazione appropriata.

Usare il comando seguente per aggiungere il trigger al gruppo di risorse.

az image builder trigger create --name $ibTriggerName --resource-group $resourceGroupName --image-template-name $imageTemplateName --kind SourceImage

È anche possibile usare il comando seguente per verificare che il trigger sia stato creato correttamente:

az image builder trigger show --name $ibTriggerName --image-template-name $imageTemplateName --resource-group $resourceGroupName

Nota

Quando si esegue il comando sopra, provisioningState dovrebbe indicare Succeeded, il che significa che il trigger è stato creato senza problemi. In status, il codice dovrebbe indicare Healthy e il messaggio dovrebbe indicare Trigger is active.

Pulisci le tue risorse

Eliminazione del trigger

Usare il comando seguente per eliminare il trigger:

az image builder trigger delete --name $ibTriggerName --image-template-name $imageTemplateName --resource-group $resourceGroupName

Eliminazione del modello di immagine

Usare il comando seguente per eliminare il modello di immagine:

az image builder delete --name $imageTemplateName --resource-group $resourceGroupName

Passaggi successivi