Condividi tramite


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

È 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

Si prega di essere informati che esiste una restrizione sul numero di trigger consentiti per area, in particolare 100 per area per sottoscrizione.

Nota

Attualmente è supportata solo l'impostazione di un trigger per una nuova immagine di origine, ma si prevede di supportare diversi tipi di trigger in futuro.

Nota

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

Prerequisiti

Prima di configurare il primo trigger, assicurarsi di usare l'API Di Azure Image Builder versione 2022-07-01.

Come configurare un trigger in Image Builder di Azure

Registrare i provider

Per usare Image Builder di macchine virtuali con i trigger, è necessario registrare i provider seguenti. Controllare la registrazione eseguendo i comandi seguenti:

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.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

Registrare la funzionalità trigger di compilazione dell'immagine automatica:

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

Impostare variabili

Prima di tutto, è necessario impostare alcune variabili che verranno usate ripetutamente nei comandi.

# 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)

Crea gruppo di risorse

A questo punto, è necessario creare un gruppo di risorse in cui è possibile archiviare il modello di immagine. Usare il comando seguente per impostare il gruppo di risorse:

az group create -n $resourceGroupName -l $location

Creare un'identità gestita per il servizio

Sarà anche necessario creare un'identità gestita che verrà usata per il modello di immagine (e potenzialmente la macchina virtuale di compilazione di Image Builder di Azure). In questo esempio viene creata un'identità gestita con accesso "Collaboratore", ma è possibile perfezionare le autorizzazioni o il ruolo assegnato all'identità gestita, purché si includano le autorizzazioni necessarie per il corretto funzionamento del servizio Azure Image Builder.

Per altre informazioni sulle autorizzazioni necessarie per il servizio Azure Image Builder, vedere la documentazione seguente: Configurare le autorizzazioni di Image Builder di macchine virtuali di Azure usando l'interfaccia della riga di comando di Azure

Per altre informazioni sul modo in cui è possibile assegnare e usare le identità gestite in Image Builder di Azure, vedere la documentazione seguente: Informazioni di riferimento sul modello di Image Builder della macchina virtuale: Identità

Usare il comando seguente per creare l'identità gestita che verrà usata per il modello di immagine:

# 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 Image Builder per macchine virtuali con la Raccolta di calcolo di Azure, è necessario avere una raccolta esistente e una definizione di immagine. Image Builder per macchine virtuali non crea automaticamente la raccolta e la definizione di immagine.

Se non si ha già una raccolta e una definizione di immagine da usare, iniziare creando questi elementi.

Innanzitutto, creare una raccolta:

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 18.04-LTS \
   --os-type Linux

Creare il modello di immagine

Scaricare il modello JSON di esempio e configurarlo con le variabili. Il modello di immagine seguente usa un'immagine della piattaforma come origine, ma è possibile modificare l'origine in un'immagine della raccolta di calcolo di Azure se si vuole abilitare la creazione automatica delle immagini ogni volta che è disponibile una nuova versione dell'immagine nella raccolta di calcolo di 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

Requisiti del modello di immagine:

  • source Deve essere un'immagine della piattaforma o un'immagine della raccolta di calcolo di Azure (attualmente sono consentite solo queste due origini)
  • Se si usa un'immagine della piattaforma, la versione nell'origine deve essere Latest. Per un'immagine della raccolta di calcolo di Azure, l'ultima parte dell'ID risorsa con il nome della versione deve essere impostata su Latest.
  • Non è possibile specificare una versione se si distribuisce l'immagine in una raccolta di calcolo di Azure. 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 definizione dell'immagine della raccolta di calcolo di Azure non può essere lo stesso sia per l'immagine della raccolta di origine che per l'immagine della raccolta di distribuzione.
  • Il modello di immagine deve avere "Succeeded" in provisioningState, ovvero il modello è stato creato senza problemi. 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 deve essere indicato "Succeeded", il che significa che il modello è stato creato senza problemi. Se l'elemento provisioningState non ha esito positivo, 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/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

Requisiti del trigger:

  • La posizione nel trigger deve corrispondere alla posizione nel modello di immagine. Si tratta di un requisito del az resource create cmdlet .
  • Attualmente è supportato uno kind dei trigger, ovvero "SourceImage"
  • È supportato un solo trigger "SourceImage" per ogni immagine. Se nell'immagine è già presente un trigger "SourceImage", non è possibile crearne uno nuovo.
  • Non è possibile aggiornare il kind campo a un altro tipo di trigger. È necessario eliminare il trigger e ricrearlo o 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 Succeededil che significa che il trigger è stato creato senza problemi. In status, il codice deve dire Healthy e il messaggio deve dire Trigger is active.

Pulire le 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

Per altre informazioni, vedere le informazioni di riferimento sul modello di Image Builder.