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 là) 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.
Cet outil va nous permettre d’exécuter des scripts PowerShell de manière planifiée dans Azure.
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).
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.
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.
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é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.
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.
Merci pour le super article !
j’essaye de mettre ça en place, et je m’aperçois que pour utiliser le
Connect-AzAccount -identity
il faut au préalable configurer un MSI c’est bien ça ?
j’ai trouvé ça mais je ne suis pas sur de bien le configurer
https://learn.microsoft.com/en-us/powershell/module/az.accounts/connect-azaccount?view=azps-9.1.0#example-5-connect-using-a-managed-service-identity
Pour l’instant, le code généré quand tu créées un Runbook est fonctionnel mais en effet à partir de septembre 2023, Microsoft va nous forcer la main et nous contraindre à utiliser une Managed Identity (est-ce que c’était ça que tu appelais MSI?). Du coup, le code devra changer… Je bossais justement là-dessus pas plus tard qu’hier soir avec un collègue et on s’est aperçu qu’on devrait certainement revoir un partie de notre code à partir de cette date. Après, ça ne devrait pas être énormissime, dans les options de l’objet Automation Account, il y a une section vers le bas Identity. Une fois activée, cette dernière va générer une Registered App dans Azure AD et c’est à cet objet qu’il faudra également ajouter un rôle en fonction de ce que ton script souhaite faire. Par exemple, si c’est pour arrêter/démarrer une VM, il faudra penser à un RBAC comme « Virtual Machine Contributor » ou carrément « Contributor » si on veut être large (toujours selon ce que le script doit faire). Mais justement, je me disais qu’il faudrait prochainement que j’ajoute un warning au début de cet article. 😉
merci pour ton retour rapide !
Bon pas certain d’avoir tout bien configuré, j’essayais avec ISE mais en fait il fallait que je déclenche depuis mon runbook pour tester mon Managed Identity
j’ai réussi à redémarrer ma VM en tout cas, merci pour ton retour
j’ai utilisé le rôle « Desktop Virtualization Power On Contributor » sur ma VM, il faut que je refasse un test avec une VM clean pour voir le minimum !
encore merci c’est vraiment top