Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird gezeigt, wie Sie eine Azure VM Image Builder-Vorlage verwenden, um ein benutzerdefiniertes VM-Image in Azure Compute Gallery zu erstellen und global zu verteilen. Anschließend können Sie das Image verwenden, um Entwicklerfelder in Microsoft Dev Box zu erstellen.
Standardisierte VM-Images können Ihnen helfen, konsistente Entwicklungsboxbereitstellungen sicherzustellen, indem sie vordefinierte Sicherheit, Konfiguration und Software einschließen. Das manuelle Einrichten einer Imageerstellungspipeline ist jedoch zeitaufwändig und komplex, und das Erstellen von benutzerdefinierten VM-Images kann schwierig und unzuverlässig sein.
Azure VM Image Builder ist ein verwalteter Dienst, der auf HashiCorp Packer basiert und das Erstellen von VM-Images für Entwicklungsumgebungen vereinfacht. Die Image Builder-Vorlage in diesem Artikel enthält Anpassungsschritte zum Installieren von Visual Studio Code und Chocolatey.
VM Image Builder kann:
- Manuelle oder komplexe Tools und Prozesse abstrahieren und Azure-spezifische Anforderungen verbergen. Verallgemeinern Sie zum Beispiel ein Image, indem Sie
sysprepausführen, aber fortgeschrittenen Benutzern die Möglichkeit bieten, es zu überschreiben. - Arbeiten Sie mit bestehenden Build-Pipelines für Images. Sie können VM Image Builder aus Ihrer Pipeline aufrufen oder eine Azure VM Image Builder-Dienstaufgabe in Azure Pipelines verwenden.
- Sammeln Sie Anpassungsdaten aus verschiedenen Quellen, sodass Sie sie nicht selbst sammeln müssen.
- Integrieren Sie sich in die Azure Compute Gallery, um ein Imageverwaltungssystem für die globale Verteilung, Replikation, Verwaltung von Versionen und Skalierung zu erstellen. Sie können ein Image sowohl als virtuelle Festplatte als auch als verwaltetes Image verteilen, ohne es neu zu erstellen.
Wichtig
Microsoft Dev Box unterstützt nur Bilder, die den Sicherheitstyp "Vertrauenswürdiger Start" verwenden.
Voraussetzungen
Das Beispiel in diesem Artikel verwendet Azure PowerShell. Sie können auch die Azure CLI verwenden.
| Kategorie | Anforderungen |
|---|---|
| Tools und Berechtigungen | Eine Azure-Ressourcengruppe, für die Sie über Berechtigungen "Besitzer " oder "Mitwirkender " verfügen. |
| Tools | Azure PowerShell 6.0 oder höher installiert. Anweisungen finden Sie unter Installieren von Azure PowerShell unter Windows. |
Einrichten von Tools und Rollen
Zum Einrichten von Tools und Rollen führen Sie folgende Aktionen aus:
- Installieren Sie die erforderlichen Azure PowerShell-Module.
- Legen Sie Variablen für Informationen fest, die Sie mehrmals verwenden.
- Registrieren Sie die erforderlichen Azure-Ressourcenanbieter.
- Erstellen Sie eine Benutzeridentität für Ihre Ressourcengruppe, und weisen Sie sie einer Rolle zu, mit der Bilder verteilt werden können.
Installieren von PowerShell-Modulen
Installieren Sie die erforderlichen PowerShell-Module, indem Sie den folgenden Befehl ausführen:
'Az.ImageBuilder', 'Az.ManagedServiceIdentity' | ForEach-Object {Install-Module -Name $_ -AllowPrerelease}
Antworten Sie Y auf die Eingabeaufforderungen zu nicht vertrauenswürdigen Repositorys.
Festlegen von Variablen
Erstellen Sie Variablen zum Speichern von Informationen, die Sie mehrmals verwenden. Führen Sie den folgenden Code aus, ersetzen Sie <resource-group> durch den Namen Ihrer Ressourcengruppe und <location> durch die Azure-Region, die Sie verwenden möchten.
# Get existing context
$currentAzContext = Get-AzContext
# Get your current subscription ID
$subscriptionID=$currentAzContext.Subscription.Id
# Destination image resource group
$imageResourceGroup="<resource-group>"
# Location
$location="<location>"
# Image distribution metadata reference name
$runOutputName="aibCustWinManImg01"
# Image template name
$imageTemplateName="vscodeWinTemplate"
Registrieren von Azure-Ressourcenanbietern
Um VM Image Builder zu verwenden, müssen die folgenden Azure-Ressourcenanbieter registriert werden:
Microsoft.VirtualMachineImagesMicrosoft.ComputeMicrosoft.NetworkMicrosoft.StorageMicrosoft.KeyVaultMicrosoft.ContainerInstance
Überprüfen Sie die Anbieterregistrierungen, indem Sie den folgenden Befehl ausführen:
Get-AzResourceProvider -ProviderNamespace "Microsoft.VirtualMachineImages", "Microsoft.Compute", "Microsoft.Network", "Microsoft.Storage", "Microsoft.KeyVault", "Microsoft.ContainerInstance" | Format-table -Property ProviderNamespace,RegistrationStateWenn eine der Anbieterregistrierungen nicht
Registeredzurückgibt, registrieren Sie den Anbieter, indem Sie denRegister-AzResourceProvider-Befehl ausführen. Im folgenden Beispiel wird derMicrosoft.VirtualMachineImagesRessourcenanbieter registriert.Register-AzResourceProvider -ProviderNamespace Microsoft.VirtualMachineImages
Erstellen und Zuweisen einer Benutzeridentität
Erstellen Sie eine Azure-Rollendefinition, mit der das Image verteilt werden kann. Erstellen Sie dann eine vom Benutzer zugewiesene Identität für Ihre Ressourcengruppe, und weisen Sie der Benutzeridentität die Rolle zu. DER VM Image Builder verwendet die Benutzeridentität, um das Image im Azure Compute Gallery zu speichern.
Führen Sie den folgenden Code aus, um eine Azure-Rollendefinition und Benutzeridentität zu erstellen.
# Set up a unique role definition name $timeInt=$(get-date -UFormat "%s") $imageRoleDefName="Azure Image Builder Image Def"+$timeInt $identityName="aibIdentity"+$timeInt # Create an identity New-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName -Location $location $identityNameResourceId=$(Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).Id $identityNamePrincipalId=$(Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).PrincipalIdFühren Sie den folgenden Code aus, um eine Azure-Rollendefinitionsvorlage herunterzuladen, die verteilung eines Bilds zu ermöglichen, die Vorlage mit Ihren Parametern zu aktualisieren und die Rolle der Benutzeridentität zuzuweisen.
$aibRoleImageCreationUrl="https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleImageCreation.json" $aibRoleImageCreationPath = "aibRoleImageCreation.json" # Download the configuration Invoke-WebRequest -Uri $aibRoleImageCreationUrl -OutFile $aibRoleImageCreationPath -UseBasicParsing ((Get-Content -path $aibRoleImageCreationPath -Raw) -replace '<subscriptionID>',$subscriptionID) | Set-Content -Path $aibRoleImageCreationPath ((Get-Content -path $aibRoleImageCreationPath -Raw) -replace '<rgName>', $imageResourceGroup) | Set-Content -Path $aibRoleImageCreationPath ((Get-Content -path $aibRoleImageCreationPath -Raw) -replace 'Azure Image Builder Service Image Creation Role', $imageRoleDefName) | Set-Content -Path $aibRoleImageCreationPath # Create a role definition New-AzRoleDefinition -InputFile ./aibRoleImageCreation.json # Grant the role definition to the VM Image Builder service principal New-AzRoleAssignment -ObjectId $identityNamePrincipalId -RoleDefinitionName $imageRoleDefName -Scope "/subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup"
Erstellen einer Galerie- und VM-Image-Builder-Vorlage
Um VM Image Builder mit Azure Compute Gallery zu verwenden, benötigen Sie einen Katalog und eine Imagedefinition. Die folgenden Schritte erstellen eine neue Katalog- und Imagedefinition und passen eine VM Image Builder-Vorlage an.
Führen Sie die folgenden Befehle aus, um einen neuen Katalog und eine Imagedefinition mit dem erforderlichen vertrauenswürdigen Startsicherheitstyp für ein Windows 365-Image zu erstellen.
# Gallery name $galleryName= "devboxGallery" # Image definition name $imageDefName ="vscodeImageDef" # Second replication region $replRegion2="eastus" # Create the gallery New-AzGallery -GalleryName $galleryName -ResourceGroupName $imageResourceGroup -Location $location $SecurityType = @{Name='SecurityType';Value='TrustedLaunch'} $features = @($SecurityType) # Create the image definition New-AzGalleryImageDefinition -GalleryName $galleryName -ResourceGroupName $imageResourceGroup -Location $location -Name $imageDefName -OsState generalized -OsType Windows -Publisher 'myCompany' -Offer 'vscodebox' -Sku '1-0-0' -Feature $features -HyperVGeneration "V2"Kopieren Sie die folgende Azure Resource Manager-Vorlage für vm Image Builder, und fügen Sie sie in eine neue Datei ein. Speichern Sie die Datei an einem Speicherort wie c:\temp\mytemplate.js ein, und schließen Sie die Datei.
Die Vorlage definiert das angewandte Quellimage und die Anpassungen, installiert Chocolatey und Visual Studio Code und gibt den Speicherort des Images an.
{ "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "imageTemplateName": { "type": "string" }, "api-version": { "type": "string" }, "svclocation": { "type": "string" } }, "variables": {}, "resources": [ { "name": "[parameters('imageTemplateName')]", "type": "Microsoft.VirtualMachineImages/imageTemplates", "apiVersion": "[parameters('api-version')]", "location": "[parameters('svclocation')]", "dependsOn": [], "tags": { "imagebuilderTemplate": "win11multi", "userIdentity": "enabled" }, "identity": { "type": "UserAssigned", "userAssignedIdentities": { "<imgBuilderId>": {} } }, "properties": { "buildTimeoutInMinutes": 100, "vmProfile": { "vmSize": "Standard_DS2_v2", "osDiskSizeGB": 127 }, "source": { "type": "PlatformImage", "publisher": "MicrosoftWindowsDesktop", "offer": "Windows-11", "sku": "win11-21h2-ent", "version": "latest" }, "customize": [ { "type": "PowerShell", "name": "Install Choco and VS Code", "inline": [ "Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))", "choco install -y vscode" ] } ], "distribute": [ { "type": "SharedImage", "galleryImageId": "/subscriptions/<subscriptionID>/resourceGroups/<rgName>/providers/Microsoft.Compute/galleries/<sharedImageGalName>/images/<imageDefName>", "runOutputName": "<runOutputName>", "artifactTags": { "source": "azureVmImageBuilder", "baseosimg": "win11multi" }, "replicationRegions": [ "<region1>", "<region2>" ] } ] } } ] }Konfigurieren Sie die neue Vorlage mit Ihren Einstellungen, indem Sie den folgenden Code ausführen und
<template-location>durch den Speicherort und Namen Ihrer Vorlagendatei ersetzen.$templateFilePath = "<template-location>" (Get-Content -path $templateFilePath -Raw ) -replace '<subscriptionID>',$subscriptionID | Set-Content -Path $templateFilePath (Get-Content -path $templateFilePath -Raw ) -replace '<rgName>',$imageResourceGroup | Set-Content -Path $templateFilePath (Get-Content -path $templateFilePath -Raw ) -replace '<runOutputName>',$runOutputName | Set-Content -Path $templateFilePath (Get-Content -path $templateFilePath -Raw ) -replace '<imageDefName>',$imageDefName | Set-Content -Path $templateFilePath (Get-Content -path $templateFilePath -Raw ) -replace '<sharedImageGalName>',$galleryName| Set-Content -Path $templateFilePath (Get-Content -path $templateFilePath -Raw ) -replace '<region1>',$location | Set-Content -Path $templateFilePath (Get-Content -path $templateFilePath -Raw ) -replace '<region2>',$replRegion2 | Set-Content -Path $templateFilePath ((Get-Content -path $templateFilePath -Raw) -replace '<imgBuilderId>',$identityNameResourceId) | Set-Content -Path $templateFilePath
Das Bild erstellen und anzeigen
Übermitteln Sie Ihre angepasste Vorlage an den VM Image Builder-Dienst, und erstellen Sie das Image.
Führen Sie den folgenden Befehl aus, um Ihre Vorlage an den Dienst zu übermitteln. Der Befehl lädt alle abhängigen Artefakte herunter, z. B. Skripts, und speichert sie in einer Staging-Ressourcengruppe, die dem Präfix vorangestellt ist
IT_.New-AzResourceGroupDeployment -ResourceGroupName $imageResourceGroup -TemplateFile $templateFilePath -Api-Version "2020-02-14" -imageTemplateName $imageTemplateName -svclocation $locationErstellen Sie das Bild, indem Sie die
RunAktion für die Vorlage aufrufen. Geben Sie an der Bestätigungsaufforderung Y fürYes.Invoke-AzResourceAction -ResourceName $imageTemplateName -ResourceGroupName $imageResourceGroup -ResourceType Microsoft.VirtualMachineImages/imageTemplates -ApiVersion "2020-02-14" -Action Run
Wichtig
Das Erstellen des Bilds und das Replizieren in zwei Regionen kann einige Zeit in Anspruch nehmen. Möglicherweise werden unterschiedliche Fortschrittsberichte zwischen PowerShell und dem Azure-Portal angezeigt. Warten Sie, bis der Prozess abgeschlossen ist, bevor Sie mit dem Erstellen einer Dev Box-Definition aus dem Image beginnen.
Abrufen von Informationen zum Bild
Führen Sie den folgenden Befehl aus, um Informationen zum neu erstellten Image abzurufen, einschließlich des Ausführungsstatus und des Bereitstellungsstatus.
Get-AzImageBuilderTemplate -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup | Select-Object -Property Name, LastRunStatusRunState, LastRunStatusMessage, ProvisioningState
Beispielausgabe:
Name LastRunStatusRunState LastRunStatusMessage ProvisioningState
---- --------------------- -------------------- -----------------
vscodeWinTemplate Running Succeeded
Sie können den Status der Bereitstellung Ihres Images auch im Azure-Portal einsehen. Wechseln Sie zu Ihrer Galerie, um die Bilddefinition anzuzeigen.
Konfigurieren der Galerie und Erstellen einer Entwicklungsumgebung
Sobald Ihr benutzerdefiniertes Bild im Katalog gespeichert ist, können Sie den Katalog so konfigurieren, dass es seine Bilder in einem Microsoft Dev Box Dev Center verwendet. Weitere Informationen finden Sie unter Konfigurieren des Azure Compute Gallery für Microsoft Dev Box.
Nachdem Sie die Katalogbilder im Dev Center zur Verfügung gestellt haben, können Sie das benutzerdefinierte Image an ein Dev Box-Projekt anfügen und es zum Erstellen von Entwicklungsfeldern verwenden. Weitere Informationen finden Sie unter Schnellstart: Microsoft Dev Box einrichten.