21.03.2016

Azure Automation: Automatisiert virtuelle Computer in Azure Starten und Stoppen

Technical Value

Azure bietet mit Azure Automation, Automatisierungsdienste zur Steuerung und Wartung von Diensten und virtuellen Maschinen, um einmalige, oder wiederkehrende Aufgaben vollautomatisiert ausführen zu können. In diesem Beitrag lernen Sie, Azure Automation zu nutzen um virtuelle Computer automatisiert zu Starten und zu Stoppen. In Azure werden die einzelnen Aufgabe in sogenannten "Runbooks" definiert. Diese können über separat festlegbare Zeitpläne gesteuert werden. Zur Organisation der unterschiedlichen Komponenten wird zunächst ein Azure Automation -Konto benötigt, in dem alle Resourcen, wie Runbook, Zeitpläne, oder auch Credentials abgelegt werden.  

Ein neues Azure Automation-Konto anlegen

Zum Anlegen eines neuen Kontos im linken Menü "Automatisierung" auswählen und am unteren Seitenrand "Erstellen" anklicken.   Automation Account   Im Dialogfenster einen Namen für das neue Konto festlegen, eine Region wählen und das Abonnement auswählen unter dem das neue Konto angelegt werden soll. Es kann nur auf Azure-Resourcen aus dem ausgewählten Abonnement zugegriffen werden, eine abonenmentübergreifende Steuerung ist nicht möglich.   Automation Account anlegen   In dem neu angelegt Konto sind zu Beginn noch keine Elemente enthalten.   New Automation Account  

Ein neues Runbook anlegen

Um ein neues Runbook anzulegen, unten Links auf "Neu" klicken. Im Dialogfenster die Punkte "Runbook" -> "Schnellerfassung" auswählen. Einen Namen für das Runbook und ein Beschreibung angeben. Ein möglichst sprechender Name sollte hier gewählt werden, damit man auch Wochen, oder Monate später sein Runbook wieder finden kann. Ich wähle hier den Namen "StartVM", da ich mit diesem Runbook meine virtuellen Computer starten möchte.  Die restlichen Einstellungen werden vom übergeordneten Konto übernommen und können auf den Default-Einstellungen belassen werden.   Neues Runbook anlegen Nach einem Klick auf "Erstellen" wird das Runbook angelegt und erscheint in der Übersicht. Wählt man das Runbook aus, so gelangt man in das Konfigurationsmenü. Unter "Autor" kann der Inhalt des Runbook erstellt werden, hier wird ein Powershell-Workflow erzeugt, in dem man alle benötigten Funktionen ausführen kann.   Unter "Zeitplan" können Zeitpläne erstellt und mit den entsprechenden Runbooks verknüpft werden. Das Anlegen und Zuweisen von Zeitplänen wird am Ende dieses Beitrags erklärt.   Runbook Einstellungen  

Alle Resourcen die hier erzeugt werden stehen nur innerhalb des Azure Automation-Kontos zur Verfügung, in dem sie angelegt werden.

Um nun eine, oder mehrere VMs mit dem angelegten Runbook zu starten, klicken Sie zunächst auf "Autor" und es wird die Entwurfsansicht des Runbooks geöffnet. Der Powershell-Workflow ist bereits leer angelegt. Anschließend wird das folgende  PowerShell-Skript eingefügt.

  1. workflow StartVm
  2. {
  3.     $Subscription = "<SubscriptionName>"
  4.     $ServiceName = "<CloudServiceName>"
  5.     $Cred = Get-AutomationPSCredential -Name "<Username>"
  6.    
  7.     Add-AzureAccount -Credential $Cred
  8.     Select-AzureSubscription -SubscriptionName $Subscription
  9.     $stoppedVMs = (Get-AzureVM | where {$_.ServiceName -eq $ServiceName -and $_.Status -like "Stopped*"})
  10.  
  11.     foreach ($VM in $stoppedVMs)
  12.     {
  13.         Write-Output "$(Get-Date) - Starting VM $($VM.Name) ..."
  14.         $startRtn = Start-AzureVM -Name $VM.Name -ServiceName $VM.ServiceName -ea SilentlyContinue
  15.         $count=1
  16.  
  17.         if(($startRtn.OperationStatus) -ne 'Succeeded')
  18.         {
  19.             do{
  20.                 Write-Output "$(Get-Date) - Failed to start $($VM.Name). Retrying in 30 seconds..."
  21.                 sleep 30
  22.                 $startRtn = Start-AzureVM -Name $VM.Name -ServiceName $VM.ServiceName  -ea SilentlyContinue
  23.                 $count++
  24.             }
  25.             while(($startRtn.OperationStatus) -ne 'Succeeded' -and $count -lt 3)        
  26.         }
  27.            
  28.         if($startRtn)
  29.         {
  30.             Write-Output "$(Get-Date) - Start-AzureVM cmdlet for $($VM.Name) $($startRtn.OperationStatus) on attempt number $count of 3."
  31.         }
  32.     }
  33. }

  In dem Skript müssen nur die beiden Variablen "$Subscription", "$ServiceName" mit den entsprechenden Angaben befüllt werden. Zusätzlich muss der Parameter "-Name" des Get-AutomationPSCredential Cmdlets mit dem Benutzernamen befüllt werden unter dem das Runbook laufen soll.   Runbook Workflow   Die in Runbooks erzeugten Powershell-Skripte benötigen Berechtigungen, um die hinterlegten Aufgaben durchführen zu können. Dazu müssen die Anmeldeinformationen in einem Azure Automation Credential Asset hinterlegt werden. In dem Credential werden die Azure-Login Daten des Kontos hinterlegt, unter dem die Skripte ausgeführt werden sollen und es wird ein Benutzername zugewiesen, der dann in dem Skript eingefügt wird. Somit müssen keine Login-Daten im Skript selbst hinterlegt werden.

Nur Benutzer die Co-Administrator sind haben alle benötigten Rechte.

 

Ein Azure Automation Credential Asset anlegen

Um ein neues Azure Automation Credentials anzulegen, im Menü den Punkt "Verwalten" auswählen und aus dem Untermenü den Punkt "Einstellung hinzufügen" wählen.   Credentials anlegen Im Dialogfenster die Option "Anmeldeinformationen hinzufügen" wählen.   Anmeldeinformationen hinzufügen   Im folgenden Fenster für "Typ der Anmeldeinformationen" "Windows PowerShell-Anmeldeinformationen" auswählen.   Credentials festlegen   Es empfiehlt sich einen separaten User, der nur für die Skriptausführung verwendet wird, anzulegen und diesen dann an dieser Stelle zu verwenden. Die Anlage eines solchen Benutzers kann nur durch den Administrator durchgeführt werden. Ist so ein Benutzer nicht vorhanden, so muss das eigene Benutzerkonto verwendet werden.   Azure Login Im nächsten Schritt erfolgt die eigentliche Verknüpfung mit dem Azure-Account. Hier muss der Name des Azure-Benutzerkontos und das Passwort angegeben werden. Nach dem die Anmeldeinformationen gespeichert sind, kann der Benutzername des Credential-Kontos innerhalb dieses Azure Automation-Kontos benutzt werden. Anschließend kann das Skript getestet und gespeichert werden. Läuft Alles wie gewünscht, kann das Runbook veröffentlichen werden. Damit das Runbook nun zum gewünschten Zeitpunkt ausgeführt wird, muss noch ein Zeitplan angelegt und zugewiesen werden. Ein Zeitplan kann beliebig vielen Runbooks zugewiesen werden, die sich im gleichen Automation-Konto befinden.  

Einen neuen Azure Automation Zeitplan anlegen

Zum Anlegen eines neuen Zeitplans, im Menü des Runbooks den Punkt "Zeitplan" auswählen.   Zeitplan anlegen   Da bei einem neu angelegtem Azure Automation-Konto noch keine Resourcen vorhanden sind, im folgenden Dialog den Punkt "Mit neuem Zeitplan verknüpfen" auswählen.   Neuen Zeitplan verknüpfen   Als nächstes einen Namen und eine Beschreibung vergeben. Da Zeitpläne widerverwendbar sind, sollte hier die Beschreibung auf jeden Fall genutzt werden, um Zeitpunkt der Ausführung und die Wiederholung zu dokumentieren. So muß später nicht jedes Mal die Konfiguration des Zeitplans geöffnet werden, um den Plan einzusehen.   Zeitsteuerung   Im Anschluß wird der Plan eingestellt. In diesem Beispiel wird das Runbook täglich um 08:00 Uhr ausgeführt. Nach dem Anlegen des Zeitplans wird dieser automatisch mit dem Runbook verknüpft und in der Übersicht wird der Zeitpunkt der nächsten Ausführung angezeigt.   Azure Automation: Zeitplanübersicht   Das PowerShell-Skript kann nun beliebig verändert, oder erweitert werden, um den eigenen Anforderungen zu entsprechen. Um beispielsweise die automatisch gestarteten virtuellen Computer auch wieder zeitgesteuert herunter zu fahren, kann das Skript in der folgenden modifizierten Version verwendet werden.  

  1. workflow StopVm
  2. {
  3.     $Subscription = "<SubScriptionName>"
  4.     $ServiceName = "<CoudServiceName>"
  5.     $Cred = Get-AutomationPSCredential -Name "<Username>"
  6.    
  7.     Add-AzureAccount -Credential $Cred
  8.     Select-AzureSubscription -SubscriptionName $Subscription
  9.     $stoppedVMs = (Get-AzureVM | where {$_.ServiceName -eq $ServiceName -and $_.Status -ne "StoppedDeallocated"})
  10.  
  11.     foreach ($VM in $stoppedVMs)
  12.     {
  13.         Write-Output "$(Get-Date) - Stopping VM $($VM.Name) ..."
  14.         $stopRtn = Stop-AzureVM -Name $VM.Name -ServiceName $VM.ServiceName -Force
  15.         $count=1
  16.  
  17.         if(($stopRtn.OperationStatus) -ne 'Succeeded')
  18.         {
  19.             do{
  20.                 Write-Output "$(Get-Date) - Failed to stop $($VM.Name). Retrying in 30 seconds..."
  21.                 sleep 30
  22.                 $stopRtn = Stop-AzureVM -Name $VM.Name -ServiceName $VM.ServiceName  -Force
  23.                 $count++
  24.             }
  25.             while(($stopRtn.OperationStatus) -ne 'Succeeded' -and $count -lt 3)        
  26.         }
  27.            
  28.         if($stopRtn)
  29.         {
  30.             Write-Output "$(Get-Date) - Stop-AzureVM cmdlet for $($VM.Name) $($stopRtn.OperationStatus) on attempt number $count of 3."
  31.         }
  32.     }
  33. }

  Die Automatisierungsdienste von Azure bieten viele weitere Möglichkeiten, um wiederkehrende Aufgaben auf einfache Weise vollautomatisch durchführen zu lassen.  

Teilen auf

Newsletter Anmeldung

Abonnieren Sie unseren Newsletter!
Lassen Sie sich regelmäßig über alle Neuigkeiten rundum ORAYLIS und die BI- & Big-Data-Branche informieren.

Jetzt anmelden