Share via


Erstellen eines Linux-Images und Verteilen des Images auf die Azure Compute Gallery mithilfe von Azure CLI

Gilt für: ✔️ Linux-VMs ✔️ Flexible Skalierungsgruppen

In diesem Abschnitt erfahren Sie, wie Sie mit Azure Image Builder und der Azure CLI eine Imageversion in einer Azure Compute Gallery (ehemals Shared Image Gallery) erstellen und wie Sie das Image dann global verteilen. Ebenso können Sie auch Azure PowerShell verwenden, um eine Imageversion zu erstellen.

In diesem Artikel wird eine Beispiel-JSON-Vorlage zur Konfiguration des Images verwendet. Die JSON-Datei befindet sich unter helloImageTemplateforSIG.json.

Die Vorlage verwendet sharedImage (freigegebenes Image) als Wert für den Abschnitt distribute der Vorlage, um das Image an die Azure Compute Gallery zu verteilen.

Registrieren Sie die Anbieter

Um den VM Image Builder zu verwenden, müssen Sie die Anbieter registrieren. Überprüfen Sie Ihre Registrierung, indem Sie die folgenden Befehle ausführen:

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

Wenn die Ausgabe nicht registriert lautet, führen Sie die folgenden Befehle aus:

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

Festlegen von Variablen und Berechtigungen

Da Sie einige Informationen wiederholt verwenden werden, erstellen Sie einige Variablen, um diese Informationen zu speichern.

VM Image Builder unterstützt das Erstellen von benutzerdefinierten Images nur in derselben Ressourcengruppe, in der sich auch das von der Quelle verwaltete Image befindet. Aktualisieren Sie im folgenden Beispiel den Namen der Ressourcengruppe so, dass er der gleichen Ressourcengruppe entspricht wie das von der Quelle verwaltete Image.

# 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

Erstellen Sie eine Variable für Ihre Abonnement-ID:

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

Erstellen Sie die Ressourcengruppe:

az group create -n $sigResourceGroup -l $location

Erstellen einer vom Benutzer zugewiesene Identität und Festlegen von Berechtigungen für die Ressourcengruppe

VM Image Builder verwendet die angegebene Benutzeridentität, um das Image in eine Azure Compute Gallery einzufügen. In diesem Beispiel erstellen Sie eine Azure-Rollendefinition mit spezifischen Aktionen für die Verteilung des Images. Die Rollendefinition wird dann der Benutzeridentität zugewiesen.

# 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

Zum Verwenden von VM Image Builder mit Azure Compute Gallery benötigen Sie einen vorhandenen Katalog und eine Imagedefinition. Der Katalog und die Imagedefinition werden nicht von VM Image Builder für Sie erstellt.

Wenn Sie noch nicht über einen zu verwendenden Katalog und eine Imagedefinition verfügen, erstellen Sie diese zunächst.

Erstellen Sie zunächst einen Katalog:

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

Erstellen Sie anschließend eine Imagedefinition:

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

Herunterladen und Konfigurieren der JSON-Datei

Laden Sie die JSON-Vorlage herunter, und konfigurieren Sie diese mit Ihren Variablen:

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

Erstellen der Imageversion

In diesem Abschnitt erstellen Sie die Imageversion im Katalog.

Übermitteln Sie die Imagekonfiguration an den Azure VM Image Builder-Dienst:

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

Starten Sie die Imageerstellung:

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

Es kann einige Momente dauern, um das Image zu erstellen und es in beide Regionen zu replizieren. Warten Sie den Abschluss dieses Teils ab, bevor Sie einen virtuellen Computer erstellen.

Erstellen des virtuellen Computers

Erstellen Sie den virtuellen Computer aus der Imageversion, die von VM Image Builder erstellt wurde.

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

Stellen Sie über Secure Shell (SSH) eine Verbindung zum virtuellen Computer her:

ssh aibuser@<publicIpAddress>

Sie sollten sehen, dass das Image angepasst wurde. Es wird eine Nachricht des Tages ausgegeben, sobald die SSH-Verbindung hergestellt wurde:

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

Bereinigen von Ressourcen

Hinweis

Wenn Sie jetzt die Imageversion erneut anpassen möchten, um eine neue Version desselben Images zu erstellen, überspringen Sie die hier beschriebenen Schritte, und gehen Sie zu Verwenden von VM Image Builder, um eine weitere Imageversion zu erstellen.

Wenn Sie die Ressourcen, die Sie wie in diesem Artikel beschrieben erstellt haben, nicht mehr benötigen, können Sie sie wie folgt löschen.

Dieser Prozess löscht sowohl das Image, das Sie erstellt haben, als auch alle anderen Ressourcendateien. Stellen Sie sicher, dass Sie diese Bereitstellung abgeschlossen haben, bevor Sie die Ressourcen löschen.

Beim Löschen von Katalogressourcen müssen Sie alle Imageversionen löschen, bevor Sie die Imagedefinition löschen können, mit der sie erstellt wurden. Sie müssen zunächst alle Imagedefinitionen im Katalog löschen, um den Katalog löschen zu können.

  1. Löschen Sie die VM Image Builder-Vorlage.

    az resource delete \
        --resource-group $sigResourceGroup \
        --resource-type Microsoft.VirtualMachineImages/imageTemplates \
        -n helloImageTemplateforSIG01
    
  2. Löschen Sie Berechtigungszuordnungen, Rollen und Identitäten.

    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. Rufen Sie die Imageversion ab, die von VM Image Builder erstellt wurde (sie beginnt immer mit 0.), und löschen Sie sie dann.

    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. Löschen Sie die Imagedefinition.

    az sig image-definition delete \
    -g $sigResourceGroup \
    --gallery-name $sigName \
    --gallery-image-definition $imageDefName \
    --subscription $subscriptionID
    
  5. Löschen Sie den Katalog.

    az sig delete -r $sigName -g $sigResourceGroup
    
  6. Löschen Sie die Ressourcengruppe.

    az group delete -n $sigResourceGroup -y
    

Nächste Schritte

Weitere Informationen zu Azure Compute Gallery.