Microsofts PaaS-Welt

Komponenten in der Cloud schnell entwickeln

20.09.2017 von Holger Fleck
Mit Cloud Computing kommen auch Server-lose Entwicklungsplattformen in Mode. Ein Vergleich von Microsoft Flow, Azure Logic Apps und Azure Functions gibt eine Übersicht der Möglichkeiten und stellt Einsatzszenarien vor.

Platform as a Service (PaaS) stellt Entwicklern vielfältige Funktionen bereit. Zentral handelt es sich um Leistungen, die mit den eigentlichen Anwendungsfunktionen nichts zu tun haben. Deployment, Hosting, Sicherheit und weitere Aspekte stehen als Service bereit. PaaS-Umgebungen sind zudem hochverfügbar sowie skalierbar. Sie sind besonders effizient, wenn es um Module mit geringer Funktionalität geht, deren Overhead ebenfalls gering bleiben soll. Gewünscht ist ein minimaler administrativer Aufwand für die Konfiguration.

Microsoft bietet diverse Entwicklungsdienste, die einen jeweils anderen Grad an Reduzierung des Overheads ermöglichen. Einige davon sind für spezifische Anwendungsfälle gedacht, zum Beispiel Machine Learning oder Azure Bot Service. Microsoft Flow, Azure Logic Apps und Azure Functions bieten einen hohen Abstraktionsgrad an und sind dennoch, anders als andere Dienste, nicht auf einen bestimmten Bereich beschränkt.

Logic Apps und Flow sind Workflow-Systeme: Die Lösungen werden in einer grafischen Oberfläche orchestriert. Sie reagieren auf ein Ereignis (Trigger) und führen Aktionen auf anderen Systemen aus. Mit 150 Konnektoren steht eine Vielzahl von verschiedenen Cloud-Systemen zur Verfügung. Reichen diese nicht aus, können über eine Swagger-Datei auch eigene Funktionen ergänzt werden. Azure Functions bietet hier eine integrierte Exportfunktion. Auf eigene Systeme wie die lokale Datenbank kann über ein Gateway zugegriffen werden.

Logic Apps und Flow unterscheiden sich technisch im Wesentlichen dadurch, dass Logic Apps zusätzlich über einen textbasierten Editor (Javascript Object Notation, JSON) verfügt. Darüber hinaus gibt es kleinere Unterschiede. In der Summe ändert das die Nutzbarkeit. Daher werden Flow und Logic Apps nachfolgend getrennt bewertet.

Microsoft Flow

Die grafische Oberfläche von Flow ist tatsächlich so einfach zu bedienen, dass eine Lösung ohne Vorkenntnisse umgesetzt werden kann. Hunderte von Vorlagen helfen beim Einstieg. Bei der Orchestrierung werden Eigenschaften von Aktionen mit festen Werten oder mit Resultaten aus vorangegangenen Aktionen oder des Triggers gefüllt. Des Weiteren lassen sich Wertesammlungen in Schleifen verarbeiten und Bedingungen durch Verzweigungen realisieren. Dass ein Workflow auch über die Smartphone-App "Flow" erstellt werden kann, ist in der Praxis nicht so wichtig. Es unterstreicht aber, wie leicht ein einfacher Workflow einzurichten ist.

Mit Microsoft Flow kommen bereits etwas versiertere Power-User zurecht. Fachabteilungen können einzelne Komponenten, etwa Genehmigungsprozesse, selbst umsetzen. Besondere Bedeutung hat hier das einfache Zusammenspiel mit anderen Office-Produkten, insbesondere mit Sharepoint, Forms, aber auch PowerApps.
Foto: Axians

Neben den offensichtlichen Werten, die für eine Aktion nötig sind (zum Beispiel MailAdresse beim Versenden einer Mail über Office 365), verstecken sich im Kontextmenü erweiterte Optionen, die die Ausführung ändern. So kann die Ausführung asynchron oder synchron beziehungsweise sequenziell oder gleichzeitig erfolgen. Um Verbindungsprobleme abzufedern (HTTP-Status 408, 429 und 5xx), ist es möglich, Wiederholungen zu konfigurieren.

Das Thema Fehlerbehandlung - wichtig für kritische Workflows - geht Flow erstaunlich effizient an: Aktionen können in Abhängigkeit von Fehlern oder Timeouts ausgeführt werden. So kann etwa eine Info-Mail versendet werden, falls ein Prozess nicht sauber ausgeführt wird.

Das einfache Starten eines Workflows ist für kleine Workflow-Systeme wichtig. Flow bietet hier als Besonderheit das Starten von Workflows über eine Smartphone-App an: Sie können mit einem speziellen Trigger in der Flow-App auf einem Smartphone per Schaltfläche gestartet werden, wobei auch Texte eingegeben werden können. Entscheidungen in Genehmigungs-Workflows können in der App oder klassisch per Mail getroffen werden.

Um die Workflows unter Kontrolle zu halten, zeigt Flow in einem Dashboard neben allen Ausführungen die vorhandenen Verbindungen an. Mit Flow kann auf viele Systeme zugegriffen werden. Um die Sicherheit zu gewährleisten, ist es möglich, Richtlinien festzulegen. Diese schränken die Konnektoren ein, die in Workflows eingesetzt werden dürfen. Der Zugriff auf den Common Data Service (ein einheitlicher Speicherplatz von Office 365) ist ebenfalls steuerbar.

Azure Logic Apps

Wie bereits erwähnt, können Logic Apps auch textuell erstellt werden. In der Praxis hat es sich bewährt, eine Logic App zunächst im Designer zusammenzustellen und anschließend die Feinarbeit in JSON - also im Azure Editor oder auch in Visual Studio - umzusetzen. Einige Funktionalitäten werden ausschließlich über die JSON erreicht. Als Beispiel ist hier die Parametrisierung einer Logic App zu nennen, die nur bei Flow über den grafischen Editor genutzt werden kann. Aber auch Inline-Funktionen, zum Beispiel zur Konvertierung von Datentypen, Mengen, Zeichenketten und mathematischen Funktionen, können lediglich über JSON eingegeben werden. In Flow sind die Inline-Funktionen nur über einen Trick verwendbar.

Für größere und komplexere Workflows mit mehr als 30 Schritten ist Azure Logic Apps geeignet. Durch die Strukturierung in der JSON lassen sich etwas komplexere Prozesse umsetzen als in Flow. Sobald Daten konvertiert werden müssen, sind vor allem Inline- Funktionen nötig. Daher wenden sich die Logic Apps auch an Programmierer.
Foto: Axians

Bei Logic Apps stehen eine REST API und Powershell cmdlets zur Verfügung. Mit diesen lassen sich Logic Apps erstellen, Informationen abrufen und in einen automatisierten Deployment-Prozess mit anderen Services integrieren. Da Logic Apps in Azure gehostet sind, stehen einige Optionen bereit, die Flow nicht bietet. So können ein Aufruf von Logic Apps mittels SAS URLs oder für definierte IP-Adressen reduziert und Benachrichtigungen über die Aktivität von Logic Apps ausgelöst werden. Seit August sind die Logic Apps in die Azure Log Analytics integriert und über das OMS- Portal zu überwachen.

Sobald Daten mit anderen Unternehmen ausgetauscht werden sollen, müssen die Datenströme gesichert werden. Zudem haben sich Protokolle wie AS2, EDIFACT und X12 durchgesetzt. Für die Verschlüsselung und den Umgang mit digitalen Signaturen bietet Azure das Enterprise Integration Pack an, das Konnektoren für die genannten Protokolle enthält. Somit können Prozesse mit Partnern einfach automatisiert werden. Beispielsweise kann eine Ablaufstörung in einem Microsoft-Forms-Formular (Office 365) erfasst und ein Eintrag in einer Sharepoint-Liste erstellt werden. Basierend auf den angegebenen Daten, werden weitere Informationen aus anderen Systemen hinzugefügt und automatisch ein Ticket bei einem Vertragspartner eröffnet.

Azure Functions

Mit Hilfe von Azure Functions wird eine programmierte Methode im Internet bereitgestellt. Im Gegensatz zu dem Workflow-System von Flow beziehungsweise Logic Apps stehen hierbei verschiedene Technologien zur Verfügung: als Skript (Bash, Batch, Powershell) oder als echte Programmiersprache (C#, F#, Javascript, Typescript, PHP, Python). Die Einsatzvielfalt ergibt sich aber vor allem daraus, dass eine Azure Function unterschiedliche Auslöser benutzen kann.

Neben HTTP-Request-Triggern, optional auch als Webhook, bietet Azure eine zeitgesteuerte Ausführung für regelmäßige Jobs an. So lassen sich beispielsweise nächtliche Prüfroutinen realisieren. Sehr häufig sollen jedoch Aufrufe aufgrund von Änderungen in Datensystemen erfolgen. Um neue Einträge in Datenströmen (zum Beispiel Event Hub, Queue Storage und Blob Storage, Service-Bus) oder Online-Dateisystemen (OneDrive, Azure File Storage, Dropbox, FTP etc.) zu verarbeiten, stehen den Azure Functions spezielle Trigger zur Verfügung. Somit erübrigt sich der Umweg über einen HTTP-Request.

Je nach Art des Auslösers wird ein anderer Methodenkopf benötigt: ein C# HttpRequest Trigger ist eine "async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)"-Methode, während ein TypeScript Timer Trigger mit folgendem Methodenkopf arbeitet: "function run (context: any, myTimer: any): any".

Zum schnellen Einstieg stehen wie für Flow und Logic Apps Vorlagen bereit. Diese sind fertig konfiguriert und enthalten einen ausführbaren Methodenrumpf. So wird mit wenigen Klicks ebenfalls eine lauffähige Web-Service-Methode bereitgestellt.

Früher mussten Themen wie Sicherheit und Logging programmiert oder umständlich konfiguriert werden. Damit sind Änderungen wie ein Staging fehleranfällig und aufwendig. Um dies zu vermeiden, sind Azure Functions weitreichend konfigurierbar. Nachfolgend eine Übersicht der wesentlichen Punkte.

Der wichtigste Aspekt einer Lösung ist ein kontrolliertes Deployment. Neben der Anbindung an größere Standardwerkzeuge wie Visual Studio Teams Services oder GitHub und einfachen Dateiablagen wie OneDrive oder Dropbox hat Microsoft Kudu entwickelt. Hierbei handelt es sich um eine Oberfläche, mit der die Umgebung aller Azure-Web-Apps (einschließlich Azure Functions) kontrolliert werden kann. Über eine Debug-Konsole (CMD oder Powershell) hat man direkten Zugriff auf das Dateisystem und damit auf alle Konfigurationsdateien (JSON) der Umgebung, in der die Azure Function ausgeführt wird. Des Weiteren lassen sich Diagnose-Dumps und eine REST API herunterladen sowie Logs konfigurieren. Somit können Azure Functions in jeden Deployment-Prozess integriert werden.

In der Regel verarbeiten Dienste nicht nur Übergabeparameter, sondern greifen auch auf andere Ein- oder Ausgabesysteme zu. Dabei müssen die richtigen Quellen angesprochen und Authentifizierungs- sowie andere Parameter gesetzt werden. Da sich diese Werte zum Beispiel bei einem Staging oder bei einer Migration ändern, wird zur Sicherung der Qualität häufig eine Abstraktionsschicht implementiert. Azure Functions bietet hierfür ein Binding als Trennung zwischen Funktionalität und Definition der Ein- und Ausgabesysteme an. So lassen sich ohne Änderung des Quelltexts oder eine eigene Schicht die angebundenen Systeme austauschen. Leider ist dieses Binding derzeit nur für Azure-Dienste (Azure Event Hub, Azure Queue Storage etc.) und OneDrive realisiert.

Fazit

Durch die umfangreichen Einstellungen und das Exception Handling ist Microsoft Flow mehr als nur ein buntes Spielzeug und kann auch im Enterprise-Umfeld produktiv eingesetzt werden. Flow ist so intuitiv zu bedienen, dass tatsächlich auch computeraffine Power-User ohne Programmierkenntnisse nach ein paar Stunden Einarbeitung zurechtkommen. Besondere Bedeutung hat hier das leichte Zusammenspiel mit den anderen Office-Produkten, insbesondere mit Sharepoint, Forms, aber auch PowerApps. In der Praxis können Unternehmen so auf Unterstützung durch die eigene IT-Abteilung oder externe Dienstleister verzichten und Kosten reduzieren, indem sie einzelne Komponenten wie zum Beispiel Genehmigungsprozesse selbst umsetzen. Allerdings ist Flow nur bei kleineren Prozessen mit wenigen Schritten sinnvoll. Für größere und komplexere Workflows mit mehr als 30 Schritten ist der Editor ungeeignet. Hier bietet sich Logic Apps oder Azure Functions an.

Durch die Strukturierung in der Javascript Object Notation (JSON) lassen sich mit Logic Apps etwas komplexere Prozesse umsetzen als in Flow. Sobald Daten konvertiert werden müssen, sind vor allem Inline-Funktionen nötig. Daher wenden sich die Logic Apps auch an Programmierer. Flow ist für kleine Helfer-Workflows in Fachabteilungen geeignet, während Logic Apps für einfache Komponenten in komplexeren Systemen Anwendung findet.

Azure Functions umfasst eine größere Spanne: Es lassen sich zwar kleine Batch-Skripte realisieren. Doch durch die flexible Konfiguration aller Themen, die Skalierung der Infrastruktur, die Implementierung in Entwicklungsplattformen wie Visual Studio und die Unterstützung beim Deployment sind der Komplexität der Web-Services keine Grenzen gesetzt.