Kosten sparen: Azure-VMs automatisch starten und stoppen


    Tags: , ,

    Azure-VMAnders als bei PaaS oder SaaS kann man bei Infrastructure-as-a-Service (IaaS) einfach Kosten sparen, indem man virtu­elle Maschinen nicht durch­­gehend 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 auto­­matisch zu den gewün­schten Zeiten.

    Bereits im Assistenten zum Bereitstellen einer neuen Azure-VM können Sie im Tab Verwaltung unter Automatisch herunterfahren das planmäßige Herunter­fahren aktivieren und dazu eine Uhrzeit, die Zeitzone, und falls gewünscht, eine Mail-Adresse für Benachrichtigungen einrichten.

    Das automatische Stoppen von Azure-VMs kann man Assistenten zur VM-Bereitstellung konfigurieren.

    Bei einer bereits vorhandenen VM finden Sie die betreffende Einstellung im Menü Vorgänge => Automatisch herunterfahren.

    Das automatische Stoppen von Azure-VMs im Portal

    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 Prozess­automatisierung Ihres Automation-Accounts und klicken auf Runbooks und danach auf + Runbook erstellen.

    Ein Runbook bekommt zuerst einen Namen, eine Laufzeit­version 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.

    Die verschiedenen Runbook-Typen in Azure Automation

    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.

    Der Runbook-Katalog von Azure enthält bereits Lösungen für das Starten und Stoppen von VMs.

    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über­sehbar finden sich in der Liste leider auch viele veraltete Beispiele, die teilweise kaum herunter­geladen 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.

    Runbook für das Ein- und Ausschalten von VMs im dem Katalog auswählen

    Klicken Sie auf Auswählen, geben einen Namen sowie die PowerShell-Version ("Laufzeitversion festlegen") ein und importieren dann das Runbook.

    Das gewählte Runbook ist mit Windows PowerShell und PowerShell Core kompatibel.

    Die Verbindung zu Azure stellt das Script mit Hilfe eines Service-Prinzipals her.

    Autorisierung des Runbooks mit Hilfe eines Service-Prinzipals

    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 Abonnement­ebene die Standardrolle Mitwirkender ("Contributor") zu.

    Klicken Sie dazu im Azure-Portal im Automation Account im Abschnitt Konto­einstellungen => Ausführende Konten auf + Ausführendens Azure-Konto.

    RunAsAccount (Dienstprinzipal) im Azure AD erstellen

    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.

    Die Metadaten eines Service-Prinzipals

    Da das PowerShell-Runbook den Verbindungs­namen verwendet, um die Metadaten abzurufen, müssen Sie keinerlei Credentials im Runbook-Code teilen. Verifizieren können Sie den geschilderten Zusammen­hang, indem Sie in Ihrem Automation-Account im Abschnitt Freigegebene Ressourcen auf Verbindungen klicken.

    Mit dem Dienstprinzipal wurde eine Verbindung automatisch angelegt.

    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.

    Das Runbook lässt sich im Editor veröffentlichen.

    Es taucht dann im Abschnitt Prozess­­automatisierung unter Runbooks auf.

    Die Liste der veröffentlichten Runbooks

    Im Editor können Sie das Runbook aber auch vor der Veröffentlichung testen, indem Sie auf den Button Testbereich klicken.

    Das Initiieren eines Testlaufs

    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ührungs­einstellungen die jeweiligen Parameter (Start oder Stop) festlegen.

    Runbook im Taskplaner einplanen

    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.

    Beim Einplanen können Sie auch Tags berücksichtigen, um nur bestimmte VMs zu starten.

    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

    Wir ver­wenden Ihre Mail-Adresse nur für den Ver­sand der News­letter.
    Es erfolgt keine per­sonen­be­zogene Auswertung.

    Bild von Thomas Drilling
    Thomas Drilling arbeitet seit mehr als 20 Jahren selb­ständig als Redakteur und Autor für viele ehe­malige und aktuelle IT-Magazine sowie Blogs. Thomas ist zudem Buch­autor und IT-Consultant. Seit 5 Jahren ist Thomas neben seiner journa­listischen Tätig­keit haupt­beruflicher, selb­ständiger IT-Trainer für VMware und Microsoft.

    Seine Themen­schwer­punkte sind Virtua­lisierung und Cloud Com­puting, speziell VMware, Amazon Web Services, Google Cloud und Microsoft Azure. Thomas ist zerti­fi­zierter VMware Professional, Advanced Professional und wurde von VMware in den Jahren 2016, 2017, 2018, 2019 und 2020 mit dem Blogger-Status vExpert ausge­zeichnet.

    Thomas ist außerdem zertifi­zierter AWS Solu­tions Archi­tect, Sysops Engineer und Devops Engineer sowie Microsoft Certified Azure Admini­strator.

    Thomas führt aktuell jeden zwei­ten Mon­tag einen 4-tägigen Grund­lagenkurs in Cloud Computing mit AWS via Zoom-Meeting durch. Weitere Infor­mationen und Anmel­dung über sein AWS-Blog.

    Verwandte Beiträge

    Weitere Links