[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
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
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 -ForceMots clés Technorati : Azure Powershell
}
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
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…
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)
Mise en place de la connexion Automation
Le plus gros est fait
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
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
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
- Start : Détermine si la machine sera arrêtée ou démarrée
- VMName : nom de la machine virtuelle
- VMServiceName : nom du service
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 )
Commentaires