Tworzenie obrazu systemu Linux i dystrybuowanie go do galerii obliczeń platformy Azure
Dotyczy: ✔️ Maszyny wirtualne z systemem Linux — elastyczne zestawy skalowania ✔️
W tym artykule pokazano, jak za pomocą narzędzia Azure Image Builder i interfejsu wiersza polecenia platformy Azure utworzyć wersję obrazu w galerii usługi Azure Compute ( wcześniej znanej jako Galeria obrazów udostępnionych), a następnie rozpowszechnić obraz globalnie. Można to również zrobić przy użyciu programu Azure PowerShell.
Użyjemy przykładowego szablonu .json do skonfigurowania obrazu. Używany plik .json to: helloImageTemplateforSIG.json.
Aby rozpowszechnić obraz w galerii obliczeniowej platformy Azure, szablon używa funkcji sharedImage jako wartości distribute
sekcji szablonu.
Rejestrowanie dostawców
Aby użyć narzędzia Azure Image Builder, musisz zarejestrować tę funkcję.
Sprawdź rejestrację.
az provider show -n Microsoft.VirtualMachineImages | grep registrationState
az provider show -n Microsoft.KeyVault | grep registrationState
az provider show -n Microsoft.Compute | grep registrationState
az provider show -n Microsoft.Storage | grep registrationState
az provider show -n Microsoft.Network | grep registrationState
az provider show -n Microsoft.ContainerInstance | grep registrationState
Jeśli nie zostaną zarejestrowane, uruchom następujące polecenie:
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
Ustawianie zmiennych i uprawnień
Będziemy używać niektórych informacji wielokrotnie, więc utworzymy pewne zmienne do przechowywania tych informacji.
Program Image Builder obsługuje tylko tworzenie obrazów niestandardowych w tej samej grupie zasobów co źródłowy obraz zarządzany. Zaktualizuj nazwę grupy zasobów w tym przykładzie, aby być tą samą grupą zasobów co źródłowy obraz zarządzany.
# Resource group name - we are using ibLinuxGalleryRG in this example
sigResourceGroup=ibLinuxGalleryRG
# Datacenter location - we are using West US 2 in this example
location=westus2
# Additional region to replicate the image to - we are using East US in this example
additionalregion=eastus
# name of the Azure Compute Gallery - in this example we are using myGallery
sigName=myIbGallery
# name of the image definition to be created - in this example we are using myImageDef
imageDefName=myIbImageDef
# image distribution metadata reference name
runOutputName=aibLinuxSIG
Utwórz zmienną dla identyfikatora subskrypcji.
subscriptionID=$(az account show --query id --output tsv)
Utwórz grupę zasobów.
az group create -n $sigResourceGroup -l $location
Tworzenie tożsamości przypisanej przez użytkownika i ustawianie uprawnień w grupie zasobów
Narzędzie Image Builder używa tożsamości użytkownika udostępnionej do wstrzykiwania obrazu do galerii obliczeń platformy Azure. W tym przykładzie utworzysz definicję roli platformy Azure zawierającą szczegółowe akcje umożliwiające dystrybucję obrazu do galerii. Definicja roli zostanie następnie przypisana do tożsamości użytkownika.
# create user assigned identity for image builder to access the storage account where the script is located
identityName=aibBuiUserId$(date +'%s')
az identity create -g $sigResourceGroup -n $identityName
# get identity id
imgBuilderCliId=$(az identity show -g $sigResourceGroup -n $identityName --query clientId -o tsv)
# get the user identity URI, needed for the template
imgBuilderId=/subscriptions/$subscriptionID/resourcegroups/$sigResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$identityName
# this command will download an Azure role definition template, and update the template with the parameters specified earlier.
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleImageCreation.json -o aibRoleImageCreation.json
imageRoleDefName="Azure Image Builder Image Def"$(date +'%s')
# update the definition
sed -i -e "s/<subscriptionID>/$subscriptionID/g" aibRoleImageCreation.json
sed -i -e "s/<rgName>/$sigResourceGroup/g" aibRoleImageCreation.json
sed -i -e "s/Azure Image Builder Service Image Creation Role/$imageRoleDefName/g" aibRoleImageCreation.json
# create role definitions
az role definition create --role-definition ./aibRoleImageCreation.json
# grant role definition to the user assigned identity
az role assignment create \
--assignee $imgBuilderCliId \
--role "$imageRoleDefName" \
--scope /subscriptions/$subscriptionID/resourceGroups/$sigResourceGroup
Tworzenie definicji obrazu i galerii
Aby używać narzędzia Image Builder z galerią obliczeń platformy Azure, musisz mieć istniejącą galerię i definicję obrazu. Narzędzie Image Builder nie utworzy 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 $sigResourceGroup \
--gallery-name $sigName
Następnie utwórz definicję obrazu.
az sig image-definition create \
-g $sigResourceGroup \
--gallery-name $sigName \
--gallery-image-definition $imageDefName \
--publisher myIbPublisher \
--offer myOffer \
--sku 18.04-LTS \
--os-type Linux
Pobieranie i konfigurowanie .json
Pobierz szablon .json i skonfiguruj go przy użyciu zmiennych.
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/quickquickstarts/1_Creating_a_Custom_Linux_Shared_Image_Gallery_Image/helloImageTemplateforSIG.json -o helloImageTemplateforSIG.json
sed -i -e "s/<subscriptionID>/$subscriptionID/g" helloImageTemplateforSIG.json
sed -i -e "s/<rgName>/$sigResourceGroup/g" helloImageTemplateforSIG.json
sed -i -e "s/<imageDefName>/$imageDefName/g" helloImageTemplateforSIG.json
sed -i -e "s/<sharedImageGalName>/$sigName/g" helloImageTemplateforSIG.json
sed -i -e "s/<region1>/$location/g" helloImageTemplateforSIG.json
sed -i -e "s/<region2>/$additionalregion/g" helloImageTemplateforSIG.json
sed -i -e "s/<runOutputName>/$runOutputName/g" helloImageTemplateforSIG.json
sed -i -e "s%<imgBuilderId>%$imgBuilderId%g" helloImageTemplateforSIG.json
Tworzenie wersji obrazu
W następnej części zostanie utworzona wersja obrazu w galerii.
Prześlij konfigurację obrazu do usługi Azure Image Builder.
az resource create \
--resource-group $sigResourceGroup \
--properties @helloImageTemplateforSIG.json \
--is-full-object \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateforSIG01
Uruchom kompilację obrazu.
az resource invoke-action \
--resource-group $sigResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateforSIG01 \
--action Run
Tworzenie obrazu i replikowanie go do obu regionów może trochę potrwać. Poczekaj na zakończenie tej części przed przejściem do tworzenia maszyny wirtualnej.
Tworzenie maszyny wirtualnej
Utwórz maszynę wirtualną na podstawie wersji obrazu utworzonej przez program Azure Image Builder.
az vm create \
--resource-group $sigResourceGroup \
--name myAibGalleryVM \
--admin-username aibuser \
--location $location \
--image "/subscriptions/$subscriptionID/resourceGroups/$sigResourceGroup/providers/Microsoft.Compute/galleries/$sigName/images/$imageDefName/versions/latest" \
--generate-ssh-keys
Nawiąż połączenie SSH z maszyną wirtualną.
ssh aibuser@<publicIpAddress>
Powinien zostać wyświetlony obraz dostosowany z komunikatem dnia po nawiązaniu połączenia SSH.
*******************************************************
** This VM was built from the: **
** !! AZURE VM IMAGE BUILDER Custom Image !! **
** You have just been Customized :-) **
*******************************************************
Czyszczenie zasobów
Jeśli chcesz teraz spróbować ponownie skompilować wersję obrazu, aby utworzyć nową wersję tego samego obrazu, pomiń następne kroki i przejdź do tematu Używanie narzędzia Azure Image Builder do utworzenia innej wersji obrazu.
Spowoduje to usunięcie utworzonego obrazu wraz ze wszystkimi innymi plikami zasobów. Przed usunięciem zasobów upewnij się, że zostało to ukończone.
Podczas usuwania zasobów galerii należy usunąć wszystkie wersje obrazów, zanim będzie można usunąć definicję obrazu użytą do ich utworzenia. Aby usunąć galerię, musisz najpierw usunąć wszystkie definicje obrazów w galerii.
Usuń szablon konstruktora obrazów.
az resource delete \
--resource-group $sigResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateforSIG01
Usuwanie przypisań uprawnień, ról i tożsamości
az role assignment delete \
--assignee $imgBuilderCliId \
--role "$imageRoleDefName" \
--scope /subscriptions/$subscriptionID/resourceGroups/$sigResourceGroup
az role definition delete --name "$imageRoleDefName"
az identity delete --ids $imgBuilderId
Pobierz wersję obrazu utworzoną przez konstruktora obrazów. Zawsze zaczyna się od 0.
, a następnie usuń wersję obrazu
sigDefImgVersion=$(az sig image-version list \
-g $sigResourceGroup \
--gallery-name $sigName \
--gallery-image-definition $imageDefName \
--subscription $subscriptionID --query [].'name' -o json | grep 0. | tr -d '"')
az sig image-version delete \
-g $sigResourceGroup \
--gallery-image-version $sigDefImgVersion \
--gallery-name $sigName \
--gallery-image-definition $imageDefName \
--subscription $subscriptionID
Usuń definicję obrazu.
az sig image-definition delete \
-g $sigResourceGroup \
--gallery-name $sigName \
--gallery-image-definition $imageDefName \
--subscription $subscriptionID
Usuń galerię.
az sig delete -r $sigName -g $sigResourceGroup
Usuń grupę zasobów.
az group delete -n $sigResourceGroup -y
Następne kroki
Dowiedz się więcej o galeriach obliczeniowych platformy Azure.