Freigeben über


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

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

  1. Wählen Sie in Ihrer Funktions-App Funktionen und dann + Hinzufügen aus.

    Hinzufügen einer Funktion im Azure-Portal.

  2. Suchen Sie nach Event Grid, und wählen Sie dann die Azure Event Grid-Triggervorlage aus.

    Auswählen der Event Grid-Triggervorlage im Azure-Portal.

  3. Benennen Sie den neuen Trigger, und wählen Sie dann Funktion erstellen aus.

    Benennen des Event Grid-Triggers im Azure-Portal.

    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.

  1. Wählen Sie in Ihrer neuen Funktion Integration und dann Event Grid-Trigger (eventGridEvent) aus.

    Auswählen des Event Grid-Triggerlinks.

  2. Wählen Sie Event Grid-Beschreibung erstellen aus.

    Erstellen des Event Grid-Abonnements.

  3. Benennen Sie Ihr Ereignisabonnement, und wählen Sie den Thementyp Event Grid-Themen aus.

  4. 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.

  5. Klicken Sie auf Erstellen.

    Erstellen eines Event Grid-Abonnements.

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} kann Running, Completed, Failed und Terminated sein.
  • data : Spezielle Durable Functions-Parameter.
    • hubName: Name des TaskHub
    • functionName : 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.

Nächste Schritte