Jak używać wyzwalaczy narzędzia Azure Image Builder do konfigurowania automatycznej kompilacji obrazu

Wyzwalacze w narzędziu Azure Image Builder (AIB) umożliwiają skonfigurowanie automatycznych kompilacji obrazów, gdy w potoku kompilacji zostaną spełnione określone kryteria.

Ważne

Należy poinformować, że istnieje ograniczenie liczby wyzwalaczy dozwolonych dla regionu, w szczególności 100 na region na subskrypcję.

Uwaga

Obecnie obsługujemy tylko ustawienie wyzwalacza dla nowego obrazu źródłowego, ale w przyszłości oczekujemy obsługi różnych rodzajów wyzwalaczy.

Wymagania wstępne

Przed skonfigurowaniem pierwszego wyzwalacza upewnij się, że używasz interfejsu API programu Azure Image Builder w wersji 2022-07-01.

Jak skonfigurować wyzwalacz w narzędziu Azure Image Builder

Rejestrowanie dostawców

Aby użyć konstruktora obrazów maszyny wirtualnej z wyzwalaczami, musisz zarejestrować poniższych dostawców. Sprawdź rejestrację, uruchamiając następujące polecenia:

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

Jeśli dane wyjściowe nie powiedzą się zarejestrowane, uruchom następujące polecenia:

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

Rejestrowanie funkcji wyzwalaczy kompilacji automatycznego obrazu:

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

Ustawianie zmiennych

Najpierw należy ustawić niektóre zmienne, które będą wielokrotnie używane w poleceniach.

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

Utwórz grupę zasobów

Teraz musisz utworzyć grupę zasobów, w której można przechowywać szablon obrazu. Użyj następującego polecenia, aby ustawić grupę zasobów:

az group create -n $resourceGroupName -l $location

Tworzenie tożsamości zarządzanej dla usługi

Należy również utworzyć tożsamość zarządzaną, która będzie używana dla szablonu obrazu (i potencjalnie maszyny wirtualnej kompilacji narzędzia Azure Image Builder). W tym przykładzie utworzymy tożsamość zarządzaną z dostępem "Współautor", ale możesz uściślić uprawnienia lub rolę przypisaną do tożsamości zarządzanej tak długo, jak długo uwzględniasz uprawnienia wymagane do prawidłowego działania usługi Azure Image Builder.

Aby uzyskać więcej informacji na temat uprawnień wymaganych do usługi Azure Image Builder, zobacz następującą dokumentację: Konfigurowanie uprawnień konstruktora obrazów maszyny wirtualnej platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure

Aby uzyskać więcej informacji o przypisywaniu tożsamości zarządzanych i ich użyciu w narzędziu Azure Image Builder, zobacz następującą dokumentację: Dokumentacja szablonu konstruktora obrazów maszyny wirtualnej: Tożsamość

Użyj następującego polecenia, aby utworzyć tożsamość zarządzaną, która będzie używana dla szablonu obrazu:

# 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

Aby używać konstruktora obrazów maszyn wirtualnych z galerią obliczeń platformy Azure, musisz mieć istniejącą galerię i definicję obrazu. Konstruktor obrazów maszyny wirtualnej nie tworzy galerii i definicji obrazu.

Jeśli nie masz jeszcze galerii i definicji obrazu do użycia, zacznij od ich utworzenia.

Najpierw utwórz galerię:

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

Następnie utwórz definicję obrazu:

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

Tworzenie szablonu obrazu

Pobierz przykładowy szablon JSON i skonfiguruj go przy użyciu zmiennych. Poniższy szablon obrazu używa obrazu platformy jako źródła, ale możesz zmienić źródło na obraz galerii obliczeniowej platformy Azure, jeśli chcesz skonfigurować automatyczne kompilacje obrazów w dowolnym momencie, gdy w galerii obliczeniowej platformy Azure istnieje nowa wersja obrazu.

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

Wymagania dotyczące szablonu obrazu:

  • Musi source to być obraz platformy lub obraz galerii obliczeń platformy Azure (obecnie dozwolone są tylko te dwa źródła)
  • Jeśli używasz obrazu platformy, wersja w źródle musi mieć wartość Latest. W przypadku obrazu galerii obliczeń platformy Azure ostatnią część identyfikatora zasobu, która ma nazwę wersji, musi być ustawiona na Latestwartość .
  • Nie można określić wersji, jeśli dystrybuujesz obraz do galerii obliczeń platformy Azure. Wersja jest automatycznie zwiększana.
  • Jeśli źródło jest ustawione na obraz z galerii obliczeniowej platformy Azure i jest ustawione na galerię obliczeniową platformy Azure, obraz galerii źródłowej i obraz galerii rozproszonej nie może być taki sam. Identyfikator definicji obrazu galerii obliczeniowej platformy Azure nie może być taki sam zarówno dla obrazu galerii źródłowej, jak i obrazu galerii rozproszonej.
  • Szablon obrazu powinien mieć wartość "Powodzenie" w provisioningStatepliku , co oznacza, że szablon został utworzony bez żadnych problemów. Jeśli szablon nie zostanie pomyślnie zainicjowany, nie będzie można utworzyć wyzwalacza.

Po skonfigurowaniu szablonu użyj następującego polecenia, aby przesłać konfigurację obrazu do usługi Azure Image Builder:

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

Aby upewnić się, że szablon obrazu został utworzony pomyślnie, możesz użyć następującego polecenia:

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

Uwaga

Podczas uruchamiania powyższego polecenia provisioningState powinien być wyświetlany komunikat "Powodzenie", co oznacza, że szablon został utworzony bez żadnych problemów. provisioningState Jeśli polecenie nie powiedzie się pomyślnie, nie będzie można utworzyć wyzwalacza przy użyciu szablonu obrazu.

Tworzenie wyzwalacza źródłowego

Pobierz przykładowy szablon wyzwalacza i skonfiguruj go przy użyciu zmiennych. Poniższy wyzwalacz uruchamia nową kompilację obrazu za każdym razem, gdy obraz źródłowy zostanie zaktualizowany.

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

Wymagania dotyczące wyzwalacza:

  • Lokalizacja w wyzwalaczu musi być taka sama jak lokalizacja w szablonie obrazu. Jest to wymaganie az resource create polecenia cmdlet.
  • Obecnie obsługujemy jeden z kind wyzwalaczy, który jest "SourceImage"
  • Obsługujemy tylko jeden wyzwalacz "SourceImage" na obraz. Jeśli masz już wyzwalacz "SourceImage" na obrazie, nie możesz utworzyć nowego.
  • Nie można zaktualizować kind pola do innego typu wyzwalacza. Musisz usunąć wyzwalacz i utworzyć go ponownie lub utworzyć inny wyzwalacz z odpowiednią konfiguracją.

Użyj następującego polecenia, aby dodać wyzwalacz do grupy zasobów.

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

Możesz również użyć następującego polecenia, aby sprawdzić, czy wyzwalacz został utworzony pomyślnie:

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

Uwaga

Podczas uruchamiania powyższego provisioningState polecenia polecenie powinno mieć wartość Succeeded, co oznacza, że wyzwalacz został utworzony bez żadnych problemów. W statuspliku kod powinien powiedzieć Healthy , a komunikat powinien powiedzieć Trigger is active.

Oczyszczanie zasobów

Usuwanie wyzwalacza

Użyj następującego polecenia, aby usunąć wyzwalacz:

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

Usuwanie szablonu obrazu

Użyj następującego polecenia, aby usunąć szablon obrazu:

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

Następne kroki

Aby uzyskać więcej informacji, zapoznaj się z dokumentacją szablonu konstruktora obrazów.