Publikowanie w usłudze Azure Event Grid w usłudze Durable Functions
W tym artykule pokazano, jak skonfigurować rozszerzenie Durable Functions w celu publikowania zdarzeń cyklu życia aranżacji (takich jak utworzone, ukończone i zakończone) do niestandardowego tematu usługi Azure Event Grid.
Poniżej przedstawiono kilka scenariuszy, w których ta funkcja jest przydatna:
Scenariusze devOps, takie jak wdrożenia niebieskie/zielone: warto wiedzieć, czy jakiekolwiek zadania są uruchomione przed wdrożeniem strategii wdrażania równoległego.
Zaawansowana obsługa monitorowania i diagnostyki: możesz śledzić informacje o stanie aranżacji w zewnętrznym magazynie zoptymalizowanym pod kątem zapytań, takich jak usługa Azure SQL Database lub Azure Cosmos DB.
Długotrwałe działanie w tle: jeśli używasz rozszerzenia Durable Functions do długotrwałego działania w tle, ta funkcja ułatwia zapoznanie się z bieżącym stanem.
Wymagania wstępne
- Zainstaluj plik Microsoft.Azure.WebJobs.Extensions.DurableTask w projekcie Durable Functions.
- Zainstaluj emulator magazynu Azurite lub użyj istniejącego konta usługi Azure Storage.
- Instalowanie interfejsu wiersza polecenia platformy Azure lub używanie usługi Azure Cloud Shell
Tworzenie niestandardowego tematu usługi Event Grid
Utwórz temat usługi Event Grid na potrzeby wysyłania zdarzeń z rozszerzenia 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 witryny Azure Portal.
Tworzenie grupy zasobów
Utwórz grupę zasobów za pomocą polecenia az group create
. Obecnie usługa Azure Event Grid nie obsługuje wszystkich regionów. Aby uzyskać informacje o obsługiwanych regionach, zobacz Omówienie usługi 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 ciąg <topic_name>
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 usługi Azure Event Grid można znaleźć w dokumentacji host.json. Po skonfigurowaniu pliku aplikacja funkcji wysyła zdarzenia cyklu życia do tematu host.json
usługi Event Grid. Ta akcja rozpoczyna się po uruchomieniu aplikacji funkcji lokalnie 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>
ciąg 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 element UseDevelopmentStorage=true
swoim local.settings.json
parametry połączenia.
Tworzenie funkcji, które nasłuchują zdarzeń
Za pomocą witryny Azure Portal utwórz inną aplikację funkcji do nasłuchiwania 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
W aplikacji funkcji wybierz pozycję Funkcje, a następnie wybierz pozycję + Dodaj
Wyszukaj usługę Event Grid, a następnie wybierz szablon wyzwalacza usługi Azure Event Grid.
Nadaj nowej nazwie wyzwalacz, a następnie wybierz pozycję Utwórz funkcję.
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 usłudze Azure Event Grid.
W nowej funkcji wybierz pozycję Integracja, a następnie wybierz pozycję Wyzwalacz usługi Event Grid (eventGridEvent).
Wybierz pozycję Utwórz opis usługi Event Grid.
Nazwij subskrypcję zdarzeń i wybierz typ tematu Tematy usługi Event Grid.
Wybierz subskrypcję. Następnie wybierz grupę zasobów i zasób utworzony dla tematu usługi Event Grid.
Wybierz pozycję Utwórz.
Teraz możesz otrzymywać 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 rozszerzenia Durable Functions w usłudze Event Grid. Sprawdź, czy usługa Event Grid wyzwala utworzoną funkcję odbiornika, sprawdzając jego dzienniki w witrynie 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 toRunning
,Completed
,Failed
iTerminated
.data
: Parametry specyficzne dla rozszerzenia Durable Functions.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 usłudze 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ł Lokalne testowanie za pomocą aplikacji internetowej przeglądarki.