Wie man ein Runbook in Azure Automation verwendet um mit anderen Diensten zu interagieren (Beispiel: Neustarts einer Webanwendung mittels PowerShell-Runbook)

Azure Automation ist eine Cloud-basierte Automatisierungsplattform. Sie ermöglicht Ihnen die einfache Automatisierung von Aufgaben, deren manuelle Durchführung normalerweise viel Zeit in Anspruch nehmen würde. Dies funktioniert mit Hilfe von so genannten Runbooks.

Ein Runbook ist eine Möglichkeit, das Cloud-Management mit Azure zu automatisieren. Es stehen mehrere Typen zur Auswahl.

  • Grafische Runbooks
  • PowerShell und PowerShell Workflow Runbooks
  • Python Runbooks

Für weitere Einzelheiten zu Runbooks kann die offizielle Dokumentation, in der die einzelnen Typen mit ihren Vorteilen und Verwendungsmethoden klar aufgeführt sind, genutzt werden.

Erstellen eines Azure Automation Kontos

Zunächst einmal brauchen wir ein Azure Automation-Konto. Das können wir über ARM oder auch eine Automation-Pipeline bzw. direkt im Azure-Portal anlegen. Um es einfach zu halten, verwenden wir in diesem Beispiel das Portal.

Wir können alle benötigten Informationen hier direkt ausfüllen. Der wichtige Schritt ist die Aktivierung der Option “Create Azure Run As Account”. Damit wird automatisch ein AAD-Antrag erstellt, der mit den Azure Services interagieren kann und mit dem Automatisierungskonto “verbunden” ist.

Dadurch gibt es jetzt auch:

  • Ein Automatisierungszertifikat namens AzureRunAsCertificate für das Konto mit dem von der AAD-Anwendung verwendeten privaten Schlüssel gibt.
  • Eine Automatisierungsverbindung namens AzureRunAsConnection für das Konto, das die ApplicationId, TenantId, SubscriptionId und den Daumenabdruck des Zertifikats enthält.
  • Die AAD-Anwendung mit einem selbstsignierten Zertifikat (Service Principal Account). Es ist zu beachten, dass die Anwendung standardmäßig Zugriff auf das gesamte Abonnement (Subscription) erhält. Es ist also in erster Linie wichtig, dass wir zum Zeitpunkt der Erstellung die notwendigen Rechte haben, um dies Rechte auch delegieren zu können.  Darüber hinaus sollten wir im Nachgang die Zugriffe anpassen, um die Möglichkeiten einzuschränken, was der Dienst danach tun kann.

 Gebraucht wird dies später, um die so genannte RunAsConnection im Code verwenden zu können.

Implementierung der Logik

Es sind im Folgenden drei Reiter im Azure Automation Service relevant (Runbooks, Schedules und Modules)

Zuerst erstellen wir ein Runbook und dann installieren wir alle benötigten Az. Module, um die neuen PowerShell Möglichkeiten zu nutzen. Jetzt verbinden wir es noch mit einem “Schedule” um festzulegen wann es loslaufen soll. Um uns an unser Beispiel zu halten, wählen wir als Typ „PowerShell“ aus.

Dann laden wir die benötigten Module (Az.Account, Az.Automation, Az.Resources, Az.Websites und Az.Subscriptions). Dabei ist darauf zu achten, dass Az.Account eine Voraussetzung für die anderen Module ist und zuerst installiert werden muss.

Jetzt können wir unser Runbook mit diesem kleinen Codeschnipsel erstellen.

#Create the Run as connection
$connection = Get-AutomationConnection -Name AzureRunAsConnection #Logging into Azure Account with Service Principal identity$account= Connect-AzAccount `
     -ServicePrincipal `
     -Tenant $connection.TenantID `
     -ApplicationId $connection.ApplicationID `
     -CertificateThumbprint $connection.CertificateThumbprint#Secure that the correct subscription is selected (if there is more than one subscription)Select-AzSubscription -Subscription "Subscription Name"#Restart the WebAppRestart-AzWebApp `
    -ResourceGroupName "Website RG name" `
    -Name "App service name"

Erstellen eines Schedules und verknüpfen mit dem Runbook

Jetzt noch den Zeitplan:

Danach ist alles betriebsbereit und unsere Webanwendung wird zu gegebener Zeit und Datum neu gestartet. Wir können die Webanwendung durch andere Dienste ersetzen und nur den unteren Teil des Skripts ändern und weiter anpassen.