Tutoriel : Créer des images de machines virtuelles Windows avec Azure PowerShell

S’applique à : ✔️ Machines virtuelles Windows ✔️ Groupes identiques flexibles

Vous pouvez utiliser des images pour démarrer des déploiements et en garantir la cohérence sur plusieurs machines virtuelles. Dans ce tutoriel, vous allez créer votre propre image spécialisée d’une machine virtuelle Azure à l’aide de PowerShell et la stocker dans Azure Compute Gallery (anciennement appelé Shared Image Gallery). Vous allez apprendre à effectuer les actions suivantes :

  • Créer une instance Azure Compute Gallery
  • Créer une définition d’image
  • Créer une version d’image
  • Créer une machine virtuelle à partir d’une image
  • Partager une galerie

Avant de commencer

Les étapes ci-dessous expliquent comment prendre une machine virtuelle existante et la transformer en une image personnalisée réutilisable pour créer de nouvelles machines virtuelles.

Pour exécuter l’exemple dans ce didacticiel, vous devez disposer d’une machine virtuelle. Si nécessaire, vous pouvez consulter le guide de démarrage rapide PowerShell pour créer une machine virtuelle à utiliser pour ce tutoriel. Au cours du tutoriel, remplacez les noms des ressources si nécessaire.

Vue d’ensemble

Une galerie Azure Compute Gallery simplifie le partage d’images personnalisées dans votre organisation. Les images personnalisées sont comme des images de la Place de marché, sauf que vous les créez vous-même. Les images personnalisées peuvent être utilisées pour amorcer des configurations comme le préchargement des applications, les configurations d’application et d’autres configurations de système d’exploitation.

Azure Compute Gallery vous permet de partager vos images de machines virtuelles personnalisées avec d’autres utilisateurs. Choisissez les images à partager, les régions dans lesquelles vous souhaitez les rendre disponibles et les personnes avec lesquelles vous voulez les partager.

La fonctionnalité Azure Compute Gallery présente plusieurs types de ressources :

Ressource Description
Source d’image Cette ressource peut être utilisée pour créer une version d’image dans une galerie. Une source d’image peut être une machine virtuelle Azure existante qui est généralisée ou spécialisée, une image managée, un instantané ou une version d’image dans une autre galerie.
Galerie Tout comme la Place de marché Azure, une galerie est un dépôt permettant de gérer et partager des images et des applications VM, mais vous contrôlez les utilisateurs qui y ont accès.
Définition d'image Les définitions d’image sont créées dans une galerie et contiennent des informations sur l’image et sur les exigences relatives à son utilisation en interne. Ces informations indiquent, par exemple, si l’image est Windows ou Linux, et comprennent les notes de publication et les exigences de mémoire maximale et minimale. Il s’agit d’une définition de type d’image.
Version de l’image Une version d’image est ce qui vous permet de créer une machine virtuelle quand vous utilisez une galerie. Vous pouvez avoir plusieurs versions d’une image en fonction des besoins de votre environnement. Tout comme une image managée, quand vous utilisez une version d’image pour créer une machine virtuelle, la version d’image permet de créer des disques pour la machine virtuelle. Les versions d’image peuvent être utilisées plusieurs fois.

Lancement d’Azure Cloud Shell

Azure Cloud Shell est un interpréteur de commandes interactif et gratuit que vous pouvez utiliser pour exécuter les étapes de cet article. Il contient des outils Azure courants préinstallés et configurés pour être utilisés avec votre compte.

Pour ouvrir Cloud Shell, sélectionnez simplement Essayer en haut à droite d’un bloc de code. Vous pouvez aussi lancer Cloud Shell dans un onglet distinct du navigateur en accédant à https://shell.azure.com/powershell. Sélectionnez Copier pour copier les blocs de code, collez-les dans Cloud Shell, puis appuyez sur Entrée pour les exécuter.

Obtenir la machine virtuelle

Pour voir la liste de machines virtuelles disponibles dans un groupe de ressources, utilisez Get-AzVM. Une fois le nom de la machine virtuelle et le groupe de ressources connus, vous pouvez réutiliser Get-AzVM pour obtenir l’objet de machine virtuelle et le stocker dans une variable afin de l’utiliser ultérieurement. Cet exemple obtient une machine virtuelle nommée sourceVM à partir du groupe de ressources « myResourceGroup » et l’assigne à la variable $sourceVM.

$sourceVM = Get-AzVM `
   -Name sourceVM `
   -ResourceGroupName myResourceGroup

Créer un groupe de ressources

Créez un groupe de ressources avec la commande New-AzResourceGroup.

Un groupe de ressources Azure est un conteneur logique dans lequel les ressources Azure sont déployées et gérées. Dans l’exemple suivant, un groupe de ressources nommé myGalleryRG est créé dans la région EastUS :

$resourceGroup = New-AzResourceGroup `
   -Name 'myGalleryRG' `
   -Location 'EastUS'

Une galerie est la principale ressource utilisée pour permettre le partage d’images. Les caractères autorisés pour le nom de galerie sont les lettres majuscules ou minuscules, les chiffres et les points. Le nom de galerie ne peut pas contenir de tirets. Les noms de galerie doivent être uniques dans votre abonnement.

Créez une galerie d’images à l’aide de la commande New-AzGallery. L’exemple suivant crée une galerie nommée myGallery dans le groupe de ressources myGalleryRG.

$gallery = New-AzGallery `
   -GalleryName 'myGallery' `
   -ResourceGroupName $resourceGroup.ResourceGroupName `
   -Location $resourceGroup.Location `
   -Description 'Azure Compute Gallery for my organization'	

Créer une définition d’image

Les définitions d’image créent un regroupement logique des images. Elles sont utilisées pour gérer les informations sur les versions d’image créées au sein de celles-ci. Les noms de définition d’image peuvent contenir des lettres majuscules ou minuscules, des chiffres, des tirets et des points. Pour plus d’informations sur les valeurs que vous pouvez spécifier pour une définition d’image, consultez Définitions d’image.

Créez la définition d’image à l’aide de New-AzGalleryImageDefinition. Dans cet exemple, l’image de la galerie se nomme myGalleryImage et est créée pour une image spécialisée.

$galleryImage = New-AzGalleryImageDefinition `
   -GalleryName $gallery.Name `
   -ResourceGroupName $resourceGroup.ResourceGroupName `
   -Location $gallery.Location `
   -Name 'myImageDefinition' `
   -OsState specialized `
   -OsType Windows `
   -Publisher 'myPublisher' `
   -Offer 'myOffer' `
   -Sku 'mySKU'

Créer une version d’image

Créez une version d’image à partir d’une machine virtuelle à l’aide de New-AzGalleryImageVersion.

Les caractères autorisés pour la version d’image sont les nombres et les points. Les nombres doivent être un entier 32 bits. Format: MajorVersion.MinorVersion.Patch.

Dans cet exemple, la version d’image est 1.0.0 et est répliquée dans les deux centres de données USA Est et USA Centre Sud. Lors du choix des régions cibles pour la réplication, vous devez inclure la région source en tant que cible pour la réplication.

Pour créer une version d’image à partir de la machine virtuelle, utilisez $vm.Id.ToString() comme -Source.

   $region1 = @{Name='South Central US';ReplicaCount=1}
   $region2 = @{Name='East US';ReplicaCount=2}
   $targetRegions = @($region1,$region2)

New-AzGalleryImageVersion `
   -GalleryImageDefinitionName $galleryImage.Name`
   -GalleryImageVersionName '1.0.0' `
   -GalleryName $gallery.Name `
   -ResourceGroupName $resourceGroup.ResourceGroupName `
   -Location $resourceGroup.Location `
   -TargetRegion $targetRegions  `
   -Source $sourceVM.Id.ToString() `
   -PublishingProfileEndOfLifeDate '2030-12-01'

La réplication de l’image à l’ensemble des régions cibles peut prendre un certain temps.

Créer une machine virtuelle

Une fois que vous disposez d’une image spécialisée, vous pouvez créer une ou plusieurs nouvelles machines virtuelles. Utilisation de l’applet de commande New-AzVM. Pour vous servir de l’image, utilisez Set-AzVMSourceImage et définissez -Id sur l’ID de définition d’image ($galleryImage.Id dans le cas présent) afin de toujours utiliser la version la plus récente de l’image.

Remplacez les noms de ressources en fonction des besoins dans cet exemple.

# Create some variables for the new VM.
$resourceGroup = "myResourceGroup"
$location = "South Central US"
$vmName = "mySpecializedVM"

# Create a resource group
New-AzResourceGroup -Name $resourceGroup -Location $location

# Create the network resources.
$subnetConfig = New-AzVirtualNetworkSubnetConfig -Name mySubnet -AddressPrefix 192.168.1.0/24
$vnet = New-AzVirtualNetwork -ResourceGroupName $resourceGroup -Location $location `
  -Name MYvNET -AddressPrefix 192.168.0.0/16 -Subnet $subnetConfig
$pip = New-AzPublicIpAddress -ResourceGroupName $resourceGroup -Location $location `
  -Name "mypublicdns$(Get-Random)" -AllocationMethod Static -IdleTimeoutInMinutes 4
$nsgRuleRDP = New-AzNetworkSecurityRuleConfig -Name myNetworkSecurityGroupRuleRDP  -Protocol Tcp `
  -Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * `
  -DestinationPortRange 3389 -Access Deny
$nsg = New-AzNetworkSecurityGroup -ResourceGroupName $resourceGroup -Location $location `
  -Name myNetworkSecurityGroup -SecurityRules $nsgRuleRDP
$nic = New-AzNetworkInterface -Name $vmName -ResourceGroupName $resourceGroup -Location $location `
  -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id -NetworkSecurityGroupId $nsg.Id

# Create a virtual machine configuration using $imageVersion.Id to specify the image version.
$vmConfig = New-AzVMConfig -VMName $vmName -VMSize Standard_D1_v2 | `
Set-AzVMSourceImage -Id $galleryImage.Id | `
Add-AzVMNetworkInterface -Id $nic.Id

# Create a virtual machine
New-AzVM -ResourceGroupName $resourceGroup -Location $location -VM $vmConfig

Nous vous recommandons de partager l’accès au niveau de la galerie. Utilisez une adresse e-mail et la cmdlet Get-AzADUser pour obtenir l’ID d’objet de l’utilisateur, puis utilisez New-AzRoleAssignment pour leur donner accès à la galerie. Remplacez l’exemple d’e-mail, alinne_montes@contoso.com dans cet exemple, par vos propres informations.

# Get the object ID for the user
$user = Get-AzADUser -StartsWith alinne_montes@contoso.com
# Grant access to the user for our gallery
New-AzRoleAssignment `
   -ObjectId $user.Id `
   -RoleDefinitionName Reader `
   -ResourceName $gallery.Name `
   -ResourceType Microsoft.Compute/galleries `
   -ResourceGroupName $resourceGroup.ResourceGroupName

Nettoyer les ressources

Quand vous n’avez plus besoin du groupe de ressources et de toutes les ressources associées, vous pouvez utiliser l’applet de commande Remove-AzResourceGroup pour les supprimer :

# Delete the gallery 
Remove-AzResourceGroup -Name myGalleryRG

# Delete the VM
Remove-AzResourceGroup -Name myResoureceGroup

Azure Image Builder

Azure propose également un service, basé sur Packer, nommé Azure VM Image Builder. Il vous suffit de décrire vos personnalisations dans un modèle, et celui-ci gère la création d’images.

Étapes suivantes

Dans ce tutoriel, vous avez créé une image de machine virtuelle spécialisée. Vous avez appris à :

  • Créer une instance Azure Compute Gallery
  • Créer une définition d’image
  • Créer une version d’image
  • Créer une machine virtuelle à partir d’une image
  • Partager une galerie

Passez au didacticiel suivant pour en savoir plus sur les groupes de machines virtuelles identiques.