In der Serie „Serverless mit Azure“ stellen wir vor, wie schnell und einfach man eine Azure Function erstellt und in Azure deployen kann.

Als konsequente Weiterentwicklung von DevOps in Richtung NoOps und und somit von Infrastructure und Platform as a Service hin zu Container und Functions as a Service, wird das Thema Serverless häufig genannt und gewinnt immer mehr an Aufmerksamkeit.

Serverless heißt übrigens nicht, dass es keine Server mehr gibt :-), schließlich muss der Code ja irgendwo laufen. Allerdings entfällt die Notwendigkeit, selbst irgendeinen Server bereitzustellen zu müssen. Dies wird von dem jeweiligen Plattformprovider (AWS, GCP, Azure) komplett übernommen und für Benutzer abstrahiert. Das ist übrigens nur ein Grund, den Serverless Technologien so interessant machen. Gerade bei Functions as a Service (ein Teilbereich von Serverless Technologien) werden nämlich nur Kosten erzeugt, wenn die Function tatsächlich ausgeführt wird. Im Vergleich dazu erzeugen beispielsweise Bare Metal Server oder VMs dauerhaft Kosten.

Außerdem skalieren Serverless Technologien extrem gut und im Falle von Azure Functions sogar automatisch, bei erhöhter Last.

Voraussetzungen

  • Der Einfachheit halber verwenden wir vorerst Visual Studio, weil die Integration zu Azure relativ gut funktioniert. Deshalb hier die Voraussetzung einer Visual Studio Installation.
  • Um die Azure Function zu deployen brauchen wir natürlich auch einen Azure Account und eine Subscription. Azure Functions sind bis zu einem monatlichen Aufruf von 1000000 kostenlos.

Vorbereitung

Zunächst öffnen wir Visual Studio und erstellen ein neues Projekt. In dem Wizard wählen wir das Azure Functions Template aus und spezifizieren im folgenden Schritt den Namen und Pfad des Projekts.

Neues Azure Function Projekt erstellen
Neues Azure Function Projekt erstellen

Anschließend können wir einen Trigger für unsere Function auswählen. Der Trigger definiert, bei welchem Ereignis unsere Function ausgeführt werden soll. Hier werden wir erst einmal den HTTP Trigger nehmen. Im weiteren Verlauf der Artikelserie werden wir auch noch verschiedene andere Trigger behandeln.

Http Trigger auswählen
Http Trigger auswählen

Wenn wir jetzt auf Erstellen klicken, sollte Visual Studio das Projekt für uns erstellen.

Analyse & Anpassung

Nachdem Visual Studio das Projekt erstellt hat, können wir erstmal die verschiedenen Elemente und den Code analysieren und ggf. anpassen. Zu den erzeugten Elementen gehört eine Visual Studio Solution mit einem Projekt und innerhalb des Projekts, einer .cs Datei. Diese enthält den Code unserer Function.

Erstelltes Visual Studio Projekt
Erstelltes Visual Studio Projekt

Standardmäßig nennt Visual Studio die .cs Datei „Function1.cs“ oder ähnlich. Da diese Benennung etwas zu generisch ist, können wir das an dieser Stelle anpassen. Das gleiche gilt für den Wert in Zeile 15, welcher den Namen der Function in Azure wiederspiegeln wird. Ansonsten sehen wir verschiedene Elemente im Code, wie in etwa Logausgaben in Zeile 20 und das Auswerten des Query-Parameters „name“. Eventuell noch interessant ist in Zeile 17 die Angabe des Triggers. Für den Trigger wird noch angegeben, dass die Function sowohl bei GET als auch bei POST Requests ausgeführt werden soll.

Lokale Ausführung

An dieser Stelle können wir das Ganze zunächst einmal lokal ausführen bevor wir es in Azure deployen. Dadurch können wir testen, ob alles so funktioniert wie wir uns das vorstellen. Dazu einfach in Visual Studio auf den Play Button oben in der Leiste klicken. Daraufhin sollte sich eine Konsole öffnen. Diese sollte zeigen, dass die Function läuft und die konfigurierten Http Endpunkte auflisten.

Lokale Ausführung der Azure Function
Lokale Ausführung der Azure Function

Jetzt können wir einen Http Request auf den Endpunkt absetzen, was in der folgenden Ausgabe resultiert.

Lokale Ausführung der Azure Function - Ausgabe bei Request
Lokale Ausführung der Azure Function – Ausgabe bei Request

In der Ausgabe können wir verschiedene Dinge sehen, wie die Ausführungsdauer, die HTTP Request Methode und den HTTP Code der Antwort.

Ausführung auf Azure

Wir haben also jetzt verifiziert, dass unsere Azure Function soweit funktioniert. Im nächsten Schritt können wir die Function auf Azure deployen und testen.

Deployment auf Azure

Durch die gut funktionierende Integration von Azure in Visual Studio, ist das deployen unserer Azure Function sehr einfach und komfortabel. Dazu einfach das Kontextmenü des Visual Studio Projekts auswählen.

Azure Function Deployment konfigurieren
Azure Function Deployment konfigurieren

Anschließend öffnet sich ein Wizard, der uns dabei hilft verschiedene Einstellungen für das deployment auf Azure vorzunehmen. Als erstes müssen wir einen Nutzungsplan definieren, wobei wir entweder einen vorhanden auswählen oder einen neuen erstellen können. Wir werden die Standardauswahl beibehalten und einen neuen Nutzungsplan definieren.

Nutzungsplan definieren
Nutzungsplan definieren

Als nächstes müssen wir einen sogenannten App Service definieren, innerhalb dessen unsere Azure Function laufen wird. Man kann sich den App Service wie eine übergeordnete Instanz vorstellen, in der man generelle Konfigurationen von Apps vornehmen kann. Schließlich ist eine Azure Function auch eine App, wenn auch eine kleine.

App Service erstellen
App Service erstellen

Für den App Service müssen wir verschiedene Dinge konfigurieren. Beispielsweise unter welcher Subscription und  an welchem Standort der App Service laufen soll. Das ist übrigens wichtig für die Abrechnung.

Bezüglich der Ressourcengruppe und der Azure Storage habe ich jetzt jeweils neue Einträge angelegt und diese zugewiesen. Wenn wir jetzt auf Erstellen drücken, wird alles vorbereitet und wir können die Azure Function jederzeit deployen.

Azure Function deployen
Azure Function deployen

Azure Function testen

Wenn das deployen auf Azure fehlerfrei ausgeführt wurde, sollte unserer Function öffentlich verfügbar sein. Die Website-URL in der Zusammenfassung des letzten Schritts innerhalb von Visual Studio ist leider etwas irreführend, also müssen wir das Azure Portal besuchen um die URL der Azure Function zu ermitteln.

Dort können wir entweder über „alle Ressourcen“ zu den Azure Functions, oder indem wir in der Suchleiste oben nach dem Namen der Azure Function suchen.

Jetzt müssen wir in der linken Leiste, innerhalb der Funktionsgruppe, unsere Function selbst anklicken. In dieser Übersicht können wir jetzt entweder die Function direkt ausführen oder die vollständige URL der Function abrufen um selbst einen HTTP Request abzusetzen.

Achtung: Die Funktions-URL sieht in etwa so aus: https://myfirstazurefunctionnoi.azurewebsites.net/api/HelloWorldFunction?code=a37Ndj/vhxCQ7tqsIS33wFsKRH4zqDjBeRDFJhK06BHv4808Axkx4w==. Wenn man diese URL aufruft wird man die Meldung bekommen, dass ein Query Parameter fehlt. Mit dem automatisch generierten Code von Visual Studio erwartet die Function einen Query Parameter namens „name“. Also die vollständige URL sieht dann folgendermaßen aus: https://myfirstazurefunctionnoi.azurewebsites.net/api/HelloWorldFunction?code=a37Ndj/vhxCQ7tqsIS33wFsKRH4zqDjBeRDFJhK06BHv4808Axkx4w==&name=noah. Dann sollte auch als Response „Hallo, noah“ zurückkommen oder eben der Name den man als Parameter übergeben hat.

Etwas komfortabler ist die Variante, die Function direkt über die Azure Web Oberfläche aufzurufen.

Fazit

Das Erstellen und Deployen einer Azure Function ist Dank Visual Studio sehr einfach und komfortabel. Natürlich war das jetzt eine triviale Azure Function ohne signifikante Funktionen, allerdings werden wir im Laufe der Artikelserie noch viele verschiedene Aspekte und Szenarien beleuchten.

Der nächste Artikel wird beispielweise zeigen, wie man innerhalb einer Azure Function, Daten in eine Cosmos DB speichern und auslesen kann.

 

Weiteres