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
- 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 korzystanie z 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 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
W aplikacji funkcji wybierz pozycję Funkcje, a następnie wybierz pozycję + Dodaj
Wyszukaj usługę Event Grid, a następnie wybierz szablon wyzwalacza Azure Event Grid.
Nazwij nowy 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 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 przycisk Utwórz.
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 toRunning
,Completed
,Failed
iTerminated
.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.