Démarrer et éteindre automatiquement une VM avec Azure Automation

Azure, solutions Cloud de Microsoft
Azure, solutions Cloud de Microsoft

Le Cloud c’est bien mais ce n’est pas gratuit. Je vous propose de vois comment vous pouvez simplement planifier le démarrage ou l’arrêt d’une machine virtuelle Azure. J’avais déjà abordé ce sujet dans des anciens articles (ici et ) mais ces anciennes méthodes ne sont plus valides aujourd’hui.

Création d’un compte Azure Automation

Afin de pouvoir planifier des actions au sein de vous ressources dans Azure, nous allons utiliser un objet que l’on appelle Azure Automation. Si ce n’est pas déjà le cas, je vous invite à en créer un et positionner l’objet dans la même localisation et le même RSG que les VM que vous souhaitez piloter automatiquement.

Création d'un compte Azure Automation (étape 1)
Création d’un compte Azure Automation (étape 1)

Cet outil va nous permettre d’exécuter des scripts PowerShell de manière planifiée dans Azure.

Création d'un compte Azure Automation (étape 2)
Création d’un compte Azure Automation (étape 2)
Création d'un compte Azure Automation (étape 3)
Création d’un compte Azure Automation (étape 3)

Pas vraiment de complexité dans la configuration, choisissez un p’tit nom qui vous convient et gardez les options par défaut dans l’onglet Advanced – à savoir cochez la case System assigned (et laissez la 2nde case décochée).

(Ads)

Démarrer automatiquement une VM via un Runbook personnalisé

Nous allons créer un nouveau Runbook personnalisé. C’est simplement un script. Vous pouvez utiliser plusieurs langages et dans notre cas nous allons bien entendu utiliser du PowerShell.

Création d'un nouveau Runbook
Création d’un nouveau Runbook
Choix du language de programmation du script
Choix du language de programmation du script

Je vous laisse le soin de choisir le nom de votre script. Dans mon cas, j’ai choisi PowerShell en version 5.1. Une fois que vous êtes en mode édition dans votre script, il vous suffit d’ajouter une seule ligne pour démarrer automatiquement votre machine virtuelle. Dans mon cas, je précise le nom et le ressource groupe de la VM.

Mais vous pourriez bien entendu faire des choses plus complexes comme traiter plusieurs VM, plusieurs RSG, etc. Perso, j’ai supprimé tout le code qui est généré automatiquement et proposé par Microsoft pour mieux m’y retrouver. Mais là encore, vous pouvez choisir de tout garder et simplement ajouter ce qui vous intéresse. 🙂

# Starting the VM
Start-AzVM -ResourceGroupName "Nom-Resource-Group -Name "NomVM"

Une fois que vous avez terminé, vous pouvez enregistrer et publier votre script.

(Ads)

Planifier l’exécution automatique de votre script

Notre script est prêt à fonctionner. Il ne nous reste plus qu’à choisir le moment précis de son exécution ainsi que son éventuelle récurrence. Pour ce faire, retournez dans votre Automation account et choisissez cette fois-ci l’option Schedules.

Création d'un Schedule
Création d’un Schedule

Créez un nouveau Schedule puis définissez le moment de la journée à laquelle votre script doit être exécuté. Ne vous trompez sur le choix de votre fuseau horaire sinon forcément mais ça va moins bien fonctionner (ou pas comme vous l’espéreriez) 🙂

Une fois que c’est fait, il ne vous reste plus qu’à lier votre Schedule à votre script PowerShell. Pour ce faire, revenez sur votre script et utilisez l’option Add a schedule.

Association de notre Schedule à notre Runbook (1)
Association de notre Schedule à notre Runbook (1)
Association de notre Schedule à notre Runbook (2)
Association de notre Schedule à notre Runbook (2)

Voilà c’est terminé. Votre script sera exécuté conforment à votre planification et de manière récurrente si vous l’avez configuré en ce sens. Bien sûr, il y existe plein de manière différente d’éteindre ou allumer un VM automatiquement (Azure Function, Logic Apps, etc.).

Eteindre votre VM automatiquement dans Azure

Pour automatiser l’arrêt de votre VM, vous pouvez faire la même chose avec un Schedule différent et un autre script. Dans celui-ci, vous mettrait alors la ligne de commander PowerShell suivante :

Stop-AzVM -ResourceGroupName "ResourceGroup" -Name "VM"

Ou alors, vous pouvez choisir d’utiliser l’option graphique disponible dans le portail Azure. Car oui, si démarrer une VM automatiquement nous oblige à réaliser les actions précédemment mentionnées et bien étrangement l’arrêt d’une VM peut être effectué simplement depuis le portail Azure dans les options de l’objet VM. ¯\_(ツ )_/¯

J’ai vraiment du mal à comprendre pourquoi l’arrêt automatique est proposé nativement par Microsoft mais pas le démarrage automatique. Mais bon, l’important c’est que l’on arrive à faire ce que l’on veut.

Plus informations sur les commandes utilisées : Start-AzVM & Stop-AzVM.