Automatisez votre infrastructure avec Azure Automation

By Vincent Flechier | 15 January 2018

Bonne Année 2018

Nous nous proposons pour ce début d’année de découvrir le fonctionnement de la plateforme Azure automation. Bonne lecture!

Introduction

Azure Automation est une plateforme d’automatisation serverless proposée par Microsoft. Cette plateforme vous permet de gérer votre infrastructure Azure ou On-premise via des scripts powershell ou python. Tout comme SMA, Azure Automation permet de stocker des variables, connexions et identifiants de connexions que vous pouvez appeler dans vos scripts.

La facturation

La facturation est comptée à la minute pour chaque job (script) exécuté. Les 500 premières minutes de chaque mois sont gratuites. Les jobs sont ensuite facturés 0,002€/minutes. Le rattachement des nœuds DSC n’est pas facturé pour les machines azure. La facturation est d’environ 5€ pour 5 noeuds pour les machines non azure.

La bibliothèque de script

Le portail Azure Automation met à disposition une bibliothèque de scripts qu’il est possible de télécharger. Ainsi, en peu de temps, il est possible de répondre à vos besoin d’automatisation en téléchargeant ces scripts et éventuellement en les réadaptant à vos besoins.

Cas pratique : Arrêt / Démarrage d’instances

Un cas courant d’automatisation est l’arrêt/démarrage d’instances se basant sur des tags. Ici, nous partons du principe qu’un tag est positionné sur vos instances pour spécifier leur plage d’utilisation. En dehors de ces plages, les instances seront arrêtées afin de réduire la facture azure.

Allez dans runbook de votre azure automation, puis cliquez sur browse gallery

Automation - Runbooks

Dans la recherche tapez tag, puis téléchargez le script suivant

Automation - Runbooks

L’utilisation de ce script est détaillée ici: https://automys.com/library/asset/scheduled-virtual-machine-shutdown-startup-microsoft-azure

DSC automation

DSC automation est une fonctionnalité intégrée à automation qui permet de l’utiliser comme serveur pull DSC. En d’autres termes, le portail azure automation héberge, applique et audite les configurations désirées sur vos machines.

Cas pratique : Gestion des règles firewall

En premier lieu, il faut ajouter le module DSC xNetworking. Dans la section module de Automation, cliquez sur browse gallery. Recherchez le module xNetworking, puis importez-le.

Automation - xNetworking

Allez ensuite dans la section DSC configurations, puis ajoutez vos scripts de configuration DSC.

Automation - DSC

A présent, sélectionnez votre configuration et compilez là:

Automation - Compilation

Vous pouvez ensuite ajouter vos machines dans DSC nodes et y associer les configurations précédemment compilées.

Automation - Ajouts machines

Une fois votre configuration appliquée, l’agent LCM de la machine vérifiera toutes les 15 minutes que la configuration est bien appliquée. En cas de déviance, un warning indiquera que la configuration n’est plus conforme. Vous pouvez bien entendu généré des rapports depuis OMS sur le nombre de machines en déviance. Si vous souhaitez que la configuration se réapplique de manière automatique, il faut reconfigurer l’agent en mode ApplyAndAutoCorrect

Automation - Apply

Gestion des runbook depuis ISE

L’utilisation du portail pour la modification des scripts pose parfois problème. En effet, si vous commencez à modifier un script depuis le portail et que vous perdez la connexion à votre réseau, vos modifications sont perdues. Pour pallier à ce problème, le module AzureAutomationAuthoringToolkit pour powershell ISE permet de modifier les scripts azure automation directement depuis l’éditeur ISE. https://github.com/azureautomation/azure-automation-ise-addon

Automation - Runbooks ISE

Les WebHooks

Les Runbook hébergés sur Automation peuvent être exécutés par tâches schédulées, par api ou par wekhook. Ainsi un script peut être exécuté par votre plateform OMS, votre outil de supervision ou autre outil tier. Attention, il est conseillé d’ajouter des contrôles sur l’émetteur de l’appel webhook pour s’assurer qu’il s’agisse bien d’un appel webhook fait par votre société. Un double contrôle peut être effectué en vérifiant que votre plateforme a bien émis l’appel.

Cas pratique : redémarrage d’une instance

Voici un script que nous avons créé pour redémarrer une instance d’un scaleset:

workflow Restart-VMSS
{
   param (
      [object]$WebhookData
   )

   # If runbook was called from Webhook, WebhookData will not be null.
   if ($WebhookData -ne $null) {
	 
      # Collect properties of WebhookData
      $WebhookName = $WebhookData.WebhookName
      $WebhookHeaders = $WebhookData.RequestHeader
      $WebhookBody = $WebhookData.RequestBody
	 
      # Collect individual headers. VMList converted from JSON.
      $From = $WebhookHeaders.From
      Write-Output "Runbook started from webhook $WebhookName by $From."
      Write-Output "body : $WebhookBody"
      $WebhookBody = ConvertFrom-Json -InputObject $WebhookBody
	 
      # Authenticate to Azure resources
      $Cred = Get-AutomationPSCredential -Name 'AzureCred'
      Login-AzureRmAccount -Credential $Cred
	 
      # get virtual machine
      $VM = $WebhookBody.host 
      $resultSSvm = (Get-AzureRmVmss | Get-AzureRmVmssVM | ?  {$_.Name -eq $VM})
      $resultVM = (Get-AzureRmVm | ? name -eq $VM)
	 
      Write-Output $resultVM
	        
      if ($resultVM -ne $null -and $resultSSvm -ne $null) {
         Write-Output "l'object $VM est en doublon sur Azure"
      } else {
	 if ($resultSSvm -ne $null) {
            # Restart instance
            Restart-AzureRmVmss -ResourceGroupName $resultSSvm.ResourceGroupName -VMScaleSetName $resultSSvm.Name -InstanceId $resultSSvm.InstanceId
         } else {
	    # Restart VM
	    Restart-AzureRmVM -ResourceGroupName $resultVM.ResourceGroupName -Name  $resultVM.Name
	 }
      }
   } else {
      Write-Error "Runbook mean to be started only from webhook."
   }
} 

Dans la section Runbooks de votre Automation, cliquez sur ‘add a runbook’. Donnez un nom à votre runbook (Restart-VMSS) Indiquez le langage powershell Cliquez sur ok, puis collez le contenu du script Une fois créé, sélectionnez le, puis créez un webhook dans la section webhook de ce runbook. Copiez le lien géné. Celui-ci vous servira à appeler le webhook depuis un autre outil.

Voici un exemple d’appel de webhook que nous avons créé pour cet exemple depuis datadog Automation - Runbooks Nous retrouvons la propriété host récupéré par le script. Attention a bien spécifier la structure entre crochet [] comme dans l’exemple. Dans le cas contraire, le script n’identifiera pas l’objet envoyé au script comme étant au format Json.

L’appel de ce webhook pourra donc être enclenché, ici par datadog, sur une alerte prédéfinie (saturation cpu, perte du ping pendant plus de X minutes, indisponibilité d’un service…)

Conclusion

Azure Automation est une plateforme complète d’automatisation simple d’utilisation. Elle ne nécessite pas de coup de licence pour être utilisée, mais est facturée à l’utilisation (rappel: 0,002€/minutes par temps d’exécution d’un job). La bibliothèque de script est un vrai plus pour répondre à des besoins standards d’automatisation. Azure automation intègre le rôle de serveur pull DSC et simplifie le processus de rattachement des nœuds DSC. Il ne permet toutefois pas de gérer des fichiers de données DSC. La possibilité d’appeler les runbook via des webhook permet d’avoir une intégration complète de la chaine d’automatisation avec des outils tiers.

Nous espérons que cet article vous aura plu. Pour plus de détails, n’hésitez pas à consulter la documentation azure sur le sujet.