Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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
sysprepmen 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:
- Installera nödvändiga Azure PowerShell-moduler.
- Ange variabler för information som du använder mer än en gång.
- Registrera nödvändiga Azure-resursprovidrar.
- 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.VirtualMachineImagesMicrosoft.ComputeMicrosoft.NetworkMicrosoft.StorageMicrosoft.KeyVaultMicrosoft.ContainerInstance
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,RegistrationStateOm någon av providerregistreringarna inte returnerar
Registered, kör kommandotRegister-AzResourceProviderför att registrera providern. I följande exempel registrerasMicrosoft.VirtualMachineImagesresursprovidern.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.
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).PrincipalIdKö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"
Skapa ett galleri och mall för VM Image Builder
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.
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"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>" ] } ] } } ] }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.
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 $locationSkapa avbildningen genom att
Runanropa åtgärden i mallen. I bekräftelseprompten anger du Y förYes.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.
Konfigurera galleriet och skapa en utvecklingsruta
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.