Jak włączyć automatyczne tworzenie obrazów za pomocą wyzwalaczy narzędzia Azure Image Builder
Wyzwalacze w narzędziu Azure Image Builder (AIB) umożliwiają automatyczne tworzenie obrazów po spełnieniu określonych kryteriów w potoku kompilacji.
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.
Uwaga
Aby zapobiec niepotrzebnym niepowodzeniom kompilacji, automatyczne tworzenie obrazów za pośrednictwem wyzwalaczy zostanie zdezaktywowane, jeśli kompilacja szablonu obrazu nie powiodła się wiele razy (ręcznie lub automatycznie wyzwolona). Nadal można ręcznie skompilować szablon obrazu, a po pomyślnym zakończeniu ręcznej kompilacji wyzwalacze automatyczne zostaną ponownie aktywowane.
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
Tworzenie galerii i definicji obrazu
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 włączyć automatyczne tworzenie obrazów w każdej wersji obrazu w galerii obliczeń platformy 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
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 naLatest
wartość . - 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
provisioningState
pliku , 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 status
pliku 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.