publikowanie Durable Functions w usłudze Azure Event Grid

W tym artykule pokazano, jak skonfigurować Durable Functions publikowania zdarzeń cyklu życia orkiestracji (takich jak utworzone, ukończone i zakończone) do niestandardowego tematu Azure Event Grid.

Poniżej przedstawiono kilka scenariuszy, w których ta funkcja jest przydatna:

  • Scenariusze devOps, takie jak wdrożenia niebieskie/zielone: przed wdrożeniem strategii wdrażania równoległego warto wiedzieć, czy jakiekolwiek zadania są uruchomione.

  • Zaawansowana obsługa monitorowania i diagnostyki: możesz śledzić informacje o stanie aranżacji w magazynie zewnętrznym zoptymalizowanym pod kątem zapytań, takich jak Azure SQL Database lub Azure Cosmos DB.

  • Długotrwałe działanie w tle: jeśli używasz Durable Functions dla długotrwałego działania w tle, ta funkcja pomaga znać bieżący stan.

Wymagania wstępne

Tworzenie niestandardowego tematu usługi Event Grid

Utwórz temat usługi Event Grid na potrzeby wysyłania zdarzeń z Durable Functions. Poniższe instrukcje pokazują, jak utworzyć temat przy użyciu interfejsu wiersza polecenia platformy Azure. Temat można również utworzyć przy użyciu programu PowerShell lub Azure Portal.

Tworzenie grupy zasobów

Utwórz grupę zasobów za pomocą polecenia az group create. Obecnie Azure Event Grid nie obsługuje wszystkich regionów. Aby uzyskać informacje o obsługiwanych regionach, zobacz omówienie Azure Event Grid.

az group create --name eventResourceGroup --location westus2

Tworzenie tematu niestandardowego

Temat usługi Event Grid zawiera zdefiniowany przez użytkownika punkt końcowy, do którego publikujesz zdarzenie. Zamień <topic_name> na unikatową nazwę tematu. Nazwa tematu musi być unikatowa, ponieważ staje się wpisem DNS.

az eventgrid topic create --name <topic_name> -l westus2 -g eventResourceGroup

Pobieranie punktu końcowego i klucza

Pobierz punkt końcowy tematu. Zastąp <topic_name> ciąg wybraną nazwą.

az eventgrid topic show --name <topic_name> -g eventResourceGroup --query "endpoint" --output tsv

Pobierz klucz tematu. Zastąp <topic_name> ciąg wybraną nazwą.

az eventgrid topic key list --name <topic_name> -g eventResourceGroup --query "key1" --output tsv

Teraz możesz wysyłać zdarzenia do tematu.

Konfigurowanie publikowania usługi Event Grid

W projekcie Durable Functions znajdź host.json plik .

Durable Functions 1.x

Dodaj eventGridTopicEndpoint właściwość i eventGridKeySettingName w jej właściwości durableTask .

{
  "durableTask": {
    "eventGridTopicEndpoint": "https://<topic_name>.westus2-1.eventgrid.azure.net/api/events",
    "eventGridKeySettingName": "EventGridKey"
  }
}

Durable Functions 2.x

Dodaj sekcję notifications do durableTask właściwości pliku, zastępując <topic_name> ciąg wybraną nazwą. durableTask Jeśli właściwości lub extensions nie istnieją, utwórz je w następujący przykład:

{
  "version": "2.0",
  "extensions": {
    "durableTask": {
      "notifications": {
        "eventGrid": {
          "topicEndpoint": "https://<topic_name>.westus2-1.eventgrid.azure.net/api/events",
          "keySettingName": "EventGridKey"
        }
      }
    }
  }
}

Możliwe właściwości konfiguracji Azure Event Grid można znaleźć w dokumentacji pliku host.json. Po skonfigurowaniu host.json pliku aplikacja funkcji wysyła zdarzenia cyklu życia do tematu usługi Event Grid. Ta akcja jest uruchamiana po uruchomieniu aplikacji funkcji zarówno lokalnie, jak i na platformie Azure.

Ustaw ustawienie aplikacji dla klucza tematu w aplikacji funkcji i local.settings.json. Poniższy kod JSON jest przykładem local.settings.json debugowania lokalnego przy użyciu emulatora usługi Azure Storage. Zastąp <topic_key> element kluczem tematu.

{
    "IsEncrypted": false,
    "Values": {
        "AzureWebJobsStorage": "UseDevelopmentStorage=true",
        "EventGridKey": "<topic_key>"
    }
}

Jeśli używasz emulatora usługi Storage zamiast rzeczywistego konta usługi Azure Storage, upewnij się, że jest ono uruchomione. Dobrym pomysłem jest wyczyszczenie wszelkich istniejących danych magazynu przed wykonaniem.

Jeśli używasz rzeczywistego konta usługi Azure Storage, zastąp ciąg UseDevelopmentStorage=true parametrami local.settings.json połączenia.

Tworzenie funkcji, które nasłuchują zdarzeń

Korzystając z Azure Portal, utwórz inną aplikację funkcji, aby nasłuchiwać zdarzeń opublikowanych przez aplikację Durable Functions. Najlepiej zlokalizować go w tym samym regionie co temat usługi Event Grid.

Tworzenie funkcji wyzwalacza usługi Event Grid

  1. W aplikacji funkcji wybierz pozycję Funkcje, a następnie wybierz pozycję + Dodaj

    Dodaj funkcję w Azure Portal.

  2. Wyszukaj usługę Event Grid, a następnie wybierz szablon wyzwalacza Azure Event Grid.

    Wybierz szablon wyzwalacza usługi Event Grid w Azure Portal.

  3. Nazwij nowy wyzwalacz, a następnie wybierz pozycję Utwórz funkcję.

    Nazwij wyzwalacz usługi Event Grid w Azure Portal.

    Zostanie utworzona funkcja z następującym kodem:

    #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));
    }
    

Dodawanie subskrypcji usługi Event Grid

Teraz możesz dodać subskrypcję usługi Event Grid dla utworzonego tematu usługi Event Grid. Aby uzyskać więcej informacji, zobacz Pojęcia w Azure Event Grid.

  1. W nowej funkcji wybierz pozycję Integracja , a następnie wybierz pozycję Wyzwalacz usługi Event Grid (eventGridEvent).

    Wybierz link Wyzwalacz usługi Event Grid.

  2. Wybierz pozycję Utwórz opis usługi Event Grid.

    Utwórz subskrypcję usługi Event Grid.

  3. Nazwij subskrypcję zdarzeń i wybierz typ tematu Tematy usługi Event Grid .

  4. Wybierz subskrypcję. Następnie wybierz grupę zasobów i zasób utworzony dla tematu usługi Event Grid.

  5. Wybierz przycisk Utwórz.

    Tworzy subskrypcję usługi Event Grid.

Teraz możesz już odbierać zdarzenia cyklu życia.

Uruchamianie aplikacji Durable Functions w celu wysyłania zdarzeń

W skonfigurowanym wcześniej projekcie Durable Functions rozpocznij debugowanie na komputerze lokalnym i rozpocznij aranżację. Aplikacja publikuje zdarzenia cyklu życia Durable Functions w usłudze Event Grid. Sprawdź, czy usługa Event Grid wyzwala utworzoną funkcję odbiornika, sprawdzając jego dzienniki w Azure Portal.

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)

Schemat zdarzeń

Poniższa lista zawiera opis schematu zdarzeń cyklu życia:

  • id: unikatowy identyfikator zdarzenia usługi Event Grid.
  • subject: ścieżka do tematu zdarzenia. durable/orchestrator/{orchestrationRuntimeStatus}. {orchestrationRuntimeStatus} będzie to Running, Completed, Failedi Terminated.
  • data: Durable Functions określonych parametrów.
    • hubName: Nazwa witryny TaskHub .
    • functionName: Nazwa funkcji programu Orchestrator.
    • instanceId: Durable Functions instanceId.
    • reason: Dodatkowe dane skojarzone ze zdarzeniem śledzenia. Aby uzyskać więcej informacji, zobacz Diagnostyka w Durable Functions (Azure Functions)
    • runtimeStatus: Stan środowiska uruchomieniowego orkiestracji. Uruchomione, ukończone, zakończone, zakończone niepowodzeniem, anulowane.
  • eventType: "orchestratorEvent"
  • eventTime: Czas zdarzenia (UTC).
  • dataVersion: wersja schematu zdarzenia cyklu życia.
  • metadataVersion: wersja metadanych.
  • topic: zasób tematu usługi Event Grid.

Jak testować lokalnie

Aby przetestować lokalnie, przeczytaj artykuł Testowanie lokalne za pomocą aplikacji internetowej przeglądarki. Możesz również użyć narzędzia ngrok , jak pokazano w tym samouczku.

Następne kroki