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.IsPastDuesagt, 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.