08.04.2016

Azure Resource Manager: Automation Services

Technical Value

Nachdem ich zuletzt in diesem Beitrag eine Einführung  zu den Azure Automation Services unter dem Service Manager gegeben habe, folgt nun die Anleitung zu den Automation Services für den Resource Manager. An Hand des gleichen Beispiels, dem automatisierten Starten und Stoppen von virtuellen Computern, werde ich Ihnen die Neuerungen und Änderungen vorstellen. Haben Sie bereits einen Azure Account und wollen die Funktionalitäten des Resource Managers nutzen, so können Sie sich über den Link: "https://portal.azure.com " in das Azure Portal einloggen. Haben Sie noch keinen Account, so reicht ein kostenloser Test-Account, den Sie ebenfalls unter dem obigen Link erstellen können aus, um die einzelnen Schritte dieses Tutorials nachvollziehen zu können.  

Automation Services: Einen neuen Account anlegen

Nach dem Login kann des Portal bei Ihnen anders aussehen als in den hier gezeigten Bildern. Sowohl das linke Navigationsmenü, als auch die Portal-Übersicht kann sich jeder Benutzer nach den eigenen Bedürfnissen konfigurieren. Um nun zu den Automation Services zu gelangen wählen Sie im linken Menü den Punkt "Browse" aus. Es öffnet sich das vollständige Menü und Sie können hier nach den "Automation Accounts" suchen und diese auswählen.   Azure Automation Portal Sie sehen eine Übersicht aller bereits vorhandenen Automation Accounts. Klicken Sie auf "Add", um einen neuen Account anzulegen.   Azure Automation Accounts Geben Sie einen Namen für den neuen Automation Account an. Der Name muss eineindeutig sein. Der kleine grüne Haken am rechten Ende des Eingabefelds zeigt an, ob der Name valide ist. Wählen Sie die Subscription aus, in dem der neue Automation Account angelegt werden soll. Achten Sie darauf, dass Sie die Subscription wählen, in dem ihre virtuellen Computer liegen, die Sie steuern möchten, denn alle Resourcen sind in den unterschiedlichen Subscriptions streng von einander getrennt. Ein Zugriff über eine Subscription hinaus ist zwar möglich, wird aber nicht im Rahmen dieser Einführung nicht behandelt.   Create Azure Automation Account Lassen Sie eine neue "Resource group" anlegen, die Sie ebenfalls benennen und wählen Sie die "Location" aus, die Ihrem Standort entspricht. Klicken Sie abschließend auf "Create" und Ihr neuer Automation Account wird erstellt und in der Übersicht angezeigt.   Select Azure Automation Account

Automation Services: Konfiguration des Accounts

Klicken Sie auf den neuen Account, um die Konfiguration zu öffnen. Configure Azure Automation Account Wie auch schon beim Service Manager umfasst die Konfiguration der Automation Services unter dem Resource Manager unterschiedliche Resourcen. Wir werden uns in diesem Tutorial auf die "Runbooks" und auf die "Assetes" konzentrieren, die wir benötigen, um unser Skript anzulegen und die benötigten Credentials zu erstellen. Wenn Ihnen diese Begriff nichts sagen, empfehle ich meinen, bereits in der Einleitung verlinkten Beitrag zu lesen, der detailliert auf diese Resourcen eingeht und deren Funktion erklärt.

Automation Services: Runbook anlegen

Im obigen Bild ist erkennbar, das bereits ein Runbook in dem neu angelegten Automation Account angelegt ist. Hierbei handelt es sich um ein Beispielskript, das wir für dieses Tutorial nicht benötigen. Um ein neues Runbook zu erstellen klicken Sie auf "Add a runbook".   Automation Services Runbooks Wählen Sie "Create a new runbook" und vergeben Sie einen entsprechenden Namen, anschließend wählen Sie den Runbook Typen aus. Hierbei fällt die größte Neuerung im Vergleich zum Service Manager auf, denn neben den bereits bekannten "PowerShell Workflows", stehen nun noch die Typen "PowerShell" und "Graphical" zur Verfügung.   Automation Services RunbooksDer Typ "Graphical" bietet die Möglichkeit, einfache Aufgabe GUI-basiert durch Drag & Drop zu erstellen. Der Typ "PowerShell" ermöglicht das einbinden von PowerShell-Skripten, die kein Workflow sind. Dies bietet den Vorteil, Funktionen implementieren zu können. Genau diesen Typen werden wir verwenden um unser neues Runbook zu erstellen.   Azure Automation Services Runbokk Script Nachdem das Runbook angelegt wurde, wird es direkt zum Bearbeiten geöffnet. Kopieren Sie nun das folgenden Skript in das leere Runbook. Das Skript ist eine modifizierte Version des "Assert-AutoShutdownSchedule.ps1" Skripts, welches Microsoft im Technet zur Verfügung stellt.

  1. function AssertResourceManagerVirtualMachinePowerState
  2. {
  3.     param(
  4.         [Object]$VirtualMachine,
  5.         [string]$DesiredState
  6.     )
  7.        
  8.     # Get VM with current status
  9.     $resourceManagerVM = Get-AzureRmVM -ResourceGroupName $VirtualMachine.ResourceGroupName -Name $VirtualMachine.Name -Status
  10.     $currentStatus = $resourceManagerVM.Statuses | where Code -like "PowerState*"
  11.     $currentStatus = $currentStatus.Code -replace "PowerState/",""
  12.  
  13.     # Start VM
  14.     if($DesiredState -eq "Started" -and $currentStatus -notmatch "running")
  15.     {
  16.         Write-Output "[$($VirtualMachine.Name)]: Starting VM"
  17.         $resourceManagerVM | Start-AzureRmVM
  18.     }          
  19.     # Stop VM
  20.     elseif($DesiredState -eq "StoppedDeallocated" -and $currentStatus -ne "deallocated")
  21.     {
  22.         Write-Output "[$($VirtualMachine.Name)]: Stopping VM"
  23.         $resourceManagerVM | Stop-AzureRmVM -Force
  24.     }
  25.     # Current power state is correct
  26.     else
  27.     {
  28.         Write-Output "[$($VirtualMachine.Name)]: Current power state [$currentStatus] is correct."
  29.     }
  30. }
  31.  
  32. try
  33. {
  34.     $currentTime = (Get-Date).ToUniversalTime()
  35.     Write-Output "Runbook started. Version: $VERSION"
  36.     Write-Output "Current UTC/GMT time [$($currentTime.ToString("dddd, yyyy MMM dd HH:mm:ss"))] will be checked against schedules"
  37.        
  38.     $CredentialAssetName = '<Credential name>'
  39.     $SubscriptionName = "<Subscription name>"
  40.     $DesiredState = "running" # valid states: 'running', 'StoppedDeallocated'
  41.  
  42.     $Cred = Get-AutomationPSCredential -Name $CredentialAssetName
  43.     if(!$Cred)
  44.     {
  45.         Throw "Could not find an Automation Credential Asset named '${CredentialAssetName}'. Make sure you have created one in this Automation Account."
  46.     }
  47.  
  48.     #Login to Subscription
  49.     Login-AzureRmAccount -Credential $Cred -SubscriptionName $SubscriptionName
  50.  
  51.     # Get a list of all virtual machines in subscription
  52.     $resourceManagerVMList = @(Get-AzureRmResource | where {$_.ResourceType -like "Microsoft.*/virtualMachines"} | sort Name)
  53.  
  54.     Write-Output "Processing [$($resourceManagerVMList.Count)] virtual machines found in subscription"
  55.     foreach($vm in $resourceManagerVMList)
  56.     {
  57.         AssertResourceManagerVirtualMachinePowerState -VirtualMachine $vm -DesiredState $DesiredState
  58.     }
  59.  
  60.     Write-Output "Finished processing virtual machine schedules"
  61. }
  62. catch
  63. {
  64.     $errorMessage = $_.Exception.Message
  65.     throw "Unexpected exception: $errorMessage"
  66. }
  67. finally
  68. {
  69.     Write-Output "Runbook finished (Duration: $(("{0:hh\:mm\:ss}" -f ((Get-Date).ToUniversalTime() - $currentTime))))"
  70. }

In den Zeilen 1-30 ist eine Funktion enthalten, die den aktuellen Status eines virtuellen Computers ermittelt und mit dem gewünschten Status abgleicht. Weicht der aktuelle Status von dem gewünschten Status ab, so wird der Status des virtuellen Computers entsprechend angepasst. Dadurch ist das Skript sowohl für den Start, als auch für den Stopp von virtuellen Computern einer Subscription geeignet. Der Aufruf der Funktion erfolgt in Zeile 57. In den Zeilen 39 und 40 müssen die Angaben zu den Credentials, der Subscription und dem gewünschten Status gemacht werden. Als Status kann "running", oder "soppeddeallocated" eingetragen werden. In der Zeile 38 muss, wie auch beim Service Manager ein Credential angegeben werden in dessen Kontext das Skript ausgeführt wird. Daher müssen wir zunächst ein Credential Asset erstellen. Bevor Sie die Ansicht wechseln, klicken Sie zunächst auf "Save", um das Skript zu speichern.

Automation Servcies: Credential Asset erstellen

Zum Anlegen navigieren Sie zurück zur Runbook-Konfiguration und wählen Sie die Kachel "Credentials" aus. Azure Automation Services Credential AssetIn der Übersicht sind noch keine Credentials enthalten. Wählen Sie "Add a credential". Azure Automation Services Credential Asset AnlegenVergeben Sie einen Namen, der anschließend im Skript verwendet wird und geben Sie den Benutzernamen und das Passwort, des Benutzers an, in dessen Kontext des Runbook laufen soll. Achten Sie darauf, dass der Benutzer die notwendigen Rechte hat. Es empfiehlt sich ein Benutzerkonto anzulegen das ausschließlich für die Ausführung von Runbooks verwendet wird. Azure Automation Services Credential Asset ErstellenZum Abschluss klicken Sie auf "Create" um das Credential erstellen zu lassen und wechseln Sie wieder zurück in den Editor des Runbooks. Azure Automation Services Credential Asset Einfügen Hier taucht nun im linken Menü unter "Assets" das angelegt Credential auf, das nun in Zeile 39 eingefügt werden kann. Nun kann das Skript erneut gespeichert werden. Anschließend sollten Sie das Skript testen, dazu auf "Test pane" klicken. Es wird ein Testlauf gestartet und Sie bekommen den Output des Skripts in einem Fenster angezeigt. Sollten hier Fehler auftreten, so müssen Sie das Skript noch einmal überarbeiten. Läuft das Skript wie gewünscht, klicken Sie auf "Publish", um das Skript zu veröffentlichen. Erst danach kann das Skript automatisiert ausgeführt werden. Um das Runbook nun automatisiert ausführen zu können, muss noch ein Zeitplan angelegt und zugewiesen werden.

Automation Services: Zeitplan erstellen

Wechseln Sie zurück zur Runbook-Konfiguration und wählen Sie die Kachel "Schedules".   Azure Automation Services ScheduleKlicken Sie auf "Add a schedule", um einen neuen Zeitplan zu erstellen. Azure Automation Services Schedules HinzufügenVergeben Sie einen Namen und eine Beschreibung. Da Zeitpläne mehreren Runbooks zugewiesen werden können, sollten Sie diese nicht leer lassen. Dadurch können Sie auch nach Wochen, oder Monaten erkennen, was der Zeitplan macht, ohne die Konfiguration einsehen zu müssen. Azure Automation Services Schedules AnlegenKonfigurieren Sie den Zeitplan entsprechend ihren Anforderungen. Ich wähle hier eine tägliche Ausführung um 8 Uhr. Nachdem der Zeitplan erstellt ist, muss er noch dem Runbook zugewiesen werden, dazu öffnen Sie erneut das Runbook und wählen Sie den Menüpunkt "Schedule. Azure Automation Services Schedules ZuweisenWählen Sie den Eintrag "Link a schedule to your runbook" und markieren Sie anschließend den zuvor erstellten Zeitplan.   Azure Automation Services Runbook OvwerviewSchließen Sie die Zuweisung ab indem Sie auf "Ok" klicken. Azure Automation Services Schedules Auswählen Sie können die Zuweisung überprüfen indem Sie in ihrem Runbook auf "Schedules" klicken. In der Übersicht sind alle Zeitpläne aufgelistet, die dem Runbook zugewiesen sind und Sie können die Zeitpunkt der nächsten Ausführung ablesen. Damit ist ihr Runbook vollständig konfiguriert und wird nun jeden Morgen um 8 Uhr die virtuellen Computer der ausgewählten Subscription starten.

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