Tags: Azure, Virtualisierung, Automatisierung
Anders als bei PaaS oder SaaS kann man bei Infrastructure-as-a-Service (IaaS) einfach Kosten sparen, indem man virtuelle Maschinen nicht durchgehend laufen lässt. Benötigt man die volle Leistung nicht rund um die Uhr, dann wählt man einen anderen Hardware-Typ oder stoppt und startet VMs automatisch zu den gewünschten Zeiten.
Bereits im Assistenten zum Bereitstellen einer neuen Azure-VM können Sie im Tab Verwaltung unter Automatisch herunterfahren das planmäßige Herunterfahren aktivieren und dazu eine Uhrzeit, die Zeitzone, und falls gewünscht, eine Mail-Adresse für Benachrichtigungen einrichten.
Bei einer bereits vorhandenen VM finden Sie die betreffende Einstellung im Menü Vorgänge => Automatisch herunterfahren.
Es gibt allerdings keine einfache Möglichkeit, um das automatische Starten von VMs zu konfigurieren. Dazu braucht man ein Azure Automation Runbook in Kombination mit einem Auftrag zum Ausführen desselben.
Runbook für VM-Start anlegen
Navigieren Sie dafür zum Abschnitt Prozessautomatisierung Ihres Automation-Accounts und klicken auf Runbooks und danach auf + Runbook erstellen.
Ein Runbook bekommt zuerst einen Namen, eine Laufzeitversion und bei Bedarf eine Beschreibung. Außerdem müssen Sie den Typ auswählen. Azure kennt Runbooks für PowerShell, Python PowerShell-Workflow, PowerShell (grafisch) und Grafischer PowerShell-Workflow.
In vielen Fällen muss man ein Runbook aber nicht von Grund auf neu erstellen, sondern kann sich aus einem umfangreichen Katalog bedienen und auf ein dort gefundenes Runbook aufbauen.
Wie Sie an der Quelle erkennen können, stellt Microsoft die Runbooks öffentlich zugänglich auf GitHub zur Verfügung.
Durchsuchen Sie den Katalog beispielsweise nach dem PowerShell-Runbook Stop / Start all or only tagged Azure VMs. Es stammt aus dem Jahr 2019 und verzeichnet bisher über 5000 Downloads. Unübersehbar finden sich in der Liste leider auch viele veraltete Beispiele, die teilweise kaum heruntergeladen wurden.
Dieses PowerShell-Runbook (das auch kompatibel mit PowerShell Core ist), stellt mit Hilfe eines so genannten ausführenden Automation-Kontos eine Verbindung zu Azure her, ruft den Energiestatus von VMs ab und schaltet sie der Reihe nach aus bzw. wieder ein.
Klicken Sie auf Auswählen, geben einen Namen sowie die PowerShell-Version ("Laufzeitversion festlegen") ein und importieren dann das Runbook.
Die Verbindung zu Azure stellt das Script mit Hilfe eines Service-Prinzipals her.
Dienstprinzipal im Azure AD erstellen
Einen neuen Dienstprinzipal-Benutzer im Azure Active Directory erzeugen Sie am einfachsten mit Hilfe des Features Ausführendes Konto ("RunAsAccount") und weisen ihm auf Abonnementebene die Standardrolle Mitwirkender ("Contributor") zu.
Klicken Sie dazu im Azure-Portal im Automation Account im Abschnitt Kontoeinstellungen => Ausführende Konten auf + Ausführendens Azure-Konto.
Wechseln Sie dann zu Ausführendes Azure-Konto, indem Sie dem Link mit den angezeigten Ablaufdatum folgen. Hier finden Sie alle wichtigen Metadaten für Ihre Verbindung (AzureRunAsConnection), darunter die ServicePrincipal-ID, Tentant-ID, Application-ID und den Thumbprint des AzureRunAsCertificate.
Da das PowerShell-Runbook den Verbindungsnamen verwendet, um die Metadaten abzurufen, müssen Sie keinerlei Credentials im Runbook-Code teilen. Verifizieren können Sie den geschilderten Zusammenhang, indem Sie in Ihrem Automation-Account im Abschnitt Freigegebene Ressourcen auf Verbindungen klicken.
Alternativ sehen Sie die Metadaten auch im Runbook-Editor unter Verbindungen bzw. Zertifikate. Jetzt müssen Sie ihr neues (importiertes) Runbook nur noch über den Editor veröffentlichen.
Es taucht dann im Abschnitt Prozessautomatisierung unter Runbooks auf.
Im Editor können Sie das Runbook aber auch vor der Veröffentlichung testen, indem Sie auf den Button Testbereich klicken.
Sie können dann links unter Parameter die gewünschte Action (Start oder Stop) sowie optional einen Tagname und Tagvalue angeben. Selbstverständlich müssen die VMs zuvor die entsprechenden Tags auch erhalten haben.
Klicken Sie dann auf Starten und beobachten Sie den Ausgabebereich. Ist alles OK, klicken Sie im veröffentlichten Runbook auf Starten, geben erneut die gewünschten Parameter ein und kontrollieren, ob die gewünschten VMs hochfahren. Dadurch wird in Azure Automation ein passender Auftrag erzeugt.
Ausführung des Runbooks planen
Für die eigentliche Automatisierung müssen Sie das Runbook mit einem Zeitplan verknüpfen. Im Dialog Runbook planen können Sie den Zeitplan konfigurieren und darunter bei Parameter und Ausführungseinstellungen die jeweiligen Parameter (Start oder Stop) festlegen.
So können Sie das Runbook beispielsweise auch zweimal einplanen, etwa um 08.00 Uhr mit dem Parameter Start und um 18:00 Uhr mit Stop.
Natürlich lässt sich das Runbook jederzeit auch manuell starten. Außerdem kann man bei Bedarf im Tab Protokolle die zugehörigen Logs einsehen.
Fazit
Um Kosten für die Nutzung von Azure-Ressourcen zu sparen, sollte man VMs herunterfahren, wenn man sie nicht benötigt. Dies lässt sich sehr einfach beim Anlegen einer VM oder nachträglich in deren Einstellungen konfigurieren.
Das erneute Starten von virtuellen Maschinen erfordert dagegen mehr Aufwand. Dazu benötigt man ein Runbook, das im Kontext eines Dienstprinzipals ausgeführt wird. Hat man beide erstellt, dann kann man das zeitgesteuerte Anschalten der VM einplanen.
Täglich Know-how für IT-Pros mit unserem Newsletter
Seine Themenschwerpunkte sind Virtualisierung und Cloud Computing, speziell VMware, Amazon Web Services, Google Cloud und Microsoft Azure. Thomas ist zertifizierter VMware Professional, Advanced Professional und wurde von VMware in den Jahren 2016, 2017, 2018, 2019 und 2020 mit dem Blogger-Status vExpert ausgezeichnet.
Thomas ist außerdem zertifizierter AWS Solutions Architect, Sysops Engineer und Devops Engineer sowie Microsoft Certified Azure Administrator.
Thomas führt aktuell jeden zweiten Montag einen 4-tägigen Grundlagenkurs in Cloud Computing mit AWS via Zoom-Meeting durch. Weitere Informationen und Anmeldung über sein AWS-Blog.
Verwandte Beiträge
- Verfügbare Azure-VMs in einer Region mit PowerShell anzeigen
- Spot, Reservierungen, Sparpläne: Kosten für Azure-VMs reduzieren
- Verfügbarkeit von Azure-VMs: SLA abhängig von Disk-Typ und Availability Set
- Updates für VM-Hosts in Azure: Geplante und ungeplante Wartung
- Azure-Agenten in virtueller Maschine installieren
Weitere Links