Precompiled Azure Functions

Hinweis: Dieser Blogbeitrag setzt Grundwissen in der Programmierung von Azure Functions voraus. Als Einstieg in das Thema empfiehlt sich die Microsoft Dokumentation zu Azure Functions. Wenn ihr noch mehr über die Hintergründe von Azure Functions erfahren wollt, möchte ich euch den lesenswerten Artikel Serverlose Architektur mit Azure Functions empfehlen.

Teil 1: Einführung

Mit Microsoft Azure Functions fällt der Einstieg in die Welt der serverlosen Architektur sehr leicht. Schnell sind erste Microservices implementiert und im Handumdrehen einfache Unternehmens-Szenarien modelliert.

Azure Functions sind noch sehr jung und befinden sich aktuell in einer rasanten Entwicklungsphase. Während ich diesen Artikel schreibe (März 2017) ist Visual Studio in Version 2017 erschienen – leider ohne vollständige Unterstützung bzgl. des Azure Functions Toolings.

Als qualitätsbewusster C# Entwickler weiß ich um die Vorteile einer ausgereiften IDE und will auf Features wie IntelliSense, Unit Testing und die Einbindung in einen Continuous Integration Process nicht verzichten. Im Zusammenspiel mit Azure Functions kann ich die oben erwähnten Punkte derzeit leider nicht direkt nutzen.

Das Team um Azure Functions hat das erkannt und bietet seit Kurzem die Möglichkeit, kompilierte Funktionen zu nutzen.

In diesem dreiteiligen Blogbeitrag möchte ich euch Starthilfe zur Entwicklung von Precompiled Azure Functions geben.

Es handelt sich dabei um normale C# Assemblies, die kompiliert und anschließend in eine Azure Function App hochgeladen werden können. In der entsprechenden function.json  Konfigurationsdatei verweist man auf die hochgeladene DLL und schon wird der kompilierte Code ausgeführt, statt des Skripts der ursprünglichen Azure Function.

Gehe ich diesen Extraschritt über das Vorkompilieren, stehen mir plötzlich alle Benefits von Visual Studio zur Verfügung.

  • Mit IntelliSense kann ich Tippfehler minimieren.
  • Unit Tests schlagen fehl, wenn eine Azure Function nicht mehr das tut, was sie tun sollte.
  • Ich kann den Continuous Integration Process selbst gestalten und z.B. Test- oder Staging-Umgebungen inkludieren.

Azure Functions mögen als schnelle und einfache Lösung den Weg in ein Kundenprojekt finden. Allerdings läuft man leicht Gefahr, auch komplexere API Anwendungen mit Azure Functions zu entwickeln. Eventuell wäre ein „vollwertiger“ Azure App Service die bessere Wahl für komplexere Anwendungen gewesen?!

Hier kommt ein Vorteil von Precompiled Azure Functions zum Tragen, der anfangs nicht offensichtlich erscheint: Ich kann sie jederzeit mit der Unterstützung von Visual Studio refaktorieren. So kann ich Precompiled Azure Functions schnell in eine komplexere API bzw. Web App integrieren, falls es die Komplexität verlangt.

Weiter geht es mit Teil 2 des Blogbeitrags. Dort stelle ich euch eine Template Solution in Visual Studio vor, mit der ihr direkt loslegen und eure eigenen Precompiled Azure Functions entwickeln könnt.