Planifier le démarrage et l’arrêt d’une VM sur Azure

Dans le cadre de mon travail, j’ai été amené à faire des expérimentations dans des VM sur Azure.

Toutefois, et comme toute personne ayant monté une VM sur Azure, on se rend compte que la facture peut vite grimper!

Une des solutions est d’arrêter la VM lorsqu’on ne l’utilise pas et de la redémarrer lorsqu’on en a besoin. Dans mon cas, la VM me servait entre 8h du matin et 21h le soir. En dehors de ces heures, je l’arrêtais pour réduire ma facture Azure

Savais-tu que ce processus fastidieux et qu’on oublie bien trop souvent peut être automatisé ?

Voyons ensemble comment.

Je vais supposer que tu as déjà une VM existante dont tu veux automatiser le démarrage et l’arrêt. Je ne décrirai donc pas ici la procédure de création d’une VM.

 

Option #1 : Configurer l’auto-shutdown à même la configuration de la VM

L’option « auto-shutdown » ne permet, comme son nom l’indique, que de planifier l’arrêt de la VM et non son (re)démarrage.

De ce fait, cette option est à privilégier lorsque tu connais à l’avance à quelle heure tu veux éteindre la VM, mais que tu ne sais ni à quelle heure, ni même quel jour tu la redémarrera.

Notes bien que je dis « à quelle heure » tu comptes éteindre la VM et non « quelle heure de quel jour ». En effet, l’auto-shutdown se fera tous les jours à l’heure indiquée.

De plus, il est à noter que cette option n’est disponible que pour une VM créée en mode ARM et non ASM (i.e. non en mode « classique »).

Pour activer l’auto-shutdown, va dans les configuration de ta VM sur le portail Azure et cliques sur « Auto-shutdown » :

auto_shutdown

Tu peux y configurer l’heure d’arrêt et la timezone.

Tu peux également configurer l’envoi d’un courriel ou d’une notification via un WebHook, juste avant que l’action d’arrêter la VM ne soit déclenchée.

La configuration d’envoi de courriel est assez simple, il suffit d’entrer une adresse de courriel valide.

Pour l’envoi d’une notification via un WebHook, il faut entrer l’URL d’un WebHook. Nous décrirons cette option dans un futur article.

N’oublies pas de sauvegarder tes modifications pour que ta configuration soit effective.

Environ 30 minutes avant l’heure d’arrêt prévue, tu recevras un courriel avec des liens te permettant de :

  • Décaler l’arrêt d’une heure
  • Décaler l’arrêt de 2 heures
  • Empêcher l’arrêt

Si tu choisi de décaler l’arrêt, tu recevras un nouveau courriel 30 minutes avant la nouvelle heure d’arrêt prévue.

email-autoshutdown

 

Plus d’options, s’il vous plaît ?!

Maintenant, tu te dit que tout cela est bien beau mais que tu aimerais avoir plus de contrôle sur l’arrêt et le démarrage de ta VM. Pour cela, il te faut utiliser un Runbook.

 

Option #2 : Utiliser un Runbook

Cette option t’offre plus de contrôle sur les paramètres de démarrage et d’arrêt de ta VM.

Un Runbook requiert l’utilisation du service Azure Automation.

NOTE IMPORTANTE : contrairement à l’auto-shutdown, Azure Automation n’est pas gratuit. Il est donc important de tenir compte de ce facteur coût lors de ton utilisation de ce service.

Qu’est-ce qu’Azure Automation ?

Comme son nom l’indique, Azure Automation est un service te permettant d’automatiser des tâches et des processus répétitifs de gestion de ton infrastructure Cloud (et même multi-Cloud) et/ou on-premises.

Dans notre cas, nous allons automatiser l’arrêt et le (re)démarrage d’une VM en fonction d’un planning. Toutefois, un processus peut être bien plus complexe que cela.

Qu’est-ce qu’un Runbook ?

Un Runbook décrit une série d’étapes qui seront exécutées dans le contexte d’un processus donné. C’est donc à travers 2 Runbooks que nous allons définir notre processus :

  • Un Runbook pour décrire l’arrêt de la VM
  • Un Runbook pour décrire le démarrage de la VM

 

Ok ! J’ai compris. Comment est-ce que je l’utilise maintenant ?

Cela se fait en plusieurs étapes :

1. Créer un compte Azure Automation

Depuis le tableau de bord :

  • Cliques sur « + Create a resource »
  • Sélectionnes la catégorie « Management Tools »
  • Cliques sur « Automation »

Dans la fenêtre de configuration du service Azure Automation :

  • Indiques un nom, choisi ta souscription, ton groupe de ressources et ta localisation
  • Choisi « Yes » pour « Create Azure Run As account ». Cela permettra de créer un compte de service dans Azure Active Directory et de lui attribuer le rôle « Contributeur ». Ainsi, les exécutions des Runbooks se feront sous cette identité de service et non sous votre identité.

create-azure-automation

Après quelques minutes, une nouvelle instance du service Azure Automation, ainsi que quelques Runbooks d’exemples seront créés.

 

2. Créer les Runbooks

Depuis la fenêtre de configuration du service Azure Automation :

  • Cliques sur « Runbooks »
  • Cliques sur « + Add a runbook »
  • Choisi « Quick Create | Create a new runbook »
  • Entres les informations demandées
  • Choisi « Powershell » comme « Runbook Type »

create-vm-runbook-1

create-vm-runbook-2

Après quelques instants d’attente, le Runbook est créé et se voit attribué l’état « New ». Pour être utilisé, il doit être à l’état « Published ». Nous le publierons après avoir complété sa création (notamment en ajoutant le code du script Powershell).

NOTE: En cliquant sur « Browse Gallery », tu peux trouver des Runbook prêts à l’emploi, notamment pour ce besoin d’arrêt et de démarrage planifié de VMs. J’ai fait cet exercice pour te démontrer comment créer ton propre Runbook.

 

3. Ajouter le code du script Powershell au Runbook

En sélectionnant ton nouveau Runbook depuis la liste des Runbooks de ton instance de service Azure Automation, tu arrives dans la fenêtre de personnalisation de ce Runbook. C’est ici que tu peux ajouter le code de ce dernier.

  • Cliques sur « Edit »
  • Entre le script Powershell suivant pour l’arrêt de la VM :

https://gist.github.com/BelRarr/3467da27cf4be12da1aaca30f2b1fd6f

  • Entre le script Powershell suivant pour le (re)démarrage de la VM :

https://gist.github.com/BelRarr/94f9dc5387943f7cbc7efb05112011be

  • Sauvegardes le Runbook en cliquant sur « Save »
  • Tu peux tester le Runbook en cliquant sur « Test pane »
  • Une fois que tu es satisfait de ton Runbook, cliques sur « Publish » pour le publier afin de pouvoir l’utiliser
  • Tu remarqueras notamment que les options (ex. « Schedule », « WebHook » ou « Export »), qui étaient grisées, sont à présents disponibles.

 

edit-runbook-1

edit-runbook-2

 

NOTE #1: en cliquant sur « Publish », toute version antérieure du Runbook sera écrasée.

NOTE #2: tu as à ta disposition une panoplie impressionnante de cmdlets pour construire tes scripts. Tu n’as qu’à dérouler le menu « CMDLETS » à cause de la fenêtre d’édition du script.

NOTE #3: tu peux exporter tes scripts, les versionner et les archiver dans un source control afin d’éviter les problèmes d’écrasement.

NOTE #4 : via l’entrée de menu « Logging and tracing », tu peux activer des traces pour suivre l’utilisation de tes Runbooks et pour t’aider à les déboguer en cas de problèmes.

 

4. Planifier l’exécution des Runbooks

Je t’avais mentionné que, dans mon cas, la VM servait entre 8h et 21h.

De ce fait, le script d’arrêt sera planifié à 21h, tandis que le script de démarrage sera planifié à 7h45 (je me donne un petit jeu afin qu’à 8h, la VM soit démarrée et prête à être utilisée).

Via la fenêtre de personnalisation du Runbook :

  • Cliques sur l’entrée de menu « Schedules »
  • Cliques sur « + Add a new schedule »
  • Cliques sur « Link a schedule to your runbook »
  • Cliques sur « Create a new schedule »
  • Entres les informations demandées et cliques sur « Create »
  • Cliques sur « Configure parameters and run settings » pour entrer les paramètres d’appel au script Powershell
  • Entres les informations demandées et cliques sur « OK »

 

create-schedule-1

create-schedule-2

create-schedule-3

create-schedule-4

Et voilà ! Il te suffit de refaire la même procédure pour planifier l’exécution du script de démarrage de la VM.

NOTE : Tu remarqueras que j’ai indiqué une date d’expiration à la planification. En effet, ce projet se terminera dans un an, donc la planification ne sera plus nécessaire.

 

5. Consulter l’historique d’exécution des Runbooks

Tu peux consulter l’historique d’exécution des Runbooks en cliquant sur l’onglet « Jobs » du Runbook :

jobs-list

 

En conclusion…

Une VM dans Azure n’est pas ce qu’il y a de plus économique en termes de coûts. Toutefois, il se peut que ce soit la bonne, voire la seule solution viable dans ton scénario.

Lorsque c’est le cas, penses à réduire ta facture en planifiant le démarrage et l’arrêt de ta VM (lorsque cela est possible) comme nous venons de le voir aujourd’hui.

Pour rappel :

  • L’auto-shutdown est une avenue intéressante lorsque tu connais à l’avance à quelle heure tu veux éteindre la VM, mais que tu ne sais ni à quelle heure, ni même quel jour tu la redémarrera;
  • L’option du Runbook est à privilégier lorsque tu allumes et éteint ta VM de façon régulière et prévue d’avance.

Comments are closed.