Använda Azure VM Image Builder för att skapa en dev box-avbildning

Den här artikeln visar hur du använder en azure VM Image Builder-mall för att skapa en anpassad VM-avbildning i Azure Compute Gallery och distribuera den globalt. Du kan sedan använda avbildningen för att skapa utvecklingsrutor i Microsoft Dev Box.

Standardiserade VM-avbildningar kan hjälpa dig att säkerställa konsekventa dev box-distributioner genom att inkludera fördefinierad säkerhet, konfiguration och programvara. Men att manuellt konfigurera en avbildningspipeline är tidskrävande och komplicerat, och att skapa anpassade VM-avbildningar kan vara svårt och otillförlitligt.

Azure VM Image Builder är en hanterad tjänst baserad på HashiCorp Packer som förenklar processen att skapa och bygga VM-avbilder för utvecklingsmiljöer. Mallen Image Builder i den här artikeln innehåller anpassningssteg som installerar Visual Studio Code och Chocolatey.

Vm Image Builder kan:

  • Abstrakta manuella steg eller komplexa verktyg och processer och dölj Azure-specifika behov. Du kan till exempel generalisera en avbildning genom att köra sysprep men tillåta avancerade användare att åsidosätta den.
  • Arbeta med befintliga pipelines för avbildningsgenerering. Du kan anropa VM Image Builder från din pipeline eller använda en tjänstuppgift för Azure VM Image Builder i Azure Pipelines.
  • Samla in anpassningsdata från olika källor så att du inte behöver samla in dem själv.
  • Integrera med Azure Compute Gallery för att skapa ett avbildningshanteringssystem för global distribution, replikering, versionshantering och skalning. Du kan distribuera en avbildning som både en virtuell hårddisk och en hanterad avbildning utan att återskapa den.

Viktigt!

Microsoft Dev Box stöder endast bilder som använder säkerhetstypen Betrodd start .

Förutsättningar

Exemplet i den här artikeln använder Azure PowerShell. Du kan också använda Azure CLI.

Kategori Kravspecifikation
Verktyg och behörigheter En Azure-resursgrupp som du har ägar- eller deltagarbehörighet till.
Tools Azure PowerShell 6.0 eller senare installerat. Anvisningar finns i Installera Azure PowerShell i Windows.

Konfigurera verktyg och roller

Du konfigurerar verktyg och roller genom att:

  1. Installera nödvändiga Azure PowerShell-moduler.
  2. Ange variabler för information som du använder mer än en gång.
  3. Registrera nödvändiga Azure-resursprovidrar.
  4. Skapa en användaridentitet för resursgruppen och tilldela den en roll som gör det möjligt att distribuera bilder.

Installera PowerShell-moduler

Installera nödvändiga PowerShell-moduler genom att köra följande kommando:

'Az.ImageBuilder', 'Az.ManagedServiceIdentity' | ForEach-Object {Install-Module -Name $_ -AllowPrerelease}

Svara Y på anvisningarna om ej betrodda lagringsplatser.

Ange variabler

Skapa variabler för att lagra information som du använder mer än en gång. Kör följande kod och ersätt <resource-group> med resursgruppens namn och <location> med den Azure-region som du vill använda.

# 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"  

Registrera Azure-resursprovidrar

Om du vill använda VM Image Builder måste följande Azure-resursproviders registreras:

  • Microsoft.VirtualMachineImages
  • Microsoft.Compute
  • Microsoft.Network
  • Microsoft.Storage
  • Microsoft.KeyVault
  • Microsoft.ContainerInstance
  1. Kontrollera providerregistreringarna genom att köra följande kommando:

      Get-AzResourceProvider -ProviderNamespace "Microsoft.VirtualMachineImages", "Microsoft.Compute", "Microsoft.Network", "Microsoft.Storage", "Microsoft.KeyVault", "Microsoft.ContainerInstance" | Format-table -Property ProviderNamespace,RegistrationState
    
  2. Om någon av providerregistreringarna inte returnerar Registered, kör kommandot Register-AzResourceProvider för att registrera providern. I följande exempel registreras Microsoft.VirtualMachineImages resursprovidern.

      Register-AzResourceProvider -ProviderNamespace Microsoft.VirtualMachineImages
    

Skapa och tilldela en användaridentitet

Skapa en Azure-rolldefinition som gör det möjligt att distribuera avbildningen. Skapa sedan en användartilldelad identitet för resursgruppen och tilldela rollen till användaridentiteten. Vm Image Builder använder användaridentiteten för att lagra avbildningen i Azure Compute Gallery.

  1. Kör följande kod för att skapa en Azure-rolldefinition och användaridentitet.

    # 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).PrincipalId
    
  2. Kör följande kod för att ladda ned en Azure-rolldefinitionsmall som gör det möjligt att distribuera en avbildning, uppdatera mallen med dina parametrar och tilldela rollen till användaridentiteten.

    $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" 
    

Om du vill använda VM Image Builder med Azure Compute Gallery behöver du ett galleri och en bilddefinition. Följande steg skapar ett nytt galleri och en ny bilddefinition och anpassar en mall för VM Image Builder.

  1. Kör följande kommandon för att skapa ett nytt galleri och en avbildningsdefinition som har den säkerhetstyp för betrodd start som krävs för en Windows 365-avbildning.

    # 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" 
    
  2. Kopiera och klistra in följande Azure Resource Manager-mall för VM Image Builder i en ny fil. Spara filen på en plats som c:\temp\mytemplate.jspå och stäng sedan filen.

    Mallen definierar källbilden och anpassningarna som tillämpas, installerar Chocolatey och Visual Studio Code och anger platsen för avbildningsdistributionen.

    {
       "$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>"
                   ]
                }
             ]
          }
         }
       ]
      }
    
  3. Konfigurera den nya mallen med dina inställningar genom att köra följande kod och ersätta <template-location> med mallfilens plats och namn.

    $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 
    

Skapa och visa avbildningen

Skicka din anpassade mall till tjänsten Image Builder för den virtuella datorn och skapa avbildningen.

  1. Kör följande kommando för att skicka mallen till tjänsten. Kommandot laddar ned beroende artefakter, till exempel skript, och lagrar dem i en mellanlagringsresursgrupp med IT_prefixet .

    New-AzResourceGroupDeployment  -ResourceGroupName $imageResourceGroup  -TemplateFile $templateFilePath  -Api-Version "2020-02-14"  -imageTemplateName $imageTemplateName  -svclocation $location 
    
  2. Skapa avbildningen genom att Run anropa åtgärden i mallen. I bekräftelseprompten anger du Y för Yes.

    Invoke-AzResourceAction  -ResourceName $imageTemplateName  -ResourceGroupName $imageResourceGroup  -ResourceType Microsoft.VirtualMachineImages/imageTemplates  -ApiVersion "2020-02-14"  -Action Run
    

Viktigt!

Det kan ta lite tid att skapa avbildningen och replikera den till två regioner. Du kan se olika förloppsrapportering mellan PowerShell och Azure-portalen. Vänta tills processen har slutförts innan du börjar skapa en dev box-definition från avbildningen.

Hämta information om avbildningen

Kör följande kommando för att hämta information om den nyligen skapade avbildningen, inklusive körningsstatus och provisioneringstillstånd.

Get-AzImageBuilderTemplate -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup | Select-Object -Property Name, LastRunStatusRunState, LastRunStatusMessage, ProvisioningState 

Exempel på utdata:

Name              LastRunStatusRunState LastRunStatusMessage ProvisioningState
----              --------------------- -------------------- -----------------
vscodeWinTemplate Running                                    Succeeded

Du kan också visa etableringstillståndet för avbildningen i Azure Portal. Gå till galleriet för att visa bilddefinitionen.

Skärmbild som visar tillståndet för provisioneringen av den anpassade avbildningsversionen.

När din anpassade avbildning har lagrats i galleriet kan du konfigurera galleriet så att det använder dess avbildningar i ett Microsoft Dev Box dev center. Mer information finns i Konfigurera Azure Compute Gallery för Microsoft Dev Box.

När du har skapat galleriavbildningarna i utvecklingscentret kan du koppla den anpassade avbildningen till ett dev box-projekt och använda den för att skapa dev-rutor. Mer information finns i Snabbstart: Konfigurera Microsoft Dev Box.