Eine Funktion tut nichts von selbst. Ein Trigger startet sie: eine Uhrzeit, eine Anfrage, eine Nachricht, eine neue Datei, ein Ereignis. Jede Funktion hat genau einen. Bindungen verbinden sie zusätzlich mit Daten: eine Eingabebindung liest vor dem Aufruf, eine Ausgabebindung schreibt danach. In Modul 3.5 haben Sie den Import der Ausschreibungen als Worker in Container Apps gebaut, der eine Warteschlange liest. In dieser Lektion baut die Kladde denselben Import als Functions: einen Timer, der nachts startet, und eine Funktion, die jede Nachricht verarbeitet, beide mit verwalteter Identität, beide so, dass eine doppelte Nachricht nichts doppelt tut.

Neu in dieser Lektion:

Paket Version wofür
Microsoft.Azure.Functions.Worker.Extensions.Timer 4.3.1 der Timer-Trigger
Microsoft.Azure.Functions.Worker.Extensions.ServiceBus 5.24.0 Trigger und Ausgabe für Service Bus
Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs 6.8.2 Trigger und Bindungen für Blob Storage (im Überblick)
Microsoft.Azure.Functions.Worker.Extensions.EventGrid 3.6.0 der Event-Grid-Trigger (im Überblick)

Die Trigger der Kladde

Trigger Attribut wann er auslöst was er braucht
Timer [TimerTrigger("0 30 3 * * *")] nach einem Zeitplan den Speicher des Hosts, der eine Sperre hält, damit nur eine Instanz läuft
HTTP [HttpTrigger(...)] bei einer Anfrage nichts weiter; in Azure einen Funktionsschlüssel, außer bei Anonymous
Service Bus [ServiceBusTrigger("notices", Connection = "...")] je Nachricht einer Warteschlange oder eines Abonnements eine Verbindung und die Rolle zum Empfangen
Blob [BlobTrigger("rohdaten/{name}", Source = BlobTriggerSource.EventGrid)] bei einer neuen oder geänderten Datei in Flex Consumption ein Ereignisabonnement von Event Grid
Event Grid [EventGridTrigger] bei einem Ereignis aus Event Grid (Modul 3.5) ein Ereignisabonnement mit der Funktion als Ziel

Drei Dinge zu den Triggern:

  • Der Zeitplan des Timers ist ein NCRONTAB-Ausdruck mit sechs Feldern, das erste sind die Sekunden: 0 30 3 * * * heißt jeden Tag um 03:30:00. Die Zeit ist UTC. TimerInfo.IsPastDue sagt, ob ein Lauf zu spät kommt, etwa nach einem Neustart.
  • Der Blob-Trigger hat zwei Arten. Die ältere fragt den Container regelmäßig ab und ist bei vielen Dateien langsam. Die neuere bekommt die Änderungen als Ereignisse von Event Grid (Source = BlobTriggerSource.EventGrid), und nur diese gibt es in Flex Consumption.
  • Ein HTTP-Trigger ist für Aufrufe gedacht, die schnell antworten. Lange Arbeit startet er nur und gibt 202 zurück (Lektion 3.9.1); Lektion 3.13.3 zeigt dafür Durable Functions.