Konfigurieren einer Dev Box mithilfe des Azure VM Image Builder und Microsoft Dev Box
In diesem Artikel verwenden Sie Azure VM Image Builder, um mithilfe einer Vorlage eine angepasste Dev-Box in Microsoft Dev Box zu erstellen. Die Vorlage enthält einen Anpassungsschritt zur Installation von Visual Studio Code (VS Code).
Durch die Verwendung standardisierter VM-Images (Virtual Machine) können Sie bei der Migration in die Cloud konsistente Bereitstellungen sicherstellen. Diese Images können vordefinierte Sicherheits- und Konfigurationseinstellungen sowie die notwendige Software beinhalten. Die Einrichtung einer Imageerstellungspipeline kann zeitaufwendig und komplex sein. Azure VM Image Builder vereinfacht diesen Prozess, indem es Ihnen ermöglicht, eine Konfiguration für Ihr Image zu erstellen, die der Dienst dann erstellt und an ein Dev-Box-Projekt übermittelt.
Die manuelle Erstellung benutzerdefinierter VM-Images oder die Erstellung mit anderen Tools kann schwierig und unzuverlässig sein. VM Image Builder, das auf HashiCorp Packer basiert, bietet die Vorteile eines verwalteten Dienstes.
Zur Vereinfachung der VM-Image-Erstellung: VM Image Builder:
- Komplexe Werkzeuge, Prozesse und manuelle Schritte sind nicht mehr erforderlich. Es abstrahiert diese Details und verbirgt Azure-spezifische Anforderungen, wie die Generalisierung des Images (Sysprep), während fortgeschrittene Benutzer diese bei Bedarf überschreiben können.
- Funktioniert mit vorhandenen Imagebuildpipelines. Sie können VM Image Builder über Ihre Pipeline aufrufen oder eine DevOps-Aufgabe des Azure VM Image Builder-Dienstes verwenden.
- Sammelt Anpassungsdaten aus verschiedenen Quellen, sodass Sie diese nicht alle auf einmal sammeln müssen.
- Lässt sich in die Azure Compute Gallery integrieren und erstellt ein Imageverwaltungssystem für die globale Verteilung, Replikation, Versionierung und Skalierung. Sie können dasselbe Image als virtuelle Festplatte oder verwaltete Images verteilen, ohne sie neu erstellen zu müssen.
Wichtig
Microsoft Dev Box unterstützt nur Images, die den Sicherheitstyp Vertrauenswürdiger Start verwenden.
Voraussetzungen
Um ein benutzerdefiniertes Image bereitzustellen, das Sie mit VM Image Builder erstellt haben, benötigen Sie:
- Azure PowerShell 6.0 oder höher Wenn Sie PowerShell nicht installiert haben, befolgen Sie die Schritte unter Installieren von Azure PowerShell unter Windows.
- Berechtigungen für Eigentümer oder Mitwirkende für ein Azure-Abonnement oder eine bestimmte Ressourcengruppe.
- Eine Ressourcengruppe.
- Ein Dev Center mit angeschlossener Netzwerkverbindung. Wenn Sie noch keine haben, befolgen Sie die Schritte unter Verbinden von Dev-Boxen mit Ressourcen durch Konfigurieren von Netzwerkverbindungen.
Erstellen eines Windows-Images und Verteilen des Images an Azure Compute Gallery
Der erste Schritt besteht darin, mit Azure VM Image Builder und Azure PowerShell ein Image in Azure Compute Gallery zu erstellen und es global zu verteilen.
Im folgenden Beispiel wird PowerShell verwendet. Sie können auch die Azure-Befehlszeilenschnittstelle (CLI) verwenden.
Um VM Image Builder zu verwenden, müssen Sie die Features registrieren.
Überprüfen Sie Ihre Anbieterregistrierungen. Stellen Sie sicher, dass jeder Befehl für die angegebene Funktion
Registered
zurückgibt.Get-AzResourceProvider -ProviderNamespace Microsoft.VirtualMachineImages | Format-table -Property ResourceTypes,RegistrationState Get-AzResourceProvider -ProviderNamespace Microsoft.Storage | Format-table -Property ResourceTypes,RegistrationState Get-AzResourceProvider -ProviderNamespace Microsoft.Compute | Format-table -Property ResourceTypes,RegistrationState Get-AzResourceProvider -ProviderNamespace Microsoft.KeyVault | Format-table -Property ResourceTypes,RegistrationState Get-AzResourceProvider -ProviderNamespace Microsoft.Network | Format-table -Property ResourceTypes,RegistrationState
Wenn die Anbieterregistrierungen nicht
Registered
zurückgeben, registrieren Sie die Anbieter, indem Sie die folgenden Befehle ausführen:Register-AzResourceProvider -ProviderNamespace Microsoft.VirtualMachineImages Register-AzResourceProvider -ProviderNamespace Microsoft.Storage Register-AzResourceProvider -ProviderNamespace Microsoft.Compute Register-AzResourceProvider -ProviderNamespace Microsoft.KeyVault Register-AzResourceProvider -ProviderNamespace Microsoft.Network
Installieren Sie PowerShell-Module:
'Az.ImageBuilder', 'Az.ManagedServiceIdentity' | ForEach-Object {Install-Module -Name $_ -AllowPrerelease}
Erstellen Sie Variablen, um Informationen zu speichern, die Sie mehrmals verwenden.
- Kopieren Sie den folgenden Beispielcode.
- Ersetzen Sie
<Resource group>
durch die Ressourcengruppe, die Sie zum Erstellen des Entwicklungszentrums verwendet haben. - Führen Sie den aktualisierten Code in PowerShell aus.
# Get existing context $currentAzContext = Get-AzContext # Get your current subscription ID $subscriptionID=$currentAzContext.Subscription.Id # Destination image resource group $imageResourceGroup="<Resource group>" # Location $location="eastus2" # Image distribution metadata reference name $runOutputName="aibCustWinManImg01" # Image template name $imageTemplateName="vscodeWinTemplate"
Erstellen Sie eine benutzerdefinierte Identität und legen Sie Berechtigungen für die Ressourcengruppe fest, indem Sie den folgenden Code in PowerShell ausführen.
VM Image Builder verwendet die von Ihnen angegebene Benutzeridentität, um das Image in der Azure Compute Gallery zu speichern. Im folgenden Beispiel wird eine Azure-Rollendefinition mit spezifischen Aktionen für die Verteilung des Images erstellt. Die Rollendefinition wird dann der Benutzeridentität zugewiesen.
# Set up role definition names, which need to be unique $timeInt=$(get-date -UFormat "%s") $imageRoleDefName="Azure Image Builder Image Def"+$timeInt $identityName="aibIdentity"+$timeInt # Add an Azure PowerShell module to support AzUserAssignedIdentity Install-Module -Name Az.ManagedServiceIdentity # 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).PrincipalId
Weisen Sie Berechtigungen für die Identität zur Verteilung der Images zu.
Verwenden Sie diesen Befehl, um eine Azure-Rollendefinitionsvorlage herunterzuladen und mit den zuvor angegebenen Parametern zu aktualisieren:
$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"
Eine Galerie erstellen
Um VM Image Builder mit Azure Compute Gallery zu verwenden, stellen Sie sicher, dass Sie über einen vorhandenen Katalog und eine Bilddefinition verfügen. Der Katalog und die Imagedefinition werden nicht von VM Image Builder für Sie erstellt.
Führen Sie die folgenden Befehle aus, um eine neue Galerie- und Image-Definition zu erstellen.
Dieser Code erstellt eine Definition mit dem Sicherheitstyp Vertrauenswürdiger Start und erfüllt die Anforderungen an das Windows 365-Image.
# Gallery name $galleryName= "devboxGallery" # Image definition name $imageDefName ="vscodeImageDef" # Additional 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"
Erstellen Sie eine Datei, um Ihre Vorlagendefinition zu speichern, z. B. c:/temp/mytemplate.txt.
Kopieren Sie die folgende Azure Resource Manager-Vorlage für VM Image Builder in Ihre neue Vorlagendatei.
Diese Vorlage zeigt das Quell-Image und die vorgenommenen Anpassungen. Sie installiert Choco und VS Code und gibt auch den Speicherort für die Bildverteilung 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 Vscode", "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>" ] } ] } } ] }
Schließen Sie Ihre Vorlagendatei, bevor Sie mit dem nächsten Schritt fortfahren.
Konfigurieren Sie Ihre neue Vorlage mit Ihren Variablen.
Ersetzen Sie
<Template Path>
durch den Speicherort Ihrer Vorlagendatei, z. B.c:/temp/mytemplate
.$templateFilePath = <Template Path> (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
Übermitteln Sie die Vorlage an den Dienst.
Mit dem folgenden Befehl werden alle abhängigen Artefakte, wie z. B. Skripte, heruntergeladen und in der Staging-Ressourcengruppe gespeichert. Die Gruppe der Inszenierungsressourcen beginnt mit
IT_
.New-AzResourceGroupDeployment -ResourceGroupName $imageResourceGroup -TemplateFile $templateFilePath -Api-Version "2020-02-14" -imageTemplateName $imageTemplateName -svclocation $location
Erstellen Sie das Image, indem Sie den Befehl
Run
in der Vorlage aufrufen:Geben Sie bei der Aufforderung zur Bestätigung des Ausführungsvorgangs Ja ein.
Invoke-AzResourceAction -ResourceName $imageTemplateName -ResourceGroupName $imageResourceGroup -ResourceType Microsoft.VirtualMachineImages/imageTemplates -ApiVersion "2020-02-14" -Action Run
Wichtig
Es kann einige Zeit dauern, das Image zu erstellen und es auf beide Regionen zu übertragen. Möglicherweise stellen Sie Unterschiede bei der Fortschrittsberichterstattung zwischen PowerShell und dem Azure-Portal fest. Warten Sie mit dem Erstellen einer Dev-Box-Definition, bis der Vorgang abgeschlossen ist.
Informieren Sie sich über das neu erstellte Image, 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 Creating
Sie können auch den Bereitstellungsstatus Ihres Images im Azure-Portal anzeigen. Gehen Sie zu Ihrer Galerie und sehen Sie sich die Imagedefinition an.
Konfigurieren der Galerie
Wenn Ihr benutzerdefiniertes Image in der Galerie gespeichert ist, können Sie die Galerie so konfigurieren, dass die Bilder im Dev Center verwendet werden. Weitere Informationen finden Sie unter Konfigurieren von Azure Compute Gallery.
Einrichten von Microsoft Dev Box mit einem benutzerdefinierten Image
Sobald die Katalog-Images im Dev Center verfügbar sind, können Sie das benutzerdefinierte Image mit Microsoft Dev Box verwenden. Weitere Informationen finden Sie unter Schnellstart: Microsoft Dev Box konfigurieren.