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).
Med hjälp av standardiserade vm-avbildningar kan du säkerställa konsekventa distributioner när du migrerar till molnet. Dessa avbildningar kan innehålla fördefinierad säkerhet, konfigurationsinställningar och nödvändig programvara. Det kan vara tidskrävande och komplext att konfigurera en avbildningspipeline. Azure VM Image Builder förenklar den här processen genom att du kan skapa en konfiguration för avbildningen, som tjänsten sedan skapar och skickar till ett dev box-projekt.
Det kan vara svårt och opålitligt att skapa anpassade VM-avbildningar manuellt eller med andra verktyg. Vm Image Builder, som bygger på HashiCorp Packer, erbjuder fördelarna med en hanterad tjänst.
För att förenkla skapandet av vm-avbildningar, VM Image Builder:
- Eliminerar behovet av komplexa verktyg, processer och manuella steg. Den sammanfattar informationen och döljer Azure-specifika behov, till exempel generalisering av avbildningen (Sysprep), samtidigt som avancerade användare kan åsidosättas om det behövs.
- Fungerar med befintliga pipelines för avbildningsbygge. Du kan anropa VM Image Builder från din pipeline eller använda en DevOps-uppgift för Azure VM Image Builder-tjänsten.
- Samlar in anpassningsdata från olika källor, så du behöver inte samla in allt på ett och samma ställe.
- Integrerar med Azure Compute Gallery och skapar ett avbildningshanteringssystem för global distribution, replikering, versionshantering och skalning. Du kan distribuera samma avbildning som en virtuell hårddisk eller hanterade avbildningar utan att återskapa dem.
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 rutorna Anslut utveckling 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 avbildning i Azure Compute Gallery och distribuera den globalt.
I följande exempel används PowerShell. Du kan också använda Azures kommandoradsgränssnitt (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 användaridentitet som du anger för att lagra 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 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 kontrollerar du att du har 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 Portal. 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 Portal. Gå till galleriet och visa bilddefinitionen.
Konfigurera galleriet
När din anpassade avbildning lagras i galleriet kan du konfigurera galleriet så att det använder bilderna 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.