Durable Functions publikování do Azure Event Grid

Tento článek ukazuje, jak nastavit Durable Functions pro publikování událostí životního cyklu orchestrace (například vytvořených, dokončených a neúspěšných) do vlastního tématu Azure Event Grid.

Tady je několik scénářů, ve kterých je tato funkce užitečná:

  • Scénáře DevOps, jako jsou modrá nebo zelená nasazení: Před implementací strategie souběžného nasazení možná budete chtít vědět, jestli jsou spuštěné nějaké úlohy.

  • Pokročilá podpora monitorování a diagnostiky: Informace o stavu orchestrace můžete sledovat v externím úložišti optimalizovaném pro dotazy, jako je Azure SQL Database nebo Azure Cosmos DB.

  • Dlouhotrvající aktivita na pozadí: Pokud používáte Durable Functions pro dlouhotrvající aktivitu na pozadí, pomůže vám tato funkce zjistit aktuální stav.

Požadavky

Vytvoření vlastního tématu Event Gridu

Vytvořte téma Event Gridu pro odesílání událostí z Durable Functions. Následující pokyny ukazují, jak vytvořit téma pomocí Azure CLI. Téma můžete vytvořit také pomocí PowerShellu nebo pomocí Azure Portal.

Vytvoření skupiny prostředků

Pomocí příkazu az group create vytvořte skupinu prostředků. Azure Event Grid v současné době nepodporuje všechny oblasti. Informace o podporovaných oblastech najdete v přehledu Azure Event Grid.

az group create --name eventResourceGroup --location westus2

Vytvoření vlastního tématu

Téma Event Gridu poskytuje uživatelem definovaný koncový bod, do kterého událost publikujete. Nahraďte <topic_name> jedinečným názvem vašeho tématu. Název tématu musí být jedinečný, protože se stane položkou DNS.

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

Získání koncového bodu a klíče

Získejte koncový bod tématu. Nahraďte <topic_name> názvem, který jste zvolili.

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

Získejte klíč tématu. Nahraďte <topic_name> názvem, který jste zvolili.

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

Teď můžete do tématu odesílat události.

Konfigurace publikování Event Gridu

V projektu Durable Functions najděte host.json soubor .

Durable Functions 1.x

Přidejte eventGridTopicEndpoint do vlastnosti a durableTaskeventGridKeySettingName .

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

Durable Functions 2.x

notifications Do vlastnosti souboru přidejte oddíl durableTask a nahraďte <topic_name> názvem, který jste zvolili. durableTask Pokud vlastnosti nebo extensions neexistují, vytvořte je jako v tomto příkladu:

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

Možné Azure Event Grid vlastnosti konfigurace najdete v dokumentaci k souboru host.json. Po nakonfigurování host.json souboru odesílá aplikace funkcí události životního cyklu do tématu Event Gridu. Tato akce se spustí spuštěním aplikace funkcí místně i v Azure.

Nastavení aplikace pro klíč tématu v aplikaci funkcí a local.settings.json. Následující kód JSON je ukázka objektu local.settings.json pro místní ladění pomocí emulátoru služby Azure Storage. Nahraďte <topic_key> klíčem tématu.

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

Pokud používáte emulátor úložiště místo skutečného účtu služby Azure Storage, ujistěte se, že je spuštěný. Před spuštěním je vhodné vymazat všechna existující data úložiště.

Pokud používáte skutečný účet služby Azure Storage, nahraďte UseDevelopmentStorage=true in local.settings.json připojovacím řetězcem.

Vytváření funkcí, které naslouchají událostem

Pomocí Azure Portal vytvořte další aplikaci funkcí, která bude naslouchat událostem publikovaným vaší Durable Functions aplikací. Nejlepší je najít ho ve stejné oblasti jako téma Event Gridu.

Vytvoření funkce triggeru Event Gridu

  1. V aplikaci funkcí vyberte Funkce a pak vyberte + Přidat.

    Přidejte funkci do Azure Portal.

  2. Vyhledejte Event Grid a pak vyberte šablonu triggeru Azure Event Grid.

    V Azure Portal vyberte šablonu triggeru Event Gridu.

  3. Pojmenujte nový trigger a pak vyberte Vytvořit funkci.

    V Azure Portal pojmenujte trigger event gridu.

    Vytvoří se funkce s následujícím kódem:

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

Přidání odběru Event Gridu

Teď můžete přidat odběr Event Gridu pro téma Event Gridu, které jste vytvořili. Další informace najdete v tématu Koncepty v Azure Event Grid.

  1. V nové funkci vyberte Integrace a pak trigger Event Gridu (eventGridEvent).

    Vyberte odkaz Trigger Event Gridu.

  2. Vyberte Vytvořit popis Event Gridu.

    Vytvořte odběr Event Gridu.

  3. Pojmenujte svůj odběr události a vyberte typ tématu Témata Event Gridu .

  4. Vyberte předplatné. Pak vyberte skupinu prostředků a prostředek, které jste vytvořili pro téma Event Gridu.

  5. Vyberte Vytvořit.

    Vytvoří odběr Event Gridu.

Teď jste připraveni přijímat události životního cyklu.

Spuštění Durable Functions aplikace pro odesílání událostí

V projektu Durable Functions, který jste nakonfigurovali dříve, spusťte ladění na místním počítači a spusťte orchestraci. Aplikace publikuje události Durable Functions životního cyklu do Event Gridu. Zkontrolujte protokoly v Azure Portal a ověřte, že Event Grid aktivuje funkci naslouchacího procesu, kterou jste vytvořili.

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)

Schéma událostí

Následující seznam vysvětluje schéma událostí životního cyklu:

  • id: Jedinečný identifikátor události Event Gridu.
  • subject: Cesta k předmětu události. durable/orchestrator/{orchestrationRuntimeStatus}. {orchestrationRuntimeStatus}Runningbudou , Completed, Faileda Terminated.
  • data: Durable Functions specifické parametry.
    • hubName: Název taskHubu .
    • functionName: Název funkce orchestratoru.
    • instanceId: Durable Functions instanceId.
    • reason: Další data přidružená k události sledování. Další informace najdete v tématu Diagnostika v Durable Functions (Azure Functions).
    • runtimeStatus: Stav modulu runtime orchestrace. Spuštěno, Dokončeno, Neúspěšné, Zrušeno.
  • eventType: "orchestratorEvent"
  • eventTime: Čas události (UTC).
  • dataVersion: Verze schématu událostí životního cyklu.
  • metadataVersion: Verze metadat.
  • topic: Prostředek tématu Event Gridu.

Místní testování

Pokud chcete testovat místně, přečtěte si téma Místní testování pomocí webové aplikace prohlížeče. Můžete také použít nástroj ngrok , jak je znázorněno v tomto kurzu.

Další kroky