Freigeben über


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:

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.

  1. 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 
    
  2. Installieren Sie PowerShell-Module:

    'Az.ImageBuilder', 'Az.ManagedServiceIdentity' | ForEach-Object {Install-Module -Name $_ -AllowPrerelease}
    
  3. Erstellen Sie Variablen, um Informationen zu speichern, die Sie mehrmals verwenden.

    1. Kopieren Sie den folgenden Beispielcode.
    2. Ersetzen Sie <Resource group> durch die Ressourcengruppe, die Sie zum Erstellen des Entwicklungszentrums verwendet haben.
    3. 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"  
    
  4. 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
    
  5. 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" 
    

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.

  1. 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" 
    
  2. Erstellen Sie eine Datei, um Ihre Vorlagendefinition zu speichern, z. B. c:/temp/mytemplate.txt.

  3. 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.

  4. 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 
    
  5. Ü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 
    
  6. 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.

  7. 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.

    Screenshot, der den Bereitstellungsstatus der angepassten Image-Version zeigt.

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.