Grundlagen: VMs in Azure per PowerShell verwalten (auflisten, starten, stoppen, löschen)

VMs können nicht nur automatisiert erstellt werden (siehe auch Grundlagen: Azure & PowerShell: VMs erstellen), sondern auch automatisiert gestartet, gestoppt und gelöscht werden. Die PowerShell-Befehle dafür sind recht einfach. Schwieriger wird es erst dann, wenn man nicht pauschal auf alle VMs die gleichen Operationen ausführen möchte, sondern nach bestimmten Kriterien filtern möchte. Dazu braucht man dann allerdings kein spezielles Azure-Wissen, sondern nur PowerShell-Grundkenntnisse.

Wer lieber Videos schaut, statt zu lesen, kann sich hierzu auch das Modul 3: VMs verwalten und überwachen im MVA-Kurs PowerShell: Azure-Automatisierung für Einsteiger ansehen.

Schauen wir uns in PowerShell an, welche Befehle existieren, um VMs zu verwalten. Das Gute an der Namenskonvention in PowerShell ist, dass man sehr leicht anhand des Namens erahnen kann, was der Befehl tun soll. (Tipp: PowerShell für Microsoft Azure - Alle Befehle für einen Service finden)

Demzufolge werden wir uns die Befehle Get-AzureVM, Start-AzureVM und Stop-AzureVM ansehen.

VMs auflisten

Mit dem Befehl Get-AzureVM lassen wir uns zunächst auflisten, welche VMs in dem aktuellen Azure-Abonnement vorhanden sind. Hierbei werden alle VMs aufgelistet unabhängig davon, ob die VMs ausgeführt werden oder gestoppt sind. Zwischen diesen beiden Zuständen gibt es auch noch weitere Zustände, die mehr Details darüber geben, in welchem Moment des Lebenszyklus sich eine VM befindet.

Das folgende Beispiel zeigt den Aufruf und das Ergebnis von Get-AzureVM.

VMs starten

In meiner Liste der VMs ist zu sehen, dass drei VMs heruntergefahren sind. Mit dem Befehl Start-AzureVM können wir heruntergefahrene VMs starten. Das folgende Beispiel startet die VM mit dem Namen "host3", die sich im Cloud-Dienst "leasetest3" befindet.

Die Ausführung dieses Befehls kann eine Weile dauern, bis der VM im Azure-Rechenzentrum ein Host ausgewählt wurde, die VM erstellt und hochgefahren wurde. Es kann abhängig von der Auslastung im Rechenzentrum einige Minuten dauern, bis die VM bereit ist.

Fragt man nach der Erstellung regelmäßig den Status der VMs ab, sieht man die unterschiedlichen Zustände, in denen sich die VM jeweils befindet. Man sieht im folgenden Beispiel für unsere VM “host3”, dass diese unterschiedliche Zustände wie RoleStateUnknown, CreatingVM und StartingVM einnimmt, bis sie schließlich den endgültigen Zustand ReadyRole eingenommen hat.

Natürlich muss man nicht immer den Status aller VMs abrufen, wenn man nur an dem Status einer bestimmten VM interessiert ist. Genau wie beim Starten kann man auch bei Get-AzureVM einen Cloud-Dienst und einen Namen angeben und erhält dann ausführliche Informationen zur VM. Mit Select-Object können wir die Ausgabe auch wieder auf die Information begrenzen, die uns interessiert.

VMs stoppen

VMs stoppen bzw. herunterzufahren ist von "VM löschen" abzugrenzen. Eine VM wird mit New-AzureVM erstellt und automatisch gestartet. Bei New-AzureVM geben wir jedoch auch (meist viele) Konfigurationsdaten mit. Ein Remove-AzureVM ist also das Gegenstück zu New-AzureVM. Um eine VM herunterzufahren, verwenden wir hingegen den Befehl Stop-AzureVM. Die Konfiguration der VM bleibt damit erhalten und wir können die VM, wie weiter oben beschrieben, wieder leicht starten.

image

Nur mit Angabe des Cloud-Dienstes und des Namens der VM wird die VM heruntergefahren und ist schließlich im Status "StoppedDeallocated" . In diesem Zustand kostet die VM keine Gebühren mehr.

Azure geht davon aus, dass man in Azure Infrastrukturen betreibt, die hochverfügbar sein sollen. Das bedeutet, dass der Grundgedanke für mehrere VMs im selben Cloud-Dienst der ist, dass diese VMs den gleichen Zweck erfüllen und zum Zwecke der Hochverfügbarkeit bzw. Redundanz existieren. Aus diesem Grund bekommt man bei dem Befehl Stop-AzureVM eine Sicherheitsabfrage, wenn man die letzte VM in einem Cloud-Dienst stoppt. In Skripten jedoch sind Sicherheitsabfragen unerwünscht, da sie das Skript blockieren. Daher hat der Befehl Stop-AzureVM den Parameter "Force" , um ohne Sicherheitsabfrage die letzte VM in einem Cloud-Dienst zu stoppen.

Sobald die letzte VM in einem Cloud-Dienst gestoppt wurde, gibt der Cloud-Dienst auch seine virtuelle IP-Adresse (VIP) wieder frei.

Möchte man die Sicherheitsabfrage nicht, wie sie im vorherigen Beispiel zu sehen ist, so ist der Parameter Force mitanzugeben.

Stop-AzureVM -ServiceName leasetest -Name host1 -Force

Weitere Informationen

PowerShell: Azure-Automatisierung für Einsteiger (Microsoft Virtual Academy)

Grundlagen: Azure & PowerShell: VMs erstellen (MSDN Blogs)

Get-AzureVM (MSDN Library)

Start-AzureVM (MSDN Library)

Stop-AzureVM (MSDN Library)

English summary

There are several commands to list, start, stop, and delete VMs in Azure via Windows PowerShell. This article show for each operation sample code and output.