Azure-Function

Einrichtung

Azure-Function ist ein serverloser Computerdienst, mit dem Code bedarfsgesteuert ausgeführt werden kann, ohne eine explizite Infrastruktur bereitstellen oder verwalten zu müssen. Azure Functions können verwendet werden, um ein Skript oder Codeabschnitte als Reaktion auf verschiedene Ereignisse auszuführen.

Folgende Runtime Stacks können verwendet werden:

  • .NET Core
  • Node.js
  • Java
  • PowerShell

Erstellen einer neuen Function App

Um Azure-Functions nutzen und ausführen zu können, muss eine neue Function App erstellt werden. Hierfür muss im Azure Portal, durch klicken auf die Schaltfläche Create a resource, eine neue Ressource angelegt werden. Unter ‚Popular‘ sollte dann die Kachel Function App zu finden sein. Ist das nicht der Fall, kann über die Suchfunktion die entsprechende Ressource gefunden werden.

Erstellen einer Function App Ressource

Anschließend muss ein Name vergeben werden, sowie eine Subscription, eine Resource Group, ein OS, ein Hosting Plan, die Location sowie der Runtime Stack festgelegt werden. Außerdem wird ein Storage Account benötigt. Sollte ein solcher noch nicht existieren, muss dieser angelegt werden. Hierfür wird im entsprechenden Feld ein Name festgelegt. Den Rest übernimmt das Azure Portal.

Detail der Function App

App name definiert den Namen der Function App, welcher global eindeutig sein muss. Unter Subscription ist die entsprechende Subscription festzulegen, für die die Ressource erzeugt wird. In der Regel ist es die, mit der man sich angemeldet hat. Bei der Resource Group kann entschieden werden, ob eine bereits Bestehende verwendet oder eine Neue angelegt wird. Es ist gängige Praxis, Ressourcen die zusammen gehören, in einer Ressourcen Gruppe zu bündeln. Als Betriebssystem sollte derzeit noch Windows ausgewählt werden, da sich Linux noch in der Beta Phase befindet. Als location ist West Europe zu wählen. Unter Runtime Stack wird eine der oben aufgeführten Optionen gewählt. Durch diese Option wird festgelegt, in welcher Programmiersprache die Azure-Functions entwickelt werden. Dies kann nachträglich nicht mehr geändert werden. Zu guter Letzt muss ein Storage-Account festgelegt werden, in dem alle Daten und Skripts gespeichert werden. Für eine detaillierte Beschreibung aller Auswahlfelder wird auf die offizielle Dokumentation verwiesen.

Erstellen einer Funktion

Einzelne Funktionen können auf zwei verschiedene Arten erstellt werden. Im Azure Portal oder in einer Entwicklungsumgebung. Das Vorgehen zum Erstellen aus dem Azure Portal heraus, ist in der offiziellen Dokumentation beschrieben. Der Nachteil dieser Herangehensweise ist, dass die der Source Code nicht exportiert werden kann. Das hat zur Folge, dass er im Browser editiert werden muss. Es stehen also nicht die gewohnten Funktionen einer IDE zur Verfügung.

Das Vorgehen zum Erstellen aus einer IDE wird an dieser Stelle exemplarisch für Visual Studio Code gezeigt. Hierfür wird die Azure Functions Erweiterung benötigt. Diese kann wie schon die Azure-IoT Erweiterung über den Marketplace bezogen werden. Dafür wählt man die Extensions-Schaltfläche und gibt in der Suche Azure Functions ein.

Installieren der Azure Functions Erweiterung

Durch Drücken der F1-Taste wird die Befehlspalette geöffnet. Hier muss der Eintrag Azure Functions: Create New Project gewählt werden. Als erstes wird ein Projekt Verzeichnis festgelegt. Im Anschluss müssen noch folgenden Optionen fest gelegt werden:

  • Sprache für das Funktions-App-Projekt
  • Trigger für die den Einstiegspunkt
  • Name der Funktion
  • Erstellen eines Namespaces
  • Weitere Trigger spezifische Optionen
  • Festlegen des Storage-Accounts

Erstellen einer Funktion mit IoT-Hub Trigger

Es gibt eine sehr große Zahl an möglichen Triggern und jeder benötigt spezielle Einstellungen. Für die Umsetzung dieses Projektes wurde der IoT-Hub Trigger verwendet. Deswegen beschränken wir uns auf die Beschreibung dieser Variante.

Zuerst muss, wie oben beschrieben, ein neues Projekt erstellt werden. Als Programmiersprache ist eine der aufgeführten Sprachen zu wählen. Alle weiteren Schritte beziehen sich auf ein C#-Projekt.

  1. Auswahl der Sprache: Alle weiteren Schritte beziehen sich auf ein C#-Projekt. Also ist als Sprache C# zu wählen.
  2. Trigger-Typ festlegen: Um einen IoT-Hub Trigger wählen zu können, muss zuerst Change template filter und dann All gewählt werden. Jetzt steht der IoT-Hub Trigger zur Auswahl.
  3. Funktionsnamen festlegen: Das ist der Name unter dem die Funktion später zu finden ist. Dieser ist gleichzeitig der Name der Klasse in der sich die Run-Methode befindet, die aufgerufen wird, sobald die Funktion getriggert wird.
  4. Namespace definieren: Der Namepace, in dem die Klasse mit der Run-Methode existiert.
  5. Settings Datei festlegen: Create new local app setting wählen
  6. Event hub namespace wählen: Skip for now wählen
  7. IoT-Hub endpoint festlegen: Hier muss als Endpunkt der IoT-Hub gewählt werden, der die Funktion triggert. messages/events ist der Default-Endpoint.
  8. Storage-Account wählen: Zum Schluss muss noch ein Storage-Account festgelegt werden. Hier ist einer aus der Auswahlliste zu nehmen.

Nun wird von Visual Studio Code ein frisches Projekt mit der spezifizierten Basisklasse angelegt. Diese enthält eine Methode Run()

[FunctionName("SmartHomeMaster")]
public static void Run([IoTHubTrigger("samples-workitems", 
                       Connection="HdaSmartHomeHub_events_IOTHUB", 
                       ConsumerGroup = "web-app")]EventData message, 
                       ILogger log)

Die Parameter Connection und ConsumerGroup müssen manuell ausgefüllt werde.

  • Connection: NamedesIoTHub_events_IOTHUB wobei NamedesIoTHub der Name des IoT-Hubs ist. Dieser kann im Azure-Portal im entsprechenden IoT-Hub unter Properties gefunden werden.
  • ConsumerGroup: Wird nur die Funktion vom IoT-Hub getriggert, kann dieser Parameter weggelassen werden. Werden mehrere Ressourcen einer Consumer-Gruppe getriggert, muss diese hier angegeben werden. Die Consumer-Gruppen sind im Azure-Portal im entsprechenden IoT-Hub unter Build-in endpoints zu finden.

Funktion in die Cloud deployen

Damit die erstellte Funktion in der Cloud ausgeführt wird, muss sie deployed werden. Um die Funktion zu deployen, wird in Visual Studio Code F1 gedrückt. Dann wird der Punkt Azure Functions: Deploy to Function App gewählt und die zu deployende Funktion angegeben. Draufhin lädt Visual Studio Code die Funktion in die Cloud und startet sie.

Funktion in Visual Studio Code