Partilhar via


Como habilitar a Criação Automática de Imagem com gatilhos do Azure Image Builder

Você pode usar gatilhos no Azure Image Builder (AIB) para habilitar a criação automática de imagens quando determinados critérios forem atendidos em seu pipeline de compilação.

Importante

Informamos que existe uma restrição no número de gatilhos permitidos por região, especificamente 100 por região e por assinatura.

Nota

Atualmente, suportamos apenas a definição de um gatilho para uma nova imagem de origem, mas esperamos oferecer suporte a diferentes tipos de gatilhos no futuro.

Nota

Para evitar falhas de compilação desnecessárias, a criação automática de imagens por meio de gatilhos será desativada se a compilação do modelo de imagem tiver falhado várias vezes consecutivas (acionada manual ou automaticamente). Você ainda pode criar manualmente o modelo de imagem e, quando uma compilação manual for bem-sucedida, os gatilhos automáticos serão reativados.

Pré-requisitos

Antes de configurar seu primeiro gatilho, verifique se você está usando a API do Azure Image Builder versão 2022-07-01.

Como configurar um gatilho no Azure Image Builder

Registar os fornecedores

Para usar o VM Image Builder com gatilhos, você precisa registrar os provedores abaixo. Verifique o seu registo executando os seguintes comandos:

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 a saída não disser registrado, execute os seguintes 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 o recurso de gatilhos de compilação de imagem automática:

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

Definir variáveis

Primeiro, você precisa definir algumas variáveis que você usará repetidamente em 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)

Criar grupo de recursos

Agora, você precisa criar um grupo de recursos onde você pode armazenar seu modelo de imagem. Use o seguinte comando para criar seu grupo de recursos:

az group create -n $resourceGroupName -l $location

Criar identidade gerenciada para o serviço

Você também precisará criar uma identidade gerenciada que será usada para o modelo de imagem (e, potencialmente, para a VM de compilação do Azure Image Builder). Neste exemplo, criamos uma identidade gerenciada com acesso de "Colaborador", mas você pode refinar as permissões ou a função atribuída à identidade gerenciada como quiser, desde que inclua as permissões necessárias para que o serviço Azure Image Builder funcione corretamente.

Para obter mais informações sobre as permissões necessárias para o serviço Azure Image Builder, consulte a seguinte documentação: Configurar permissões do Azure VM Image Builder usando a CLI do Azure

Para obter mais informações sobre como as identidades gerenciadas podem ser atribuídas e usadas no Azure Image Builder, consulte a seguinte documentação: Referência de modelo do Construtor de Imagens de VM: Identidade

Use o seguinte comando para criar a identidade gerenciada que será usada para o modelo de imagem:

# 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

Para usar o Construtor de Imagens de VM com a Galeria de Computação do Azure, você precisa ter uma galeria e uma definição de imagem existentes. O VM Image Builder não cria a galeria e a definição de imagem para você.

Se ainda não tiver uma galeria e uma definição de imagem para usar, comece por criá-las.

Primeiro, crie uma galeria:

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

Em seguida, crie uma definição de imagem:

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

Criar o modelo de imagem

Baixe o modelo JSON de exemplo e configure-o com suas variáveis. O modelo de imagem a seguir usa uma Imagem da Plataforma como origem, mas você pode alterar a fonte para uma imagem da Galeria de Computação do Azure se quiser habilitar a criação automática de imagens sempre que houver uma nova versão de imagem em sua Galeria de Computação do 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

Requisitos do modelo de imagem:

  • A source deve ser uma imagem da Plataforma ou uma imagem da Galeria de Computação do Azure (apenas essas duas fontes são permitidas atualmente)
  • Se você estiver usando uma imagem de plataforma, a versão na fonte precisa ser Latest. Para uma imagem da Galeria de Computação do Azure, a última parte da ID do recurso que tem o nome da versão precisa ser definida como Latest.
  • Não é possível especificar uma versão se estiver distribuindo a imagem para uma Galeria de Computação do Azure. A versão é incrementada automaticamente.
  • Quando a origem é definida como uma imagem da Galeria de Computação do Azure e a distribuição é definida como uma Galeria de Computação do Azure, a imagem da galeria de origem e a imagem da galeria de distribuição não podem ser as mesmas. A ID de definição de imagem da Galeria de Computação do Azure não pode ser a mesma para a imagem da galeria de origem e para a imagem da galeria de distribuição.
  • O modelo de imagem deve ter "Êxito" no , o provisioningStateque significa que o modelo foi criado sem problemas. Se o modelo não for provisionado com êxito, você não poderá criar um gatilho.

Depois de configurar seu modelo, use o seguinte comando para enviar a configuração da imagem para o serviço Azure Image Builder:

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

Você pode usar o seguinte comando para verificar se o modelo de imagem foi criado com êxito:

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

Nota

Ao executar o comando acima deve provisioningState dizer "Succeeded", o que significa que o modelo foi criado sem problemas. Se o provisioningState não diz bem-sucedido, você não será capaz de fazer um gatilho usar o modelo de imagem.

Criar gatilho de origem

Baixe o modelo de gatilho de exemplo e configure-o com suas variáveis. O gatilho a seguir inicia uma nova construção de imagem sempre que a imagem de origem é atualizada.

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 de desencadeamento:

  • O local no gatilho precisa ser o mesmo que o local no modelo de imagem. Este é um requisito do az resource create cmdlet.
  • Atualmente suportamos um kind dos trigger, que é um "SourceImage"
  • Suportamos apenas um gatilho "SourceImage" por imagem. Se você já tiver um gatilho "SourceImage" na imagem, não poderá criar um novo.
  • Não é possível atualizar o kind campo para outro tipo de gatilho. Você tem que excluir o gatilho e recriá-lo ou criar outro gatilho com a configuração apropriada.

Use o comando a seguir para adicionar o gatilho ao seu grupo de recursos.

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

Você também pode usar o seguinte comando para verificar se o gatilho foi criado com êxito:

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

Nota

Ao executar o comando acima do deve dizerSucceeded, o provisioningState que significa que o gatilho foi criado sem problemas. Em status, o código deve dizer Healthy e a mensagem deve dizer Trigger is active.

Limpar os recursos

Excluindo o gatilho

Use o seguinte comando para excluir o gatilho:

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

Excluindo o modelo de imagem

Use o seguinte comando para excluir o modelo de imagem:

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

Próximos passos

Consulte a referência de modelo do Construtor de Imagens para obter mais informações.