Lukas Lötters

In diesem Blogbeitrag zeige ich, wie man PowerApps, Microsoft Flow und Azure Runbooks miteinander verbinden kann. PowerApps ist ein Cloud-Dienst mit dem Endandwender eigene Apps bauen können, diese laufen sofort auf allen Arten von mobilen Geräten.  Microsoft Flow ist eine Technologie, die einzelne Komponenten, z.B. Office 365 oder Azure-Dienste miteinander verbindet. Azure Runbooks sind ein Bestandteil von Azure und ermöglichen es Powershell Skripte zur Konfiguration und Steuerung von Azure Komponenten zu erstellen.

Der Anwendungsfall

Die Oraylis bietet ein umfangsreiches Trainings- und Schulungsprogramm für Kunden. Dabei kommen oft virtuelle Maschinen in Azure zum Einsatz. Das hat den Vorteil, dass die Schulungsteilnehmer sich direkt per RDP auf komplett eingerichtete virtuelle Maschinen verbinden können. Das spart eine Menge Zeit und schont die Nerven des Trainers, denn nichts ist schlimmer als einzelne Teilnehmer, die nicht mitmachen können, weil der Laptop nicht leistungsfähig genug ist oder die Nutzer keine Anwendung installieren können. Nicht immer ist der Trainer aber derjenige der das Azure-Abonnement mit den Schlungsmaschinen verwaltet. Mithilfe von PowerApps, Microsoft Flow und Azure Runbooks habe ich nun eine sehr einfache, aber gleichzeitig sehr praktische App gebaut. Mit dieser können Oraylis-Trainer die Azure Maschinen abends herunterfahren, morgens starten und am Ende der Schulung löschen. Es wären aber auch weiter Funktionen denkbar, wie das Erstellen von Maschinen etc.

Ausgangspunkt Azure Runbooks

Wir benutzen Azure Runbooks um Verwaltungsaufgaben zu automatisieren, z.B. Starten, Anhalten und Erstellen von virtuellen Maschinen in Azure. Im folgenden Screenshot sieht man das Azure Verwaltungsportal.

  1. Wir befinden uns in einem Automation Account mit dem Namen SchulungsSteuerung
  2. In diesem Automation Account sind 6 Runbooks, welche unterschiedliche Aufgaben erfüllen,
  3. Zum Beispiel StartAllVM ist ein Runbook das alle virtuellen Maschinen innerhalb eines Cloud Service oder einer Ressourcen Gruppe hochfährt.
Azure Runbooks Überblick

Azure Runbooks Überblick

Wenn man nun ein Runbook auswählt (hier „StartAllVM“), wechselt die Ansicht und man sieht alle Details zu diesem Runbook, z.B. die Anzahl der Ausführungen, einen Editor oder die „Webhooks“. Ein Webhook ist ein sehr einfaches Werkzeug, mit dem Dienste miteinander kommunizieren können. Im Grunde handelt es sich um einen einfachen HTTP Post Aufruf. Mit dem Webhook kann ich Azure mitteilen ein Runbook auszuführen. In diesem Szenario gibt es noch nicht einmal eine Benutzerauthenfizierung, diese findet im Azure Runbook statt. Das heißt jeder, der die Zeichenfolge dieses Webhooks kennt, kann diesen aufrufen. Auf dem folgenden Screenshot zeige ich, wie man einen solchen Webhook für ein Runbook erstellt.

  1. Wenn man ein Runbook ausgewählt hat, auf Webhook klicken.
  2. Auf „Create new webhook“ klicken
  3. Einen Namen für den Webhook festlegen, hier „Starte Alle Maschinen“
  4. Ein Ablaufdatum einstellen, momentan kann man nur Webhooks 10 Jahre in die Zukunft bauen, das reicht mir
  5. Am Ende nur noch die URL kopieren und irgendwo sicher verwahren. Aus Sicherheitsgründen kann man den Webhook rückwirkend nicht noch einmal kopieren. Ein Webhook könnte so aussehen „https://s2events.azure-automation.net/webhooks?token=2JcG3cFCHHG8lXl878wcF4TAICwfspZ8SANP6bheoCHw%3d“
Erstellen eines Azure Runbook Webhooks

Erstellen eines Azure Runbook Webhooks

Fertig! Nun haben wir einen Webhook erstellt, mit dem wir ein Azure Runbook starten können, das Runbook startet alle Maschinen.

Microsoft Flow zum Verdrahten von PowerApps und Azure

PowerApps selbst kann keinen Post HTTP Befehl absetzten, also brauchen wir eine kleine Brücke, welche dies für uns übernimmt. Man könnte nun eine Azure Function oder einen App Service erstellen, aber Microsoft Flow ist deutlich einfacher und schneller in der Umsetzung. Mit Microsoft Flow können  Prozessabfolgen erstellt werden, welche standardisierte Komponenten aufrufen, weitere Infos hier. In der folgenden Screenshot-Reihe zeige ich, wie man einen einfachen Flow anlegt, der unseren HTTP Post Befehl ausführt.

  1. „Ohne Vorlage neu erstellen“ auswählen.
Microsoft Flow - Meine Flows

Microsoft Flow – Meine Flows

Jeder Flow braucht einen Trigger, d.h. ein Event, das den Flow startet. In unserem Fall ist PowerApps der Trigger. Deshalb können wir einfach PowerApps auswählen

Trigger mit Power Apps hinzufgen

Trigger mit Power Apps hinzufügen

Nun können wir weitere Flow-Schritte einfügen, die auf unseren Trigger folgen

  1. Auf  „Neuer Schritt“ klicken
  2. „Aktion hinzufügen“ auswählen
Ein weiter Flow Element einfügen

Ein weiteres Flow Element einfügen

Nun fügen wir einen HTTP Schritt ein.

HTTP Schritt hinzufügen

HTTP Schritt hinzufügen

Im Anschluss konfigurieren wir diesen Schritt weiter.

  1. Umschalten auf POST Methode
  2. Unsere HTTP Webhook einfügen
  3. Optional: Hier könnte man z.B. Parameter als JSON übergeben, diese müsste dann vom Runbook verarbeitet werden. Hier ist dies nicht nötig, aber zum Beispiel könnte man damit eine Maschinen-ID übergeben oder die Auswahl eines Nutzers
  4. Optional: Hier könnte man aus PowerApps Inhalte übergeben, leider ist in der akutellen Version ein Bug, der verhindert, dass man Parameter direkt übergeben kann. Ich hoffe, dass dieser Bug bald behoben wird! Wer nicht warten kann mit der Parameterübergabe, kann den Umweg über das Common Data Model gehen. Das wäre aber ein eigener Blog-Beitrag :-).

 

HTTP Aufruf konfigurieren

HTTP Aufruf konfigurieren

Nun dem ganzen Flow noch einen Namen geben und auf „Flow speichern“ klicken. Danach ist der Flow in der Übersicht verfügbar. Mein Flow heißt „StartSchulungVM“.

PowerApps als Trigger eines Flows

So nun fügen wir alles zusammen. Wir erstellen eine PowerApp welche unseren Microsoft Flow aufruft. Ich benutze im Folgenden die PowerApps App aus dem Windows Store, man könnte dies aber auch im Browser auf PowerApps.com machen.

  1. Zuerst erstellen wir eine neue PowerApp
Erstellen einer neuen PowerApp

Erstellen einer neuen PowerApp

  1. Erstellen einer neuen PowerApp im Smartphone Layout
PowerApp im Smartphone Layout

PowerApp im Smartphone Layout

Nun haben wir eine neue leere PowerApp.

  1. Auf den Reiter „Einfügen“ klicken.
  2. Auf „Schaltfläche“ klicken.
Einfügen einer Schaltfläche

Einfügen einer Schaltfläche

Nun können wir die Schaltfläche umbenennen.

Schaltfläche verschieben und umbennen

Schaltfläche verschieben und umbenennen

Jetzt müssen wir diese Schaltfläche mit unserem Flow „StartSchulungVM“ verbinden. Hierfür

  1. Die Schaltfläche anklicken.
  2. „Aktion“ auswählen
  3. Auf „Flows“ klicken. Nun öffnet sich rechts ein Menü wo die verfügbaren Flows angezeigt werden.
  4. Hier nun einfach einen Flow auswählen, z.B. „StartSchlungVM“
Schaltfläche mit Flow verbinden

Schaltfläche mit Flow verbinden

Nun ist unsere Schaltfläche mit dem Flow verbunden (1). In der Funktionsleiste sehen wir den Funktionsaufruf, den PowerApps erstellt hat „StartSchulungVM.Run()“ (2). Wenn der Microsoft Flow einen Parameter erwarten würde, z.B. die ID einer Maschine, könnte man diesen im Funktionsaufruf mitgeben. PowerApps bietet einem sogar eine Hilfe bezüglich der benötigten Parameter.

Schaltfläche mit hinzugefügten Flow

Anpassen des Funktionsaufrufs

Geschafft! Wenn wir nun oben rechts auf das Play Symbol klicken, startet die App als Preview. Sobald wir nun auf die Schaltfläche klicken, triggert PowerApps den Microsoft Flow. Dieser führt einen HTTP Post Aufruf auf, welcher den Webhook auslöst, welcher wiederum das Runbook startet. Eine tolle Kette. Wenn man das Ganze 1, 2 mal gemacht hat dauert es nur wenige Minuten. Nun könnte man diese PowerApp noch viel weiter bauen, z.B. eine Anzeige welche Maschinen gerade aktiv sind oder weitere Steuerungsmöglichkeiten (Stoppen, Löschen, etc.)

Fazit

Ich denke dieses kleine Tutorial zeigt, wie einfach es ist einzelne Microsoft Dienste miteinander zu verbinden und welche Möglichkeiten diese Systeme bieten. Vielen Dank fürs Lesen. Ich bin sicher das PowerApps in Zukunft öfter zum Einsatz kommt.