Veröffentlichen von Durable Functions in Azure Event Grid
In diesem Artikel wird gezeigt, wie Sie Durable Functions so einrichten, dass Lebenszyklusereignisse einer Orchestrierung (z.B. Erstellen, Abschließen und Fehlschlagen) in einem benutzerdefinierten Azure Event Grid-Thema veröffentlicht werden.
Es folgen einige Szenarien, in denen diese Funktion hilfreich ist:
DevOps-Szenarien wie Blau/Grün-Bereitstellungen: Vor der Implementierung einer parallelen Bereitstellungsstrategie möchten Sie möglicherweise wissen, ob irgendeine Aufgabe ausgeführt wird.
Erweiterte Unterstützung für Überwachung und Diagnose: Sie können die Orchestrierungsstatusinformationen in einem externen, für Abfragen optimierten Speicher wie Azure SQL-Datenbank oder Azure Cosmos DB verfolgen.
Lang andauernde Hintergrundaktivität: Bei Verwendung von Durable Functions für eine lang andauernde Hintergrundaktivität erleichtert diese Funktion Ihnen die Ermittlung des aktuellen Status.
Voraussetzungen
- Installieren Sie Microsoft.Azure.WebJobs.Extensions.DurableTask in Ihrem Durable Functions-Projekt.
- Installieren Sie einen Azurite-Speicheremulator, oder verwenden Sie ein vorhandenes Azure Storage-Konto.
- Installieren Sie Azure CLI, oder verwenden Sie die Azure Cloud Shell.
Erstellen eines benutzerdefinierten Event Grid-Themas
Erstellen Sie ein Event Grid-Thema zum Senden von Ereignissen aus Durable Functions. In den folgenden Anweisungen wird gezeigt, wie Sie ein Thema mithilfe der Azure-Befehlszeilenschnittstelle (CLI) erstellen. Sie können dieses Thema auch erstellen, indem Sie PowerShell verwenden oder mithilfe des Azure-Portals.
Erstellen einer Ressourcengruppe
Erstellen Sie mit dem Befehl az group create
eine Ressourcengruppe. Derzeit unterstützt Azure Event Grid nicht alle Regionen. Informationen zu den unterstützten Regionen finden Sie unter Azure Event Grid – Übersicht.
az group create --name eventResourceGroup --location westus2
Erstellen eines benutzerdefinierten Themas
Ein Event Grid-Thema stellt einen benutzerdefinierten Endpunkt für die Veröffentlichung Ihrer Ereignisse bereit. Ersetzen Sie <topic_name>
durch einen eindeutigen Namen für Ihr Thema. Der Name des Themas muss eindeutig sein, da er als DNS-Eintrag verwendet wird.
az eventgrid topic create --name <topic_name> -l westus2 -g eventResourceGroup
Abrufen von Endpunkt und Schlüssel
Rufen Sie den Endpunkt des Themas ab. Ersetzen Sie <topic_name>
durch den von Ihnen ausgewählten Namen.
az eventgrid topic show --name <topic_name> -g eventResourceGroup --query "endpoint" --output tsv
Rufen Sie den Schlüssel für das Thema ab. Ersetzen Sie <topic_name>
durch den von Ihnen ausgewählten Namen.
az eventgrid topic key list --name <topic_name> -g eventResourceGroup --query "key1" --output tsv
Jetzt können Sie Ereignisse an das Thema senden.
Konfigurieren der Veröffentlichung in Event Grid
Suchen Sie in Ihrem Durable Functions-Projekt nach der Datei host.json
.
Durable Functions 1.x
Fügen Sie eventGridTopicEndpoint
und eventGridKeySettingName
einer durableTask
-Eigenschaft hinzu.
{
"durableTask": {
"eventGridTopicEndpoint": "https://<topic_name>.westus2-1.eventgrid.azure.net/api/events",
"eventGridKeySettingName": "EventGridKey"
}
}
Durable Functions 2.x
Fügen Sie den Abschnitt notifications
zur Eigenschaft durableTask
der Datei hinzu, und ersetzen Sie <topic_name>
durch den von Ihnen gewählten Namen. Wenn die Eigenschaften durableTask
oder extensions
nicht vorhanden sind, erstellen Sie sie wie in diesem Beispiel:
{
"version": "2.0",
"extensions": {
"durableTask": {
"notifications": {
"eventGrid": {
"topicEndpoint": "https://<topic_name>.westus2-1.eventgrid.azure.net/api/events",
"keySettingName": "EventGridKey"
}
}
}
}
}
Die möglichen Konfigurationseigenschaften von Azure Event Grid finden Sie in der host.json-Dokumentation. Nach dem Konfigurieren der Datei host.json
sendet die Funktions-App Lebenszyklusereignisse an das Event Grid-Thema. Diese Aktion startet, wenn Sie die Funktions-App sowohl lokal als auch in Azure ausführen.
Legen Sie die App-Einstellung für den Schlüssel des Themas in der Funktions-App und in der Datei local.settings.json
fest. Die folgende JSON-Datei dient als Beispiel für die Datei local.settings.json
für lokales Debuggen mithilfe eines Azure-Speicheremulators. Ersetzen Sie <topic_key>
durch den Schlüssel für das Thema.
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"EventGridKey": "<topic_key>"
}
}
Wenn Sie den Speicheremulator anstelle eines vorhandenen Azure Storage-Kontos verwenden, stellen Sie sicher, dass er ausgeführt wird. Vor der Ausführung sollten Sie alle vorhandenen Speicherdaten löschen.
Wenn Sie ein vorhandenes Azure Storage-Konto verwenden, ersetzen Sie UseDevelopmentStorage=true
in local.settings.json
durch die entsprechende Verbindungszeichenfolge.
Erstellen von Funktionen, die auf Ereignisse warten
Erstellen Sie mithilfe des Azure-Portals eine weitere Funktions-App zum Lauschen auf Ereignisse, die von Ihrer Durable Functions-App veröffentlicht werden. Es wird empfohlen, sie in derselben Region wie das Event Grid-Thema zu platzieren.
Erstellen einer Event Grid-Triggerfunktion
Wählen Sie in Ihrer Funktions-App Funktionen und dann + Hinzufügen aus.
Suchen Sie nach Event Grid, und wählen Sie dann die Azure Event Grid-Triggervorlage aus.
Benennen Sie den neuen Trigger, und wählen Sie dann Funktion erstellen aus.
Es wird eine Funktion mit folgendem Code erstellt:
#r "Newtonsoft.Json" using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Microsoft.Extensions.Logging; public static void Run(JObject eventGridEvent, ILogger log) { log.LogInformation(eventGridEvent.ToString(Formatting.Indented)); }
Hinzufügen eines Event Grid-Abonnements
Sie können jetzt dem gerade erstellten Event Grid-Thema ein Event Grid-Abonnement hinzufügen. Weitere Informationen finden Sie unter Begriffe in Azure Event Grid.
Wählen Sie in Ihrer neuen Funktion Integration und dann Event Grid-Trigger (eventGridEvent) aus.
Wählen Sie Event Grid-Beschreibung erstellen aus.
Benennen Sie Ihr Ereignisabonnement, und wählen Sie den Thementyp Event Grid-Themen aus.
Wählen Sie das Abonnement aus. Wählen Sie dann die Ressourcengruppe und Ressource aus, die Sie für das Event Grid-Thema erstellt haben.
Klicken Sie auf Erstellen.
Sie können nun Lebenszyklusereignisse empfangen.
Ausführen der Durable Functions-App zum Senden der Ereignisse
Starten Sie in dem zuvor konfigurierten Durable Functions-Projekt das Debuggen auf Ihrem lokalen Computer, und starten Sie eine Orchestrierung. Die App veröffentlicht Durable Functions-Lebenszyklusereignisse in Event Grid. Stellen Sie sicher, dass Event Grid die von Ihnen erstellte Listenerfunktion auslöst, indem Sie ihre Protokolle im Azure-Portal überprüfen.
2019-04-20T09:28:21.041 [Info] Function started (Id=3301c3ef-625f-40ce-ad4c-9ba2916b162d)
2019-04-20T09:28:21.104 [Info] {
"id": "054fe385-c017-4ce3-b38a-052ac970c39d",
"subject": "durable/orchestrator/Running",
"data": {
"hubName": "DurableFunctionsHub",
"functionName": "Sample",
"instanceId": "055d045b1c8a415b94f7671d8df693a6",
"reason": "",
"runtimeStatus": "Running"
},
"eventType": "orchestratorEvent",
"eventTime": "2019-04-20T09:28:19.6492068Z",
"dataVersion": "1.0",
"metadataVersion": "1",
"topic": "/subscriptions/<your_subscription_id>/resourceGroups/eventResourceGroup/providers/Microsoft.EventGrid/topics/durableTopic"
}
2019-04-20T09:28:21.104 [Info] Function completed (Success, Id=3301c3ef-625f-40ce-ad4c-9ba2916b162d, Duration=65ms)
2019-04-20T09:28:37.098 [Info] Function started (Id=36fadea5-198b-4345-bb8e-2837febb89a2)
2019-04-20T09:28:37.098 [Info] {
"id": "8cf17246-fa9c-4dad-b32a-5a868104f17b",
"subject": "durable/orchestrator/Completed",
"data": {
"hubName": "DurableFunctionsHub",
"functionName": "Sample",
"instanceId": "055d045b1c8a415b94f7671d8df693a6",
"reason": "",
"runtimeStatus": "Completed"
},
"eventType": "orchestratorEvent",
"eventTime": "2019-04-20T09:28:36.5061317Z",
"dataVersion": "1.0",
"metadataVersion": "1",
"topic": "/subscriptions/<your_subscription_id>/resourceGroups/eventResourceGroup/providers/Microsoft.EventGrid/topics/durableTopic"
}
2019-04-20T09:28:37.098 [Info] Function completed (Success, Id=36fadea5-198b-4345-bb8e-2837febb89a2, Duration=0ms)
Ereignisschema
In der folgenden Liste wird das Schema für Lebenszyklusereignisse erläutert:
id
: Eindeutiger Bezeichner für das Event Grid-Ereignis.subject
: Pfad zum Ereignisbetreff.durable/orchestrator/{orchestrationRuntimeStatus}
.{orchestrationRuntimeStatus}
kannRunning
,Completed
,Failed
undTerminated
sein.data
: Spezielle Durable Functions-Parameter.hubName
: Name des TaskHubfunctionName
: Name der Orchestratorfunktion.instanceId
: ID der Durable Functions-Instanz.reason
: Zusätzliche Daten zum Nachverfolgungsereignis. Weitere Informationen finden Sie unter Diagnose in Durable Functions (Azure Functions).runtimeStatus
: Laufzeitstatus der Orchestrierung. „Running“, „Completed“, „Failed“, „Canceled“.
eventType
: "orchestratorEvent"eventTime
: Ereigniszeit (UTC).dataVersion
: Version des Lebenszyklus-Ereignisschemas.metadataVersion
: Version der Metadaten.topic
: Ressource des Event Grid-Themas.
Lokales Testen
Weitere Informationen zum lokalen Testen finden Sie unter Lokales Event Grid-Testen mit der Viewer-Web-App.