Skapa en Linux-avbildning och distribuera den till ett Azure Compute-galleri med hjälp av Azure CLI

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

I den här artikeln får du lära dig hur du använder Azure VM Image Builder och Azure CLI för att skapa en avbildningsversion i ett Azure Compute-galleri (tidigare delat bildgalleri) och sedan distribuera avbildningen globalt. Du kan också skapa en avbildningsversion med hjälp av Azure PowerShell.

Den här artikeln använder en JSON-exempelmall för att konfigurera avbildningen. JSON-filen finns på 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 VM Image Builder måste du registrera leverantörerna. Kontrollera registreringen genom att köra följande kommandon:

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

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

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

Eftersom du kommer att använda viss information upprepade gånger skapar du vissa variabler för att lagra den informationen.

Vm Image Builder har endast stöd för att skapa anpassade avbildningar i samma resursgrupp som den källhanterade avbildningen. I följande exempel uppdaterar du resursgruppens namn så att det är samma resursgrupp som din källhanterade avbildning.

# Resource group name - ibLinuxGalleryRG in this example
sigResourceGroup=ibLinuxGalleryRG
# Datacenter location - West US 2 in this example
location=westus2
# Additional region to replicate the image to - East US in this example
additionalregion=eastus
# Name of the Azure Compute Gallery - myGallery in this example
sigName=myIbGallery
# Name of the image definition to be created - myImageDef in this example
imageDefName=myIbImageDef
# Reference name in the image distribution metadata
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

Vm Image Builder använder den angivna användaridentiteten för att mata in avbildningen i ett Azure Compute-galleri. I det här exemplet skapar du en Azure-rolldefinition med specifika åtgärder för att distribuera avbildningen. Rolldefinitionen tilldelas sedan till användaridentiteten.

# 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 $sigResourceGroup -n $identityName

# Get the identity ID
imgBuilderCliId=$(az identity show -g $sigResourceGroup -n $identityName --query clientId -o tsv)

# Get the user identity URI that's needed for the template
imgBuilderId=/subscriptions/$subscriptionID/resourcegroups/$sigResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$identityName

# Download an Azure role-definition template, and update the template with the parameters that were 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 a 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 VM Image Builder med Azure Compute Gallery måste du ha ett befintligt galleri och en bilddefinition. Vm Image Builder skapar inte galleriet och avbildningsdefinitionen å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 20_04-lts-gen2 \
   --os-type Linux \
   --hyper-v-generation V2 \
   --features SecurityType=TrustedLaunchSupported

Ladda ned och konfigurera JSON-filen

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

I det här avsnittet skapar du avbildningsversionen i galleriet.

Skicka avbildningskonfigurationen till azure VM 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 för att skapa en virtuell dator.

Skapa den virtuella datorn

Skapa den virtuella datorn från avbildningsversionen som skapades av VM 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" \
  --security-type TrustedLaunch \
  --generate-ssh-keys

Anslut till den virtuella datorn via Secure Shell (SSH):

ssh aibuser@<publicIpAddress>

Så snart SSH-anslutningen har upprättats bör du se att avbildningen har anpassats med dagens meddelande:

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

Rensa dina resurser

Kommentar

Om du nu vill försöka anpassa avbildningsversionen igen för att skapa en ny version av samma avbildning hoppar du över steget som beskrivs här och går till Använd VM Image Builder för att skapa en annan avbildningsversion.

Om du inte längre behöver de resurser som skapades när du följde processen i den här artikeln kan du ta bort dem genom att göra följande.

Den här processen tar bort både avbildningen som du skapade och alla andra resursfiler. Kontrollera att du har slutfört distributionen innan du tar bort resurserna.

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

  1. Ta bort mallen för VM Image Builder.

    az resource delete \
        --resource-group $sigResourceGroup \
        --resource-type Microsoft.VirtualMachineImages/imageTemplates \
        -n helloImageTemplateforSIG01
    
  2. 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
    
  3. Hämta avbildningsversionen som skapades av VM Image Builder (den börjar alltid med 0.) och ta sedan bort den.

    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
    
  4. Ta bort bilddefinitionen.

    az sig image-definition delete \
    -g $sigResourceGroup \
    --gallery-name $sigName \
    --gallery-image-definition $imageDefName \
    --subscription $subscriptionID
    
  5. Ta bort galleriet.

    az sig delete -r $sigName -g $sigResourceGroup
    
  6. Ta bort resursgruppen.

    az group delete -n $sigResourceGroup -y
    

Nästa steg

Läs mer om Azure Compute Gallery.