Commisionner-Décomissionner des VMs dans Azure en PowerShell

imageUn post rapide pour partager un script Powershell que j’utilise pour bien gérer mon abonnement Azure.

Comme vous le savez, on paie à l’usage et donc si vous laissez tourner vos VMs 24/7, la facture grossit très vite. D’autant plus qu’il ne suffit pas d’éteindre la machine.

Mon abonnement servant pour des démos et des tests, je l’utilise quelques jours par mois et pas toute la journée. Vous avez la même situation pour un environnement de recette.

Il est donc important de décommisionner vos VMs. Je ne parle pas de l’arrêter mais bien de la supprimer. Evidemment, les VHDs restent sur votre stockage (et continuent à être facturés) et vous pouvez sauvegarder la configuration de la VM en local.

Les cmdlets à retenir :

  • Import-AzurePublishSettingsFile : branche le contexte sur votre abonnement. Le fichier en entrée est à récupérer sur le portail de gestion
  • Stop-AzureVM  : arrête la VM (autant faire cela propre)
  • Export-AzureVM : permet de récupérer toute la configuration de la VM (les VHDs) pour pouvoir la remonter par la suite
  • Remove-AzureVM : supprime la VM
  • Remove-AzureService : supprime le Service associé (DNS)
  • Import-AzureVM : recrée la VM
  • Start-AzureVM : démarre la VM

Le script :

Décommissionnement

 Import-AzurePublishSettingsFile "C:\AzureRoot\Djeepy1.publishsettings"

$myVMsNames = @("djeepy1-bi-sql","djeepy1-bi-ad") #Service (DNS)
$myVMsServices = @("djeepy1-bi-sql","djeepy1-bi-ad") #rolename (nom de la machine)

$i = 0
Foreach ( $myVMDNS in $myVMsServices )
{
      $vmName = $myVMsNames[$i]
      Stop-AzureVM -ServiceName $myVMDNS -Name $vmName
      $ExportPath = "C:\AzureRoot\ExportVMs\ExportAzureVM-$vmName.xml"
      Export-AzureVM -ServiceName $myVMDNS -name $vmName -Path $ExportPath
      $i = $i+1
}
$i = 0
Foreach ( $myVMDNS in $myVMsServices )
{
      $vmName = $myVMsNames[$i]
      Remove-AzureVM -ServiceName $myVMDNS -name $vmName
      Remove-AzureService -ServiceName $myVMDNS -Force
      $i = $i+1
}

 

Commissionnement

 Import-AzurePublishSettingsFile "C:\AzureRoot\Djeepy1.publishsettings"  
$myVNet = "djeepy1-bi-vlan"  
$AG = "Djeepy1-BI"  
$myStorageAccount = "djeepy1bivhds"  

$myVMsNames = @("djeepy1-bi-ad","djeepy1-bi-sql") #DNS 
$myVMsServices = @("djeepy1-bi-ad","djeepy1-bi-sql") #rolename (nom de la machine)  

Get-AzureSubscription | Set-AzureSubscription -CurrentStorageAccount $myStorageAccount   

$i = 0
Foreach ( $myVMDNS in $myVMsServices )
{
      $vmName = $myVMsNames[$i]
      $ExportPath = "C:\AzureRoot\ExportVMs\ExportAzureVM-$vmName.xml"
      Import-AzureVM -Path $ExportPath | New-AzureVM -ServiceName $myVMDNS -VNetName $myVNet -AffinityGroup $AG
      Start-AzureVM -ServiceName $myVMDNS -name $vmName
      $i = $i+1
}

Désolé si mon Powershell n’est pas des plus académiques🙂

 

Note : il est prévu qu’une VM éteinte ne soit pas facturée. Je ne sais pas si c’est actuellement le cas ou si ça arrivera plus tard. Je vous laisse creuser mais vous verrez

4 réflexions sur “Commisionner-Décomissionner des VMs dans Azure en PowerShell

  1. @Fleid, j’en étais presque sûr mais j’avais la flemme et de tester et de chercher le lien :p
    Merci pour le précision.
    @Michel, évidemment (je l’ai dit non ?)

  2. Lors de l’IT Camp hier à Strasbourg (Merci Stanislas), il a été précisé que si tu arrêtes la VM par le bureau à distance, la facturation continue. Pour être certain que la facturation s’arrête, il est nécessaire que l’arrêt vienne de la console Azure via le portail ou un script PowerShell.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s