Créer une machine virtuelle Windows à l’aide d’Azure VM Image Builder
S’applique à : ✔️ Machine virtuelles Windows
Dans cet article, vous allez apprendre à créer une image Windows personnalisée à l’aide d’Azure VM Image Builder. L’exemple de cet article utilise des personnalisateurs pour la personnalisation de l’image :
- PowerShell (ScriptUri) : télécharger et exécuter un script PowerShell.
- Redémarrage de Windows : redémarre la machine virtuelle.
- PowerShell (inline) : exécute une commande spécifique. Dans cet exemple, il crée un répertoire sur la machine virtuelle à l’aide de
mkdir c:\\buildActions
. - Fichier : copie un fichier de GitHub vers la machine virtuelle. Cet exemple copie index.md vers
c:\buildArtifacts\index.html
sur la machine virtuelle. buildTimeoutInMinutes
: spécifie une heure de génération, en minutes. La valeur par défaut est de 240 minutes, que vous pouvez augmenter pour permettre l’exécution de builds plus longues. La valeur minimale autorisée est de 6 minutes. Les valeurs inférieures à 6 minutes entraînent des erreurs.vmProfile
: spécifie une propriété réseau etvmSize
.osDiskSizeGB
: peut être utilisé pour augmenter la taille d’une image.identity
. Fournit une identité pour qu’Azure VM Image Builder l’utilise pendant la génération.
Utilisez l’exemple de modèle JSON suivant pour configurer l’image : helloImageTemplateWin.json.
Notes
Les utilisateurs Windows peuvent exécuter les exemples de Azure CLI suivants peuvent être exécutés sur Azure Cloud Shell à l’aide de Bash.
Inscrire les fournisseurs
Pour utiliser Azure VM Image Builder, vous devez inscrire cette fonctionnalité. Vérifiez votre inscription en exécutant les commandes suivantes :
az provider show -n Microsoft.VirtualMachineImages | grep registrationState
az provider show -n Microsoft.KeyVault | grep registrationState
az provider show -n Microsoft.Compute | grep registrationState
az provider show -n Microsoft.Storage | grep registrationState
az provider show -n Microsoft.Network | grep registrationState
az provider show -n Microsoft.ContainerInstance -o json | grep registrationState
Si la sortie ne retourne pas Registered, exécutez les commandes suivantes :
az provider register -n Microsoft.VirtualMachineImages
az provider register -n Microsoft.Compute
az provider register -n Microsoft.KeyVault
az provider register -n Microsoft.Storage
az provider register -n Microsoft.Network
az provider register -n Microsoft.ContainerInstance
Définition des variables
Comme nous allons utiliser certains éléments d’information à plusieurs reprises, créez des variables pour les stocker :
# Resource group name - we're using myImageBuilderRG in this example
imageResourceGroup='myWinImgBuilderRG'
# Region location
location='WestUS2'
# Run output name
runOutputName='aibWindows'
# The name of the image to be created
imageName='aibWinImage'
Créez une variable pour votre ID d’abonnement :
subscriptionID=$(az account show --query id --output tsv)
Créer le groupe de ressources
Pour stocker l’artefact du modèle de configuration d’image et l’image, utilisez le groupe de ressources suivant :
az group create -n $imageResourceGroup -l $location
Créer une identité affectée par l’utilisateur et définir des autorisations sur le groupe de ressources
Azure VM Image Builder utilise l’identité de l’utilisateur fournie pour injecter l’image dans le groupe de ressources. Dans cet exemple, vous créez une définition de rôle Azure avec des autorisations spécifiques pour distribuer l’image. La définition de rôle est alors attribuée à l’identité de l’utilisateur.
Créer une identité managée affectée par l’utilisateur et octroyer des autorisations
Créez une identité affectée par l’utilisateur afin que Azure VM Image Builder puisse accéder au compte de stockage où le script est stocké.
identityName=aibBuiUserId$(date +'%s')
az identity create -g $imageResourceGroup -n $identityName
# Get the identity ID
imgBuilderCliId=$(az identity show -g $imageResourceGroup -n $identityName --query clientId -o tsv)
# Get the user identity URI that's needed for the template
imgBuilderId=/subscriptions/$subscriptionID/resourcegroups/$imageResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$identityName
# Download the preconfigured role definition example
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleImageCreation.json -o aibRoleImageCreation.json
imageRoleDefName="Azure Image Builder Image Def"$(date +'%s')
# Update the definition
sed -i -e "s%<subscriptionID>%$subscriptionID%g" aibRoleImageCreation.json
sed -i -e "s%<rgName>%$imageResourceGroup%g" aibRoleImageCreation.json
sed -i -e "s%Azure Image Builder Service Image Creation Role%$imageRoleDefName%g" aibRoleImageCreation.json
# Create role definitions
az role definition create --role-definition ./aibRoleImageCreation.json
# Grant a role definition to the user-assigned identity
az role assignment create \
--assignee $imgBuilderCliId \
--role "$imageRoleDefName" \
--scope /subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup
Télécharger le modèle de configuration d’image
Nous avons créé un modèle de configuration d’image paramétrable pour vous permettre d'essayer. Téléchargez l’exemple de fichier JSON, puis configurez-le avec les variables que vous avez définies précédemment.
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/quickquickstarts/0_Creating_a_Custom_Windows_Managed_Image/helloImageTemplateWin.json -o helloImageTemplateWin.json
sed -i -e "s%<subscriptionID>%$subscriptionID%g" helloImageTemplateWin.json
sed -i -e "s%<rgName>%$imageResourceGroup%g" helloImageTemplateWin.json
sed -i -e "s%<region>%$location%g" helloImageTemplateWin.json
sed -i -e "s%<imageName>%$imageName%g" helloImageTemplateWin.json
sed -i -e "s%<runOutputName>%$runOutputName%g" helloImageTemplateWin.json
sed -i -e "s%<imgBuilderId>%$imgBuilderId%g" helloImageTemplateWin.json
Vous pouvez modifier cet exemple dans le terminal à l’aide d’un éditeur de texte tel que vi
.
vi helloImageTemplateWin.json
Notes
Pour l’image source, spécifiez toujours une version. Vous ne pouvez pas spécifier latest
comme version.
Si vous ajoutez ou modifiez le groupe de ressources où l’image est distribuée, assurez-vous que les autorisations sont définies sur le groupe de ressources.
Création de l’image
Envoyez la configuration de l’image au service Azure VM Image Builder en exécutant les commandes suivantes :
az resource create \
--resource-group $imageResourceGroup \
--properties @helloImageTemplateWin.json \
--is-full-object \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateWin01
Lorsque vous avez terminé, un message de réussite est retourné à la console et un modèle de configuration Image Builder de machine virtuelle est créé dans $imageResourceGroup
.
En outre, en arrière-plan, Azure VM Image Builder crée un groupe de ressources de mise en lots dans votre abonnement. Ce groupe de ressources est utilisé pour générer l’image au format suivant : IT_<DestinationResourceGroup>_<TemplateName>
.
Remarque
Si la suppression est requise, ne supprimez pas directement le groupe de ressources intermédiaire. Commencez par supprimer l’artefact de modèle d’image ; cela supprimera par la suite le groupe de ressources intermédiaire. Autrement, le modèle d’image peut basculer dans un état d’échec.
Si le service signale une défaillance lorsque vous envoyez le modèle de configuration d’image, procédez comme suit :
- Consultez Résoudre les problèmes liés au service Azure VM Image Builder.
- Avant d’essayer de renvoyer le modèle, supprimez-le en exécutant les commandes suivantes :
az resource delete \
--resource-group $imageResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateWin01
Lancer la génération de l’image
Démarrez le processus de génération de l'image à l'aide d’az resource invoke-action.
az resource invoke-action \
--resource-group $imageResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateWin01 \
--action Run
Attendez que la compilation soit terminée.
Si vous rencontrez des erreurs, consultez Résoudre les problèmes liés au service Azure VM Image Builder.
Création de la machine virtuelle
Créez la machine virtuelle en utilisant l’image que vous avez générée. Dans le code suivant, remplacez <password> par votre mot de passe pour l’abuser sur la machine virtuelle.
az vm create \
--resource-group $imageResourceGroup \
--name aibImgWinVm00 \
--admin-username aibuser \
--admin-password <password> \
--image $imageName \
--location $location
Vérifier la personnalisation
Créez une connexion Bureau à distance à la machine virtuelle avec le nom d’utilisateur et le mot de passe que vous avez définis lors de la création de la machine virtuelle. Dans la machine virtuelle, ouvrez une fenêtre d’invite de commandes, puis tapez :
dir c:\
Les deux répertoires suivants sont créés pendant la personnalisation de l’image :
- buildActions
- buildArtifacts
Nettoyer vos ressources
Lorsque vous avez terminé, supprimez les ressources que vous avez créées.
Supprimez le modèle Azure VM Image Builder.
az resource delete \ --resource-group $imageResourceGroup \ --resource-type Microsoft.VirtualMachineImages/imageTemplates \ -n helloImageTemplateWin01
Supprimez l’attribution de rôle, la définition de rôle et l’identité de l’utilisateur.
az role assignment delete \ --assignee $imgBuilderCliId \ --role "$imageRoleDefName" \ --scope /subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup az role definition delete --name "$imageRoleDefName" az identity delete --ids $imgBuilderId
Supprimez le groupe de ressources d’image.
az group delete -n $imageResourceGroup
Étapes suivantes
Pour en savoir plus sur les composants du fichier JSON utilisé dans cet article, consultez les informations de référence sur le modèle VM Image Builder.