Share via


Skapa en Linux-avbildning och distribuera den till ett Azure Compute-galleri

Gäller för: ✔️ Flexibla skalningsuppsättningar för virtuella Linux-datorer ✔️

Den här artikeln visar hur du kan använda Azure Image Builder och Azure CLI för att skapa en avbildningsversion i ett Azure Compute-galleri (tidigare kallat Delat bildgalleri) och sedan distribuera avbildningen globalt. Du kan också göra detta med Hjälp av Azure PowerShell.

Vi kommer att använda en .json-exempelmall för att konfigurera avbildningen. Den .json-fil som vi använder finns här: helloImageTemplateforSIG.json.

För att distribuera avbildningen till ett Azure Compute-galleri använder mallen sharedImage som värde för distribute avsnittet i mallen.

Registrera leverantörerna

Om du vill använda Azure Image Builder måste du registrera funktionen.

Kontrollera din registrering.

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

Om de inte säger registrerade kör du följande:

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

Ange variabler och behörigheter

Vi kommer att använda viss information upprepade gånger, så vi skapar några variabler för att lagra den informationen.

Image Builder har endast stöd för att skapa anpassade avbildningar i samma resursgrupp som den källhanterade avbildningen. Uppdatera resursgruppens namn i det här exemplet så att det är samma resursgrupp som källhanterad avbildning.

# 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

Skapa en variabel för ditt prenumerations-ID.

subscriptionID=$(az account show --query id --output tsv)

Skapa resursgruppen.

az group create -n $sigResourceGroup -l $location

Skapa en användartilldelad identitet och ange behörigheter för resursgruppen

Image Builder använder användaridentiteten som tillhandahålls för att mata in avbildningen i Azure Compute Gallery. I det här exemplet skapar du en Azure-rolldefinition som har detaljerade åtgärder för att distribuera avbildningen till galleriet. Rolldefinitionen tilldelas sedan till användaridentiteten.

# 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

Om du vill använda Image Builder med ett Azure Compute-galleri måste du ha ett befintligt galleri och en bilddefinition. Image Builder skapar inte galleriet och bilddefinitionen åt dig.

Om du inte redan har ett galleri och en bilddefinition att använda börjar du med att skapa dem. Skapa först ett galleri.

az sig create \
    -g $sigResourceGroup \
    --gallery-name $sigName

Skapa sedan en bilddefinition.

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

Ladda ned och konfigurera .json

Ladda ned .json-mallen och konfigurera den med dina variabler.

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

Skapa avbildningsversionen

Nästa del skapar avbildningsversionen i galleriet.

Skicka avbildningskonfigurationen till Azure Image Builder-tjänsten.

az resource create \
    --resource-group $sigResourceGroup \
    --properties @helloImageTemplateforSIG.json \
    --is-full-object \
    --resource-type Microsoft.VirtualMachineImages/imageTemplates \
    -n helloImageTemplateforSIG01

Starta avbildningsversionen.

az resource invoke-action \
     --resource-group $sigResourceGroup \
     --resource-type  Microsoft.VirtualMachineImages/imageTemplates \
     -n helloImageTemplateforSIG01 \
     --action Run

Det kan ta en stund att skapa avbildningen och replikera den till båda regionerna. Vänta tills den här delen är klar innan du går vidare till att skapa en virtuell dator.

Skapa den virtuella datorn

Skapa en virtuell dator från avbildningsversionen som skapades av 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

SSH till den virtuella datorn.

ssh aibuser@<publicIpAddress>

Du bör se att avbildningen har anpassats med dagens meddelande så snart SSH-anslutningen har upprättats!

*******************************************************
**            This VM was built from the:            **
**      !! AZURE VM IMAGE BUILDER Custom Image !!    **
**         You have just been Customized :-)         **
*******************************************************

Rensa resurser

Om du nu vill prova att anpassa avbildningsversionen för att skapa en ny version av samma avbildning hoppar du över nästa steg och går vidare till Använd Azure Image Builder för att skapa en annan avbildningsversion.

Detta tar bort avbildningen som skapades, tillsammans med alla andra resursfiler. Kontrollera att du är klar med den här distributionen innan du tar bort resurserna.

När du tar bort galleriresurser måste du ta bort alla avbildningsversioner innan du kan ta bort den bilddefinition som används för att skapa dem. Om du vill ta bort ett galleri måste du först ha tagit bort alla bilddefinitioner i galleriet.

Ta bort mallen för avbildningsverktyget.

az resource delete \
    --resource-group $sigResourceGroup \
    --resource-type Microsoft.VirtualMachineImages/imageTemplates \
    -n helloImageTemplateforSIG01

Ta bort behörighetstilldelningar, roller och identiteter

az role assignment delete \
    --assignee $imgBuilderCliId \
    --role "$imageRoleDefName" \
    --scope /subscriptions/$subscriptionID/resourceGroups/$sigResourceGroup

az role definition delete --name "$imageRoleDefName"

az identity delete --ids $imgBuilderId

Hämta avbildningsversionen som skapats av image builder, detta börjar alltid med 0.och tar sedan bort avbildningsversionen

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

Ta bort bilddefinitionen.

az sig image-definition delete \
   -g $sigResourceGroup \
   --gallery-name $sigName \
   --gallery-image-definition $imageDefName \
   --subscription $subscriptionID

Ta bort galleriet.

az sig delete -r $sigName -g $sigResourceGroup

Ta bort resursgruppen.

az group delete -n $sigResourceGroup -y

Nästa steg

Läs mer om Azure Compute Galleries.