[Azure] Planifier l’extinction et le démarrage de vos machines virtuelles

Comme beaucoup j’utilise le service de machine virtuelle d’Azure, et malgré ma prudence il m’est arrivé plusieurs fois de laisser allumer une machine de démonstration pendant plusieurs jours sans que cela ne soit utile (dilapidant mon budget mensuel en quelques jours).

Ce billet fait suite à cet excellent post permettant de scripter l’extinction et le démarrage des VM (les économies pouvant être réalisées peuvent être énormes!). Scripter c’est bien, mais planifier c’est mieux pour prévenir des étourderies!

Pour réaliser cet exploit, petit tour vers l’Automatisation dans Azure (encore en version béta) qui permet facilement, rapidement et “gratuitement” d’exécuter des Workflow planifiés en PowerShell (appelé Runbook) dans Azure.

Activation de Microsoft Azure Automation

Dans un premier temps il va falloir accéder à cette fameuse fonctionnalité qu’est l’Automation Azure.

Direction la gestion des comptes, et plus particulièrement les fonctionnalités préliminaires : https://account.windowsazure.com/PreviewFeatures

Il suffit maintenant d’activer la fonctionnalité Azure Automation

image

Désormais l’Automatisation est disponible dans le portail Azure.

Mise en place de la planification

Dans le nouveau menu Automation, créer un compte automation

image

Une fois créé direction Runbook et il suffit d’importer ce script :

workflow StartOrStopVM {  
     Param(   
        [Parameter(Mandatory=$true)]
        [String]
        $VMServiceName,    
        [Parameter(Mandatory=$true)]
        [String]
        $VMName,
        [Parameter(Mandatory=$true)]
        [bool]
        $Start
    )
    
    $MySubscriptionName = Get-AutomationVariable -Name 'MySubscriptionName'
    $Con = Get-AutomationConnection -Name 'MyAzureConnexion'
    if ($Con -eq $null)    {
        Throw "[Error] Connexion error: $MyConnection does not exist"  
    }
    $Cert = Get-AutomationCertificate -Name $Con.AutomationCertificateName
    if ($Cert -eq $null){
        Throw "[Error] Certificate error: $MyCertificate does not exist"  
    }
 
    Set-AzureSubscription -SubscriptionName $MySubscriptionName  -Certificate $Cert  -SubscriptionId $Con.SubscriptionID
    Select-AzureSubscription -SubscriptionName $MySubscriptionName
 
    if($Start){
        Start-AzureVM -ServiceName $VMServiceName -Name $VMName 
    }else{
        Stop-AzureVM -ServiceName $VMServiceName -Name $VMName -Force 
Mots clés Technorati :
    }    
   
    Write-Output "[Info] Finished"
}

Une fois importé le script n’est encore qu’à l’état de brouillon, il faut donc le publier.

Dans le Runbook –> Auteur –> Publier

Le script à besoin de différentes données pour fonctionner :

  • Le nom de la souscription
  • Une connexion Automation
  • Un certificat

“Tout” se passe dans l’onglet Actif

Configuration

Mise en place du Certificat

C’est la partie la plus longue, mais heureusement elle n’est à faire qu’une fois Sourire

Pour le certificat, le plus simple est de créer le sien et de l’importer dans Azure.

Go IIS –>Server Certificate –> Create Self-Certificate…

image

 

Dans les détails du certificat –> Copy to File –>  Export Private Key : No –> Type : DER –> .cer créé

Le certificat est fait, il faut maintenant l’exporter :

Export… –> choisir un bon mot de passe –> .pfx créé

Il suffit désormais d’importer le certificat (.cer) dans Azure :

Dans le portail –> Paramètres –> Gestion des certificats –> Télécharger –> sélectionner le certificat créé auparavant (.cer)

Retour le l’Automation –> onglet Actif –> Ajouter un paramètre –> Ajouter des informations d’identification

  • Type : Certificat
  • Nom : MyAutomationCertificate
  • Certificat : selectionner le certificat créé précédemment (.pfx)

image

Mise en place de la connexion Automation

Le plus gros est fait Sourire

Toujours sur le même principe :

Ajouter un paramètre –> Ajouter une connexion :

  • Type : Azure
  • Nom : MyAzureConnexion
  • Certificate Name : MyAutomationCertificate
  • SubscriptionID : ID de la souscription (ou ID Abonnement), visible dans les paramètres

image

 

Mise en place de la souscription

Dernière étape de la configuration

Ajouter un paramètre –> Ajouter une variable :

  • Type : Chaine
  • Nom : MySubscriptionName
  • Valeur : nom de la souscription cible
  • Chiffré : Non

image

 

Planification

Tout est fait il est désormais temps de planifier les tâches.

Dans le Runbook –> onglet Planification –> Lier à une nouvelle planification

Ici c’est selon le besoin Sourire

  • Start : Détermine si la machine sera arrêtée ou démarrée
  • VMName : nom de la machine virtuelle
  • VMServiceName : nom du service

image

 

Conclusion

La configuration est plutôt longue, mais une fois en place il devient très facile de réaliser les tâches planifiées.

Pour aller plus loin il est possible d’appeler un Runbook dans un autre Runbook (au final ce ne sont que des scripts PowerShell), donc rien n’empêche de réaliser des arrêts et des démarrages de masse en appelant StartOrStopVM. Il est aussi possible d’importer ses propres modules Powershell pour encore plus de flexibilité.

Bref c’est simple, rapide et efficace pour pas cher : gratuit pour 500min de tâche (ce qui est déjà beaucoup pour ce genre d’utilisation Sourire)

Ces billets pourraient aussi vous intéresser

Vous nous direz ?!

Commentaires

comments powered by Disqus