Erstellen einer Windows-VM mithilfe von Azure VM Image Builder
Gilt für: ✔️ Windows-VMs
In diesem Artikel erfahren Sie, wie Sie ein angepasstes Windows-Image mithilfe von VM Image Builder erstellen. Im Beispiel in diesem Artikel werden Anpassungen für das Image verwendet:
- PowerShell (ScriptUri): Lädt ein PowerShell-Skript herunter und führt es aus.
- Windows-Neustart: Startet die VM neu.
- PowerShell (inline): Führt einen bestimmten Befehl aus. In diesem Beispiel wird mit
mkdir c:\\buildActions
ein Verzeichnis auf der VM erstellt. - Datei: Kopiert eine Datei aus GitHub auf die VM. In diesem Beispiel wird index.md in
c:\buildArtifacts\index.html
auf den virtuellen Computer kopiert. buildTimeoutInMinutes
: Gibt eine Buildzeit in Minuten an. Der Standardwert ist 240 Minuten. Sie können diesen Wert erhöhen, um zeitintensivere Builds zuzulassen. Der minimal zulässige Wert ist 6 Minuten. Werte, die kürzer als 6 Minuten sind, verursachen Fehler.vmProfile
: Gibt einevmSize
und Netzwerkeigenschaften an.osDiskSizeGB
: Kann verwendet werden, um die Größe eines Images zu erhöhen.identity
. Gibt eine Identität an, die Azure Image Builder während des Buildprozesses verwenden soll.
Verwenden Sie die folgende JSON-Beispielvorlage, um das Image zu konfigurieren: helloImageTemplateWin.json.
Hinweis
Windows-Benutzer können die folgenden Azure CLI-Beispiele in Azure Cloud Shell unter Verwendung von Bash ausführen.
Registrieren Sie die Anbieter
Um den VM Image Builder zu verwenden, müssen Sie das Feature registrieren. Überprüfen Sie Ihre Registrierung, indem Sie die folgenden Befehle ausführen:
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 -o json | grep registrationState
Wenn die Ausgabe nicht registered (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
Da Sie einige Informationen wiederholt verwenden werden, erstellen Sie einige Variablen, um diese Informationen zu speichern:
# Resource group name - we're using myImageBuilderRG in this example
imageResourceGroup='myWinImgBuilderRG'
# Region location
location='WestUS2'
# Run output name
runOutputName='aibWindows'
# The name of the image to be created
imageName='aibWinImage'
Erstellen Sie eine Variable für Ihre Abonnement-ID:
subscriptionID=$(az account show --query id --output tsv)
Erstellen der Ressourcengruppe
Verwenden Sie die folgende Ressourcengruppe, um das Imagekonfigurationsvorlagen-Artefakt und das Image zu speichern:
az group create -n $imageResourceGroup -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 die Ressourcengruppe einzufügen. In diesem Beispiel erstellen Sie eine Azure-Rollendefinition mit spezifischen Berechtigungen für die Verteilung des Images. Die Rollendefinition wird dann der Benutzeridentität zugewiesen.
Erstellen einer benutzerseitig zugewiesenen verwalteten Identität und Gewähren von Berechtigungen
Erstellen Sie eine benutzerseitig zugewiesene Identität, sodass VM Image Builder auf das Speicherkonto zugreifen kann, in dem das Skript gespeichert ist.
identityName=aibBuiUserId$(date +'%s')
az identity create -g $imageResourceGroup -n $identityName
# Get the identity ID
imgBuilderCliId=$(az identity show -g $imageResourceGroup -n $identityName --query clientId -o tsv)
# Get the user identity URI that's needed for the template
imgBuilderId=/subscriptions/$subscriptionID/resourcegroups/$imageResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$identityName
# Download the preconfigured role definition example
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>%$imageResourceGroup%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/$imageResourceGroup
Herunterladen der Vorlage für die Imagekonfiguration
Wir haben eine parametrisierte Imagekonfigurationsvorlage erstellt, die Sie verwenden können. Laden Sie die JSON-Beispieldatei herunter, und konfigurieren Sie sie mit den zuvor festgelegten Variablen.
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/quickquickstarts/0_Creating_a_Custom_Windows_Managed_Image/helloImageTemplateWin.json -o helloImageTemplateWin.json
sed -i -e "s%<subscriptionID>%$subscriptionID%g" helloImageTemplateWin.json
sed -i -e "s%<rgName>%$imageResourceGroup%g" helloImageTemplateWin.json
sed -i -e "s%<region>%$location%g" helloImageTemplateWin.json
sed -i -e "s%<imageName>%$imageName%g" helloImageTemplateWin.json
sed -i -e "s%<runOutputName>%$runOutputName%g" helloImageTemplateWin.json
sed -i -e "s%<imgBuilderId>%$imgBuilderId%g" helloImageTemplateWin.json
Sie können dieses Beispiel im Terminal mithilfe eines Text-Editors wie vi
ändern.
vi helloImageTemplateWin.json
Hinweis
Geben Sie für das Quellimage immer eine Version an. Sie können nicht latest
als Version angeben.
Wenn Sie die Ressourcengruppe hinzufügen oder ändern, in der das Image verteilt wird, müssen Sie sicherstellen, dass die Berechtigungen für die Ressourcengruppe festgelegt sind.
Erstellen des Images
Senden Sie die Imagekonfiguration an den VM Image Builder-Dienst, indem Sie die folgenden Befehle ausführen:
az resource create \
--resource-group $imageResourceGroup \
--properties @helloImageTemplateWin.json \
--is-full-object \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateWin01
Wenn Sie fertig sind, wird eine Erfolgsnachricht an die Konsole zurückgegeben, und eine VM Image Builder-Konfigurationsvorlage wird in der $imageResourceGroup
erstellt.
Außerdem erstellt VM Image Builder im Hintergrund eine Stagingressourcengruppe in Ihrem Abonnement. Diese Ressourcengruppe wird verwendet, um das Image im folgenden Format zu erstellen: IT_<DestinationResourceGroup>_<TemplateName>
.
Hinweis
Wenn das Löschen erforderlich ist, löschen Sie die Stagingressourcengruppe nicht direkt. Löschen Sie zunächst das Imagevorlagenartefakt, das anschließend die Stagingressourcengruppe löscht. Andernfalls kann die Imagevorlage in einen fehlerhaften Zustand übergehen.
Wenn der Dienst einen Fehler meldet, wenn Sie die Imagekonfigurationsvorlage übermitteln, gehen Sie wie folgt vor:
- Weitere Informationen finden Sie unter Problembehandlung des Azure VM Image Builder-Diensts.
- Bevor Sie versuchen, die Vorlage erneut zu übermitteln, löschen Sie sie, indem Sie die folgenden Befehle ausführen:
az resource delete \
--resource-group $imageResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateWin01
Starten des Imagebuilds
Starten Sie den Imagebuildprozess mithilfe von az resource invoke-action.
az resource invoke-action \
--resource-group $imageResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateWin01 \
--action Run
Warten Sie, bis der Build abgeschlossen ist.
Wenn Fehler auftreten, lesen Sie Problembehandlung des Azure VM Image Builder-Diensts.
Erstellen des virtuellen Computers
Erstellen Sie die VM mithilfe des erstellten Images. Ersetzen Sie im folgenden Code das <Kennwort> durch Ihr eigenes Kennwort für den aibuser auf der VM.
az vm create \
--resource-group $imageResourceGroup \
--name aibImgWinVm00 \
--admin-username aibuser \
--admin-password <password> \
--image $imageName \
--location $location
Überprüfen der Anpassung
Stellen Sie eine Remotedesktopverbindung mit der VM mit dem Benutzernamen und dem Kennwort her, die Sie beim Erstellen der VM festgelegt haben. Öffnen Sie auf der VM ein Eingabeaufforderungsfenster, und geben Sie dann Folgendes ein:
dir c:\
Die folgenden beiden Verzeichnisse werden während der Imageanpassung erstellt:
- buildActions
- buildArtifacts
Bereinigen von Ressourcen
Wenn Sie fertig sind, löschen Sie die von Ihnen erstellten Ressourcen.
Löschen Sie die VM Image Builder-Vorlage.
az resource delete \ --resource-group $imageResourceGroup \ --resource-type Microsoft.VirtualMachineImages/imageTemplates \ -n helloImageTemplateWin01
Löschen Sie die Rollenzuweisung, die Rollendefinition und die Benutzeridentität.
az role assignment delete \ --assignee $imgBuilderCliId \ --role "$imageRoleDefName" \ --scope /subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup az role definition delete --name "$imageRoleDefName" az identity delete --ids $imgBuilderId
Löschen Sie die Imageressourcengruppe.
az group delete -n $imageResourceGroup
Nächste Schritte
Weitere Informationen zu den Komponenten der in diesem Artikel verwendeten JSON-Datei finden Sie in der VM Image Builder-Vorlagenreferenz.