Wissen von A bis Z

Azure Functions

Code, der nur dann arbeitet, wenn er wirklich gebraucht wird – und auch nur dann kostet.

Azure Functions ist der Function-as-a-Service-Dienst (FaaS) der Microsoft-Azure-Plattform und damit Microsofts Antwort auf das Serverless-Computing-Paradigma. Er erlaubt es, kleine, ereignisgesteuerte Codeeinheiten — sogenannte Functions — auszuführen, ohne dass die zugrundeliegende Infrastruktur (Virtuelle Maschinen, Webserver, Skalierungslogik) explizit verwaltet werden muss. Ausgeführt werden Functions in einer Hosting-Umgebung, die je nach Plan automatisch skaliert (Consumption Plan, Premium Plan) oder auf einem dedizierten App-Service-Plan bzw. in Azure Container Apps läuft. Unterstützt werden mehrere Sprachen, darunter C#/.NET (Isolated Worker und In-Process Model), JavaScript/TypeScript (Node.js), Python, Java und PowerShell.

Im Einsatz übernimmt Azure Functions typische Serverless-Workloads: HTTP-APIs und Webhooks, Hintergrundverarbeitung über Queue-Trigger (Azure Storage Queues, Azure Service Bus), Stream-Processing über Event-Hub- oder Event-Grid-Trigger, geplante Aufgaben über Timer-Trigger (CRON-basiert), Datei-Verarbeitung bei Blob-Uploads sowie Datenbank-Trigger über Cosmos DB Change Feed oder SQL-Trigger. Über das Bindings-Modell werden Eingaben und Ausgaben deklarativ an externe Dienste angebunden, sodass Boilerplate-Code für Authentifizierung, Connection-Handling und Serialisierung weitgehend entfällt. Mit Durable Functions steht zusätzlich eine Erweiterung für langlaufende, zustandsbehaftete Workflows (Function Chaining, Fan-Out/Fan-In, Human Interaction Patterns) zur Verfügung, die auf Event Sourcing in Azure Storage basiert.

Der Einsatzzweck liegt in der Reduktion von Betriebsaufwand und in der präzisen Skalierung pro Ausführung. Klassische Probleme von dauerhaft laufenden Webservern — Über- oder Unterprovisionierung, manuelles Lifecycle-Management, Patchen von Betriebssystem und Runtime — werden in der Verantwortung des Plattformbetreibers gebündelt. Im Consumption Plan wird sekundengenau nach Ausführungszeit, RAM-Verbrauch und Anzahl der Aufrufe abgerechnet, was insbesondere für stark schwankende oder selten ausgeführte Workloads wirtschaftlich attraktiv ist. Gleichzeitig adressiert das Trigger-/Bindings-Modell ein wiederkehrendes Architekturproblem: die lose Kopplung zwischen Ereignisquellen (Queues, Topics, Storage, HTTP) und Verarbeitungs-Logik.

Historisch wurde Azure Functions im März 2016 auf der Build-Konferenz erstmals als Preview vorgestellt und im November 2016 allgemein verfügbar gemacht. Das Produkt baut technisch auf Azure WebJobs und dem WebJobs SDK auf, das das Bindings-Konzept eingeführt hat. Mit dem Functions Runtime v2 (2018) wurde der Wechsel auf .NET Core und damit auf eine plattformübergreifende, Linux-fähige Laufzeit vollzogen; v3 (2019) brachte .NET Core 3.1, v4 (2021) .NET 6 als Mindestlaufzeit. Mit dem Isolated Worker Model für .NET (allgemein verfügbar ab Functions v4) wurde der Funktionscode aus dem Host-Prozess herausgelöst, wodurch Function-Code und Functions-Host unabhängig voneinander auf unterschiedlichen .NET-Versionen laufen können. Das ältere In-Process-Modell wird zugunsten des Isolated Worker Models nach und nach abgelöst.

Eingeführt wurde Azure Functions von Microsoft, federführend vom Azure-Team rund um Christopher Anderson und das WebJobs-/Functions-Team. Das Functions-Runtime-Repository ist auf GitHub unter der MIT-Lizenz quelloffen verfügbar, was sowohl Self-Hosting in eigenen Containern als auch eine vollständige lokale Entwicklungserfahrung über die Azure Functions Core Tools ermöglicht. Azure Functions erschien rund zwei Jahre nach AWS Lambda (2014), das den FaaS-Markt im Wesentlichen begründet hat. Microsoft entschied sich bewusst gegen eine reine Lambda-Kopie und betonte stattdessen die offene, lokal ausführbare Runtime und das deklarative Bindings-Modell — eine strategische Differenzierung, die später auch in Konzepte wie KEDA (Kubernetes Event-Driven Autoscaling) eingeflossen ist, das gemeinsam von Microsoft und Red Hat als CNCF-Projekt vorangetrieben wird und die Skalierungslogik der Functions-Plattform auf beliebige Kubernetes-Workloads überträgt.

Azure Functions gehören seit beginn zum bluehands Technologie-Stack und ermöglichen einen sehr günstigen Betrieb von "kleineren" Fachanwendungen. Im Kontext von Green Software Development können wir Scale2Zero implementieren und somit klimafreundliche Anwendungen realisieren. Neben den klassischen PaaS-Szenarien implementieren wir in Azure Functions das REST-Backend, welches von einem in einer Static Web App gehosteten Angular Frontend konsumiert wird. Den Zustand (Daten) speichern wir in Azure Table und Blob Storage.

Zurück