Konfigurera en utvecklingsruta med hjälp av Azure VM Image Builder och Microsoft Dev Box

I den här artikeln använder du Azure VM Image Builder för att skapa en anpassad utvecklingsruta i Microsoft Dev Box med hjälp av en mall. Mallen innehåller ett anpassningssteg för att installera Visual Studio Code (VS Code).

När din organisation använder standardiserade vm-avbildningar kan den enklare migrera till molnet och säkerställa konsekvens i dina distributioner. Avbildningar omfattar vanligtvis fördefinierad säkerhet, konfigurationsinställningar och eventuell nödvändig programvara. Att konfigurera en egen avbildningspipeline kräver tid, infrastruktur och mycket annan information. Med Azure VM Image Builder kan du skapa en konfiguration som beskriver avbildningen. Tjänsten skapar sedan avbildningen och skickar den till ett dev box-projekt.

Även om det är möjligt att skapa anpassade VM-avbildningar för hand eller med hjälp av andra verktyg kan processen vara besvärlig och opålitlig. Vm Image Builder, som bygger på HashiCorp Packer, ger dig fördelarna med en hanterad tjänst.

För att minska komplexiteten med att skapa VM-avbildningar, VM Image Builder:

  • Tar bort behovet av att använda komplexa verktyg, processer och manuella steg för att skapa en VM-avbildning. Vm Image Builder abstraherar all den här informationen och döljer Azure-specifika krav, till exempel behovet av att generalisera avbildningen (Sysprep). Och det ger mer avancerade användare möjlighet att åsidosätta sådana krav.

  • Fungerar med befintliga pipelines för att skapa avbildningar för en klick-och-gå-upplevelse. Du kan anropa VM Image Builder från din pipeline eller använda en DevOps-uppgift för Azure VM Image Builder-tjänsten.

  • Hämtar anpassningsdata från olika källor, vilket tar bort behovet av att samla in dem alla från en plats.

  • Integrerar med Azure Compute Gallery, som skapar ett avbildningshanteringssystem för distribution, replikering, versionshantering och skalning av avbildningar globalt. Dessutom kan du distribuera samma resulterande avbildning som en virtuell hårddisk eller som en eller flera hanterade avbildningar, utan att behöva återskapa dem från grunden.

Viktigt!

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

Förutsättningar

Om du vill etablera en anpassad avbildning som du skapade med hjälp av VM Image Builder behöver du:

Det första steget är att använda Azure VM Image Builder och Azure PowerShell för att skapa en avbildningsversion i Azure Compute Gallery och sedan distribuera avbildningen globalt. Du kan också utföra den här uppgiften med hjälp av Azure CLI.

  1. Om du vill använda VM Image Builder måste du registrera funktionerna.

    Kontrollera dina providerregistreringar. Kontrollera att varje kommando returneras Registered för den angivna funktionen.

       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 
    

    Om providerregistreringarna inte returnerar Registeredregistrerar du leverantörerna genom att köra följande kommandon:

       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. Installera PowerShell-moduler:

    'Az.ImageBuilder', 'Az.ManagedServiceIdentity' | ForEach-Object {Install-Module -Name $_ -AllowPrerelease}
    
  3. Skapa variabler för att lagra information som du använder mer än en gång.

    1. Kopiera följande exempelkod.
    2. Ersätt <Resource group> med den resursgrupp som du använde för att skapa utvecklingscentret.
    3. Kör den uppdaterade koden i PowerShell.
    # 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. Skapa en användartilldelad identitet och ange behörigheter för resursgruppen genom att köra följande kod i PowerShell.

    Vm Image Builder använder den angivna användaridentiteten för att mata in avbildningen i Azure Compute Gallery. I följande exempel skapas en Azure-rolldefinition med specifika åtgärder för att distribuera avbildningen. Rolldefinitionen tilldelas sedan till användaridentiteten.

    # 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. Tilldela behörigheter för identiteten för att distribuera avbildningarna.

    Använd det här kommandot för att ladda ned en Mall för Azure-rolldefinition och uppdatera den sedan med de tidigare angivna parametrarna:

    $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 måste du ha ett befintligt galleri och en bilddefinition. Vm Image Builder skapar inte galleriet och avbildningsdefinitionen åt dig.

  1. Kör följande kommandon för att skapa ett nytt galleri och en ny bilddefinition.

    Den här koden skapar en definition med säkerhetstypen betrodd start och uppfyller avbildningskraven för Windows 365.

    # 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. Skapa en fil för att lagra malldefinitionen, till exempel c:/temp/mytemplate.txt.

  3. Kopiera följande Azure Resource Manger-mall för VM Image Builder till din nya mallfil.

    Den här mallen anger källbilden och de anpassningar som tillämpas. Den installerar Choco och VS Code och anger även avbildningsdistributionsplatsen.

    {
       "$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>"
                   ]
                }
             ]
          }
         }
       ]
      }
    

    Stäng mallfilen innan du fortsätter till nästa steg.

  4. Konfigurera den nya mallen med dina variabler.

    Ersätt <Template Path> med platsen för mallfilen, till exempel 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. Skicka mallen till tjänsten.

    Följande kommando laddar ned beroende artefakter, till exempel skript, och lagrar dem i resursgruppen för mellanlagring. Mellanlagringsresursgruppen är prefix med IT_.

    New-AzResourceGroupDeployment  -ResourceGroupName $imageResourceGroup  -TemplateFile $templateFilePath  -Api-Version "2020-02-14"  -imageTemplateName $imageTemplateName  -svclocation $location 
    
  6. Skapa avbildningen genom att Run anropa kommandot på mallen:

    I kommandotolken för att bekräfta körningsprocessen anger du Ja.

    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 båda regionerna. Du kan se en skillnad i pågående rapportering mellan PowerShell och Azure-portalen. Innan du börjar skapa en dev box-definition väntar du tills processen har slutförts.

  7. Hämta information om den nybyggda avbildningen, inklusive körningsstatus och etableringstillstånd.

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

    Exempel på utdata:

    Name                 LastRunStatusRunState    LastRunStatusMessage   ProvisioningState
    ---------------------------------------------------------------------------------------
    vscodeWinTemplate                                                    Creating
    

    Du kan också visa etableringstillståndet för avbildningen i Azure-portalen. Gå till galleriet och visa bilddefinitionen.

    Screenshot that shows the provisioning state of the customized image version.

När den anpassade avbildningen har etablerats i galleriet kan du konfigurera galleriet så att det använder avbildningarna i utvecklingscentret. Mer information finns i Konfigurera Azure Compute Gallery.

Konfigurera Microsoft Dev Box med en anpassad avbildning

När galleriavbildningarna är tillgängliga i utvecklingscentret kan du använda den anpassade avbildningen med Microsoft Dev Box. Mer information finns i Snabbstart: Konfigurera Microsoft Dev Box.