Publikování Durable Functions do Azure Event Gridu

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

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

  • Scénáře DevOps, jako jsou modrá nebo zelená nasazení: Před implementací strategie nasazení vedle sebe můžete chtít vědět, jestli některé úlohy běží.

  • 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 dlouho běžící aktivitu na pozadí, tato funkce vám pomůže 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 webu Azure Portal.

Vytvoření skupiny zdrojů

Skupinu prostředků vytvoříte příkazem az group create. Azure Event Grid v současné době nepodporuje všechny oblasti. Informace o podporovaných oblastech najdete v přehledu služby 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 vyhledejte host.json soubor.

Durable Functions 1.x

Přidejte a eventGridKeySettingName vložte durableTask eventGridTopicEndpoint vlastnost.

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

Durable Functions 2.x

notifications Přidejte do vlastnosti souboru oddíl durableTask a nahraďte <topic_name> ho názvem, který jste zvolili. durableTask Pokud neexistují nebo extensions vlastnosti 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é vlastnosti konfigurace služby Azure Event Grid najdete v host.json dokumentaci. Po nakonfigurování host.json souboru aplikace funkcí odesílá události životního cyklu do tématu Event Gridu. Tato akce se spustí při místním spuštění aplikace funkcí i v Azure.

Nastavte nastavení aplikace pro klíč tématu v aplikaci funkcí a local.settings.json. Následující JSON je ukázka local.settings.json místního 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 azure Storage, nahraďte UseDevelopmentStorage=true local.settings.json ho jeho připojovací řetězec.

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

Pomocí webu Azure Portal vytvořte další aplikaci funkcí, která bude naslouchat událostem publikovaným vaší aplikací Durable Functions. Nejlepší je ji najít 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 na webu Azure Portal.

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

    Na webu Azure Portal vyberte šablonu triggeru Event Gridu.

  3. Pojmenujte novou aktivační událost a pak vyberte Vytvořit funkci.

    Na webu 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 ve službě Azure Event Grid.

  1. V nové funkci vyberte Integration (Integrace) a pak vyberte Event Grid Trigger (eventGridEvent).

    Vyberte odkaz triggeru event gridu.

  2. Vyberte Vytvořit popis event Gridu.

    Vytvořte odběr Event Gridu.

  3. Pojmenujte své odběry událostí 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í aplikace Durable Functions 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 životního cyklu Durable Functions do Event Gridu. Ověřte, že Event Grid aktivuje funkci naslouchacího procesu, kterou jste vytvořili, tím, že zkontroluje protokoly na webu 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)

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}bude Running, , CompletedFaileda Terminated.
  • data: Durable Functions Specific Parameters.
    • 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.

Jak testovat místně

Pokud chcete testovat místně, přečtěte si místní testování pomocí webové aplikace prohlížeče.

Další kroky