Azure Virtual Desktop, Kostenoptimierung
Durch den Einsatz von Azure Virtual Desktop (AVD) mit Windows 10/11 Enterprise Multi-Session können Sie Geld sparen. Durch die Optimierung von AVD können Sie diese Kosten halbieren.
Author:
bha erstellt am 23.08.2023
Bild: techcommunity.microsoft.com
Azure VM Kosten-Optimierung
Wenn die Microsoft Azure Virtual Machine (VM) läuft, wird sie auf Stundenbasis abgerechnet. Sie zahlen nur für die Anzahl der Stunden, die Ihre VM nach ihrer Erstellung läuft.
Wie Sie vielleicht bereits wissen, kostet es weiterhin Geld, wenn Sie eine VM nur einfach herunterfahren. In dem Fall hat die VM den Status 'Beendet' (eng. Stopped). Um Kosten zu sparen können Sie die VM auf Azure Portal stoppen, dann hat sie den Status 'Beendet (Zuordnung aufgehoben)' (Eng. Stopped (Deallocated)).
Microsoft bietet eine einfache Einstellung, um eine VM für eine fixe Zeit automatisch zu stoppen. Suchen Sie auf der VM-Seite nach 'Automatisch herunterfahren'.
In diesem Beitrag geht es um viel mehr, nämlich um dynamische Ausschaltung (Deallocated) von
Azure Virtual Desktop (AVD) wenn keine Benutzer mehr daran arbeiten. Für eine persönliche AVD finden Sie im Netz genug Informationen wie Sie so eine VM ausschalten.
Für
pooled AVD ist nichts bzw. kaum was zu finden. Dieser Beitrag zeigt Ihnen, wie Sie eine Multisession AVD bei Nichtnutzung automatisch ausschalten können, sodass keine Kosten mehr dafür entstehen.
Das automatische Ausschalten von AVD macht nur dann Sinn, wenn die Benutzer sie bei Bedarf einfach einschalten können. Das geht natürlich und dazu gibt es bereits gute Anleitung von Microsoft siehe
VM bei Verbindung starten.
Vorbereitungen an Windows 10/11
Auf Windows 10 oder 11 werden Einstellungen vorgenommen die AVD ausschalten, falls keine aktiven Benutzer mehr arbeiten. Diese Erkennung macht am besten jede AVD. Hier wird gezeigt wie Sie das direkt einstellen. Das können Sie natürlich auch über GPO oder Intune für mehrere VMs machen.
Gruppenrichtlinie bearbeitenLokale Gruppenrichtlinien >> Computerkonfiguration >> Administrative Vorlagen >> Windows-Komponenten >> Remotedesktopdienste >> Remotedesktop-Sitzungshost >> Sitzungszeitlimits. Aktivieren Sie 'Zeitlimit für aktive Sitzungen der Remotedesktopdienste festlegen, die sich aber im Leerlauf befinden' und wählen Sie eine Zeit ein z.B. 1h.
Die anderen Sitzungszeitlimits können aktiviert werden, sind aber hierfür keine Voraussetzung.
AufgabenplanungDamit wird z.B. ab 17 Uhr gesucht ob die Anzahl der aktiven Benutzer 0 ist, wenn Ja, wird AVD nach 2 Minuten Warnung herunterfahren. Dabei werden die Benutzer mit getrennter Sitzung nicht gezählt.
Wenn Nein, dann prüft das Batch-Skript jede Stunde in den nächsten 12 Stunden, ob AVD heruntergefahren werden kann.
Für die Einstellung siehe Bilder 1 und 2. Mit dieser Aufgabe wird eine CMD-Datei mit diesem Inhalt ausgeführt:
Diese Einstellungen können Sie eintragen sowohl an pooled AVD Multisession, genutzt von mehreren Benutzern als auch an persönlicher AVD, genutzt von nur einem Benutzer.
Bild 1: Aufgabenplanung Erstellung
Bild 2: Aufgabenplanung Trigger
Azure Portal Einstellungen
Nachdem die VMs heruntergefahren sind, entweder per Script wie bei AVD oder manuell, werden solche VMs per Azure Automation-Konten (eng. Automation Account) gestoppt (Deallocated) sodass keine Kosten mehr anfallen.
Dazu Automation-Konten erstellen, am besten danach suchen und Ressource standardmässig erstellen, siehe Bild 3.
Danach Automation-Konten überprüfen bzw. bearbeiten wie folgt:
Module
Überprüfen Sie ob die Module A.Accounts und Az.Compute verfügbar sind. Sollte das nicht der Fall dann >> Module hinzufügen >> Aus Katalog durchsuchen.
Identität
Überprüfen Sie ob der Status 'Ein' ist, ggf einstellen dann >> Azure-Rollenzuweisungen >> Rollenzuweisung hinzufügen >> Bereich: Abonnement >> Rolle: 'Desktop Virtualization Power On Off Contributor' hinzufügen
Runbook
Runbook erstellen >> Name: (z.B. RB-Deallocate-stopped-VMs), Runbooktyp: PowerShell, Laufzeitversion: 5.1
Nach der Erstellung Runbook namens 'RB-Deallocate-stopped-VMs >> Bearbeiten >> im Portal bearbeiten und unteren Inhalt hinzufügen:
Testen über >> Testbereich >> Starten >> Schliessen >> Veröffentlichen.
Zeitpläne
Damit erfolgreich getestete Runbook z.B. stündlich nach heruntergefahrenen VMs sucht, müssen Sie einen Zeitplan erstellen wie folgt:
Runbook namens RB-Deallocate-stopped-VMs doppelklicken >> Mit Zeitplan verknüpfen >> Zeitplan >> Zeitplan hinzufügen >> Neuer Zeitplan, Name: (z.B. Each1hour), Startzeit: (z.B 00:30), Wiederholt: 1 Stunde >> Erstellen >> OK.
Aktivitätsprotokoll
Wenn eine VM durch diesen Skript gestoppt (deallocated) wird, ist dies im Aktivitätsprotokoll der entsprechenden VM zu sehen, siehe Bild 4. Darin auch protokolliert, dass AVD vom Benutzer über den üblichen Client (Windows Virtual Desktop) gestartet wurde.
Bild 3: Azure Automation-Konten erstellen
Bild 4: VM Aktivitätsprotokoll
Weitere Optimierungen
Durch diesen kompakten Runbook Script werden alle VMs in allen Ressourcengruppen gesucht die heruntergefahren sind bzw. sich im Zustand 'PowerState/stopped' befinden, um sie dann in Status 'Beendet (Zuordnung aufgehoben)' zu versetzen.
Die Lösung mit stündlichem Zeitplan ist für Sie vielleicht zu ungenau, da es im Durchschnitt eine halbe Stunde dauert, bis die VMs 'richtig' abgeschaltet sind. Es gibt 2 Alternativen um Automation-Konten zu steuern.
Mit Azure Monitor Warnungsregel (eng. alert rule), die anspringen sobald VM herunterfährt. Dazu gibt es noch die Möglichkeit Email-Benachrichtigung zu senden. Warnung und Benachrichtigungen kosten etwas, auch wenn es nicht viel ist.
Eine bessere Alternative ist Webhooks. Damit kann die VM selbst das Herunterfahren ankündigen durch eine Aufruf auf Webhook-URL. Mit dabei können Parameter mitgeschickt wie z.B. Computernamen. Der Ablauf mit Webhooks ist etwas komplex, aber er ist individuell anpassbar und Sie erhalten eine effektive Lösung.
Auf Windows Ebene können weitere Optimierungen vorgenommen werden, wie:
Während des Herunterfahrens wird eine Warnung (2 Minuten, siehe oben) angezeigt. Wenn sich ein Benutzer während dieser Zeit anmeldet, kann der Shutdown abgebrochen werden (shutdown /a).
Anstatt der vorgeschlagenen Zeit ab 17 Uhr (Bild. 2) kann auch eine dynamische Zeit eingestellt werden, die startet mit dem Computer hochfahren. Beispielsweise durch
folgende Einstellungen in der Aufgabenplanung >> Beim Start >> 1 Stunde Verzögerung >> 1 Stunde Wiederholung >> Dauer 1 Tag.
Bitte beachten Sie, dass weitere Kosten für Datenträger oder öffentliche IP-Adressen bestehen. Dynamische IP-Adresse kann dadurch
ändern. Um das zu verhindern wandeln Sie dynamische IP-Adresse zu statisch.
Wir haben beim Kunden in AVD-Pools verschiedene dieser Lösungen im Einsatz. Ersparnis bei grösseren Netzwerken ist aufs Jahr gerechnet enorm. Für Fragen oder Verbesserungsvorschläge sind wir sehr dankbar, bitte nutzen Sie dafür unteres Kontaktformular.