Jedem MSDN Abonnenten stellt Microsoft ein Azure Freikontingent zur Verfügung. Abhängig vom Typ der Subscription beläuft sich dieses auf 75 € (Premium) oder 115 € (Ultimate). Dies ist ausreichend um einen wirklich performanten virtuellen Rechner mit 4 Kernen, 14 GB RAM und 250 GB SSD einen Monat zu betrieben. Zumindest wenn man daran denkt, die Maschine am Feierabend herunterzufahren. Sonst läuft der Zähler einfach weiter und schon nach 7 Tagen ist das gesamte Monatsbudget aufgebraucht. Lässt sich da nicht etwas automatisieren?
Ein zeitgesteuertes Stoppen lässt sich am einfachsten mit Hilfe der Microsoft Azure Automatisierung umsetzen.
Hierzu sind folgende Schritte erforderlich.
Schritt 1: Erzeugen eines Management Zertifikats
Um über PowerShell auf Windows Azure zugreifen zu können ist eine Authentifizierung notwendig. Dies funktioniert über Nutzername und Passwort. Sicherer ist die Verwendung eines Zertifikats.
Dieses kann über die Kommandozeile erzeugt werden.
makecert -sky exchange -r -n "CN=Azure Start/Stop Management Certificate" -pe -a sha1 -len 2048 -ss My "D:\Temp\Azure_StartStopManagement_Certificate.cer"
Über die Management Console ist im Anschluss ein Exort des Zertifikats (incl. Private Key) möglich.
Nach den gezeigten Schritten stehen im Verzeichnis D:\Temp die Dateien Azure_StartStopManagement_Certificate.cer und Azure_StartStopManagement_Certificate.pfx zur Verfügung.
Schritt 2: Hinterlegen des Management Zertifikats
Das Zertifikat muss nun im Bereich Einstellungen -> Verwaltungszertifikate im Azure Management Portal hinterlegt werden.
Wer über den Private Key des Zertifikats verfügt kann nun über PowerShell auf den Azure Account zugreifen.
Schritt 3: Anlegen der Automatisierung
Für die Hinterlegung eines Skripts muss ein Automation-Konto angelegt werden.
Schritt 5: Hinzufügen von Ressourcen
Für die Ausführung der Skripte (siehe Schritt 6) werden verschiedene Informationen benötigt. Hierzu gehören der Name und die ID der Subscription sowie das im ersten Schritt erstellten Zertifikat für die Authentifizierung.
Die ID und der Name der Subscription werden als Variablen eingefügt.
Die relevanten Informationen hierzu sind unter Einstellungen des Azure Accounts zu finden.
Das Zertifikat wird als Anmeldeinformation eingefügt. Zusätzlich wird dessen Name als Zeichenfolge hinterlegt. Dies ermöglicht später eine flexiblere Steuerung mehrerer Azure Accounts.
Nach dem Vornehmen der Einstellungen werden diese in der Übersicht unter Ressourcen angezeigt.
Schritt 4: Hinterlegen der PowerShell Skripte
Das Skript, welches die Logik enthält, wird als Runbook hinterlegt.
workflow StopVM
{
Param
(
[parameter(Mandatory=$true)][String] $VMName,
[parameter(Mandatory=$true)][String] $ServiceName
)
$subscriptionName = Get-AutomationVariable -Name "SubscriptionName"
$subscriptionID = Get-AutomationVariable -Name "SubscriptionID"
$certificateName = Get-AutomationVariable -Name "CertificateName"
$certificate = Get-AutomationCertificate -Name $certificateName
Set-AzureSubscription -SubscriptionName $subscriptionName -SubscriptionId $subscriptionID -Certificate $certificate
Select-AzureSubscription $subscriptionName
Stop-AzureVM -Name $VMName -ServiceName $ServiceName -Force
}
Ein Test des Skripts ist direkt im Portal möglich.
Hierbei muss als Parameter der Name der VM bzw. der des Service angegeben werden der angehalten werden soll.
Die Ergebnisse des Tests werden nach einigen Sekunden im Ausgabebereich angezeigt.
Wurden alle Einstellungen korrekt vorgenommen wird als Ergebnis „Succeeded“ angezeigt.
Schritt 5: Verknüpfen eines Zeitplans
Für ein zeitgesteuertes Ausführen kann nun ein Zeitplan hinterlegt werden.
Der Zeitplan ist im Anschluss direkt aktiv. Die Ergebnisse der Ausführungen sind unter Aufträge einzusehen.
Durch die gezeigte Automation können gezielt einzelne VMs gestoppt werden. Durch leichte Anpassungen des PowerShell Skripts ist auch ein Stoppen aller VMs möglich.
Über diesen Weg lässt sich ein Vergessen des Stoppens einer VM am Feierabend sicher verhindern. Damit hat man mehr von seinem freien Windows Azure Kontingent.