Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article explique comment utiliser un modèle Générateur d’images de machine virtuelle Azure pour créer une image de machine virtuelle personnalisée dans azure Compute Gallery et la distribuer globalement. Vous pouvez ensuite utiliser l’image pour créer des zones de développement dans Microsoft Dev Box.
Les images de machine virtuelle standardisées peuvent vous aider à garantir des déploiements cohérents de zone de développement en incluant la sécurité, la configuration et les logiciels prédéfinis. Toutefois, la configuration manuelle d’un pipeline d’imagerie est fastidieuse et complexe, et la création d’images de machine virtuelle personnalisées peut être difficile et non fiable.
Azure VM Image Builder est un service managé basé sur HashiCorp Packer qui simplifie le processus de création et de création d’images de machine virtuelle pour les zones de développement. Le modèle Image Builder de cet article inclut des étapes de personnalisation qui installent Visual Studio Code et Chocolatey.
Le Générateur d’images de machine virtuelle peut :
- Abstraire les étapes manuelles ainsi que les outils et processus complexes, et cacher les besoins spécifiques à Azure. Par exemple, généralisez une image en exécutant
sysprep, mais autorisez les utilisateurs avancés à le remplacer. - Utiliser des pipelines de génération d’images existants. Vous pouvez appeler vm Image Builder à partir de votre pipeline ou utiliser une tâche de service Azure VM Image Builder dans Azure Pipelines.
- Collectez des données de personnalisation à partir de différentes sources, de sorte que vous n’avez pas besoin de les collecter vous-même.
- Intégrez azure Compute Gallery pour créer un système de gestion des images pour la distribution, la réplication, la gestion des versions et la mise à l’échelle globales. Vous pouvez distribuer une image en tant que disque dur virtuel et image managée sans la reconstruire.
Important
Microsoft Dev Box supporte uniquement les images qui utilisent le type de sécurité Lancement sécurisé.
Prérequis
L’exemple de cet article utilise Azure PowerShell. Vous pouvez également utiliser Azure CLI.
| Catégorie | Spécifications |
|---|---|
| Outils et autorisations | Groupe de ressources Azure auquel vous disposez des autorisations Propriétaire ou Contributeur . |
| Tools | Azure PowerShell 6.0 ou version ultérieure installée. Pour obtenir des instructions, consultez Installer Azure PowerShell sur Windows. |
Configurer des outils et des rôles
Pour configurer des outils et des rôles, vous devez :
- Installez les modules Azure PowerShell nécessaires.
- Définissez des variables pour les informations que vous utilisez plusieurs fois.
- Inscrivez les fournisseurs de ressources Azure nécessaires.
- Créez une identité utilisateur pour votre groupe de ressources et attribuez-lui un rôle qui permet de distribuer des images.
Installer des modules PowerShell
Installez les modules PowerShell nécessaires en exécutant la commande suivante :
'Az.ImageBuilder', 'Az.ManagedServiceIdentity' | ForEach-Object {Install-Module -Name $_ -AllowPrerelease}
Répondez à Y aux invites sur les dépôts non approuvés.
Définition des variables
Créez des variables pour stocker des informations que vous utilisez plusieurs fois. Exécutez le code suivant, en <resource-group> remplaçant par le nom de votre groupe de ressources et <location> par la région Azure que vous souhaitez utiliser.
# 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"
Inscrire des fournisseurs de ressources Azure
Pour utiliser vm Image Builder, les fournisseurs de ressources Azure suivants doivent être inscrits :
Microsoft.VirtualMachineImagesMicrosoft.ComputeMicrosoft.NetworkMicrosoft.StorageMicrosoft.KeyVaultMicrosoft.ContainerInstance
Vérifiez les inscriptions du fournisseur en exécutant la commande suivante :
Get-AzResourceProvider -ProviderNamespace "Microsoft.VirtualMachineImages", "Microsoft.Compute", "Microsoft.Network", "Microsoft.Storage", "Microsoft.KeyVault", "Microsoft.ContainerInstance" | Format-table -Property ProviderNamespace,RegistrationStateSi l’une des inscriptions du fournisseur ne renvoie pas
Registered, inscrivez le fournisseur en exécutant la commandeRegister-AzResourceProvider. L’exemple suivant enregistre leMicrosoft.VirtualMachineImagesfournisseur de ressources.Register-AzResourceProvider -ProviderNamespace Microsoft.VirtualMachineImages
Créer et affecter une identité d’utilisateur
Créez une définition de rôle Azure qui permet de distribuer l’image. Ensuite, créez une identité attribuée par l'utilisateur pour votre groupe de ressources et attribuez le rôle à l'identité utilisateur. Vm Image Builder utilise l’identité de l’utilisateur pour stocker l’image dans la galerie de calcul Azure.
Exécutez le code suivant pour créer une définition de rôle Azure et une identité utilisateur.
# 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).PrincipalIdExécutez le code suivant pour télécharger un modèle de définition de rôle Azure qui permet de distribuer une image, de mettre à jour le modèle avec vos paramètres et d’attribuer le rôle à l’identité de l’utilisateur.
$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"
Créer une galerie et un modèle de générateur d’images de machine virtuelle
Pour utiliser vm Image Builder avec Azure Compute Gallery, vous avez besoin d’une galerie et d’une définition d’image. Les étapes suivantes créent une nouvelle galerie et une définition d’image et personnalisent un modèle de Générateur d'Images de VM.
Exécutez les commandes suivantes pour créer une galerie et une définition d’image qui a le type de sécurité de lancement approuvé requis pour une image Windows 365.
# 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"Copiez et collez le modèle Azure Resource Manager suivant pour vm Image Builder dans un nouveau fichier. Enregistrez le fichier à un emplacement comme c:\temp\mytemplate.json, puis fermez-le.
Le modèle définit l’image source et les personnalisations appliquées, installe Chocolatey et Visual Studio Code, et indique l’emplacement de distribution de l’image.
{ "$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>" ] } ] } } ] }Configurez le nouveau modèle avec vos paramètres en exécutant le code suivant, en
<template-location>remplaçant par l’emplacement et le nom de votre fichier de modèle.$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
Générer et afficher l’image
Envoyez votre modèle personnalisé au service Générateur d’images de machine virtuelle et générez l’image.
Exécutez la commande suivante pour envoyer votre modèle au service. La commande télécharge tous les artefacts dépendants, tels que les scripts, et les stocke dans un groupe de ressources intermédiaire préfixé par
IT_.New-AzResourceGroupDeployment -ResourceGroupName $imageResourceGroup -TemplateFile $templateFilePath -Api-Version "2020-02-14" -imageTemplateName $imageTemplateName -svclocation $locationGénérez l’image en appelant l’action
Runsur le modèle. À l’invite de confirmation, entrez Y pourYes.Invoke-AzResourceAction -ResourceName $imageTemplateName -ResourceGroupName $imageResourceGroup -ResourceType Microsoft.VirtualMachineImages/imageTemplates -ApiVersion "2020-02-14" -Action Run
Important
La création de l’image et sa réplication dans deux régions peuvent prendre un certain temps. Vous pouvez voir différents rapports de progression entre PowerShell et le portail Azure. Attendez que le processus se termine avant de commencer à créer une définition de zone de développement à partir de l’image.
Obtenir des informations sur l’image
Exécutez la commande suivante pour obtenir des informations sur l’image nouvellement générée, notamment l’état d’exécution et l’état d’approvisionnement.
Get-AzImageBuilderTemplate -ImageTemplateName $imageTemplateName -ResourceGroupName $imageResourceGroup | Select-Object -Property Name, LastRunStatusRunState, LastRunStatusMessage, ProvisioningState
Exemple de sortie :
Name LastRunStatusRunState LastRunStatusMessage ProvisioningState
---- --------------------- -------------------- -----------------
vscodeWinTemplate Running Succeeded
Vous pouvez également consulter l’état de l’approvisionnement de votre image dans le Portail Azure. Accédez à votre galerie pour afficher la définition d’image.
Configurer la galerie et créer une zone de développement
Une fois que votre image personnalisée est stockée dans la galerie, vous pouvez configurer la galerie pour utiliser ses images dans un centre de développement Microsoft Dev Box. Pour plus d’informations, consultez Configurer la galerie de calcul Azure pour Microsoft Dev Box.
Après avoir mis les images de la galerie à disposition dans le centre de développement, vous pouvez attacher l’image personnalisée à un projet de zone de développement et l’utiliser pour créer des zones de développement. Pour plus d’informations, consultez Démarrage rapide : Configurer Microsoft Dev Box.