Création d’une machine virtuelle sur Azure en PowerShell à partir d’un VHD existant

azure-banniere

Dans un précédent article, je vous présentais comment envoyer un VHD personnalisé depuis votre poste local vers Azure. Aujourd’hui, nous allons voir comment à partir d’un VHD maison nous allons pouvoir créer une machine virtuelle et tous les composants nécessaires à son bon fonctionnement sur le cloud de Microsoft.

Dans mon exemple, l’objectif sera de provisionner un VM de type Windows 10 directement dans Azure. En effet, par défaut (et pour l’instant en tout cas – 25/10/2016), il est toujours impossible de provisionner une VM Windows 10 dans Windows Azure (sauf si votre subscribtion est obtenue via un compte MSDN Visual Studio Developer). Si vous avez testé, vous aurez peut-être observé les messages suivants :

2

3

Exclusively available for MSDN subscribtion…

J’ai donc créé un VHD sur lequel j’ai installé Windows 10 et je l’ai transféré dans un container sur mon Storage Account. Pour plus d’informations sur comment transférer un VHD vers Auzre, je vous invite à consulter ce article.

4

Nous allons donc maintenant utiliser ce VHD et le rattacher à mon infrastructure existante. Profitez-en pour récupérer le chemin complet vers votre VHD, nous en aurons besoin pour la suite. 😉

Bien sûr, lorsque je dis infrastructure existante, cela veut dire que vous devez déjà disposer des composants suivants (que nous aurons besoin de mentionner dans la CmdLet qui va nous permettra de créer notre virtual machine) :

  • Ressource Group
  • Virtual Network
  • Location (westeurope, northeurope, etc.) – il s’agit des codes name pour les différents centres Azure dans le monde. Vous pouvez retrouver la liste en suivant cette URL.
  • (éventuellement) Public IP (si votre VM doit disposer d’une adresse IP publique)
  • (éventuellement) Availability Set (si vous souhaitez rattacher cette machine virtuelle à un Availability Set déjà existant)

Une fois que vous êtes prêt nous allons exécuter la CmdLet suivante :

#Login-AzureRmAccount (vous devez être identifié sur Azure)
#Select-AzureRmSubscription -SubscribtionId "xxx-xxx-xxx" (vous avez déjà sélectionné la subscribtion dans laquelle vous travaillez)
$resourceGroupName = "ctxtgi12"
$destinationVhd = "https://xxxxxxxx.blob.core.windows.net/vhds/template_Windows10_tgi.vhd"
$virtualNetworkName = "VirtualNetwork"
$locationName = "westeurope"
$virtualNetwork = Get-AzureRmVirtualNetwork -ResourceGroupName $resourceGroupName -Name $virtualNetworkName
$publicIp = New-AzureRmPublicIpAddress -Name "Win10-PIP" -ResourceGroupName $ResourceGroupName -Location $locationName -AllocationMethod Static
$networkInterface = New-AzureRmNetworkInterface -ResourceGroupName $resourceGroupName -Name "Win10-NIC" -Location $locationName -SubnetId $virtualNetwork.Subnets[0].Id -PublicIpAddressId $publicIp.Id
$availabilityset = (Get-AzureRmAvailabilitySet -ResourceGroupName $resourceGroupName)[0].Id
$vmConfig = New-AzureRmVMConfig -VMName "MyVMWindows10" -VMSize "Standard_DS1" #-AvailabilitySetID $availabilityset
$vmConfig = Set-AzureRmVMOSDisk -VM $vmConfig -Name "MyVMWindows10" -VhdUri $destinationVhd -CreateOption Attach -Windows
$vmConfig = Add-AzureRmVMNetworkInterface -VM $vmConfig -Id $networkInterface.Id
New-AzureRmVM -VM $vmConfig -Location $locationName -ResourceGroupName $resourceGroupName

A adapter bien entendu en fonction de votre cas de figure ! 🙂

5

Si l’on regarde un peu de plus prés les quelques lignes ci-dessus, nous pouvons remarquer les points suivants :

  • Ma VM est automatiquement ajoutée au sein de mon VirtualNetwork et disposera donc d’un IP au sein de mon Subnet. Dans le cas présent et au vue des choix de configuration de mon VirtualNetwork, ma VM se verra attribuer une NIC Win10-NIC avec une IP de type Statique.
  • Je lui attribue également automatiquement une addresse IP publique qui portera le nom Win10-PIP.
  • Ma VM s’appellera MyVMWindows10 et sera bien dans la zone West Europe.
  • Vous pouvez également l’intégrer automatiquement à un Availability Set (attention à accorder votre choix de Size VM). Dans mon exemple, j’ai créé une VM de type Standard_DS1.
  • Et enfin, dans l’avant-dernière ligne on utilise le paramètre attach pour attacher notre VHD à notre nouvelle machine virtuelle et on lui indique qu’il s’agira d’une VM de type Windows.

Après quelques instants, vous remarquerez sur le portail Azure que les différents éléments ont été créés et que notre machine virtuelle a d’ailleurs été automatiquement démarrée :

6

7

La machine virtuelle a été générée conformément à nos besoins (ip interne dans le virtual network, ip publique, sizing, azure location, etc.). Pour vérifier que tout est conforme, il ne vous reste alors plus qu’à vous y connecter en RDP ! 🙂

8

Un grand merci à Léon dont l’article suivant m’a permis d’avancer sur ce point : https://blogs.infosupport.com/creating-a-vm-in-azure-based-on-an-uploaded-vhd/. 🙂