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:
- Azure PowerShell 6.0 eller senare. Om du inte har PowerShell installerat följer du stegen i Installera Azure PowerShell i Windows.
- Ägar- eller deltagarbehörigheter för en Azure-prenumeration eller i en specifik resursgrupp.
- En resursgrupp.
- Ett utvecklingscenter med en ansluten nätverksanslutning. Om du inte har någon följer du stegen i Anslut dev-rutor till resurser genom att konfigurera nätverksanslutningar.
Skapa en Windows-avbildning och distribuera den till Azure Compute Gallery
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.
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
Registered
registrerar 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
Installera PowerShell-moduler:
'Az.ImageBuilder', 'Az.ManagedServiceIdentity' | ForEach-Object {Install-Module -Name $_ -AllowPrerelease}
Skapa variabler för att lagra information som du använder mer än en gång.
- Kopiera följande exempelkod.
- Ersätt
<Resource group>
med den resursgrupp som du använde för att skapa utvecklingscentret. - 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"
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
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"
Skapa ett galleri
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.
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"
Skapa en fil för att lagra malldefinitionen, till exempel c:/temp/mytemplate.txt.
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.
Konfigurera den nya mallen med dina variabler.
Ersätt
<Template Path>
med platsen för mallfilen, till exempelc:/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
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
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.
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.
Konfigurera galleriet
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.
Relaterat innehåll
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för