Share via


Durable Functions pubblicazione in Griglia di eventi di Azure

Questo articolo illustra come configurare Durable Functions per pubblicare eventi del ciclo di vita di orchestrazione (ad esempio "creato", "completato" e "non riuscito") in un argomento personalizzato di Griglia di eventi di Azure.

Di seguito sono indicati alcuni scenari in cui questa funzionalità è utile:

  • Scenari DevOps come le distribuzioni Blue/Green: può essere opportuno sapere se sono presenti attività in esecuzione prima di implementare la strategia di distribuzione side-by-side.

  • Supporto di monitoraggio e diagnostica avanzati: è possibile tenere traccia delle informazioni sullo stato dell'orchestrazione in un archivio esterno ottimizzato per le query, ad esempio il database SQL di Azure o Azure Cosmos DB.

  • Attività in background a esecuzione prolungata: se si usa Durable Functions per un'attività in background a esecuzione prolungata, questa funzionalità consente di stabilire lo stato corrente.

Prerequisiti

Creare un argomento personalizzato di Griglia di eventi

Creare un argomento di Griglia di eventi per l'invio di eventi da Funzioni durevoli. Le istruzioni seguenti illustrano come creare un argomento tramite l'interfaccia della riga di comando di Azure. È anche possibile creare l'argomento usando PowerShell o il portale di Azure.

Creare un gruppo di risorse

Creare un gruppo di risorse con il comando az group create. Griglia di eventi di Azure non supporta attualmente tutte le aree. Per informazioni sulle aree supportate, vedere la Panoramica di Griglia di eventi di Azure.

az group create --name eventResourceGroup --location westus2

Creare un argomento personalizzato

Un argomento di Griglia di eventi fornisce un endpoint definito dall'utente in cui vengono pubblicati gli eventi. Sostituire <topic_name> con un nome univoco per l'argomento. Il nome dell'argomento deve essere univoco perché diventa una voce DNS.

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

Ottenere l'endpoint e la chiave

Ottenere l'endpoint dell'argomento. Sostituire <topic_name> con il nome scelto.

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

Ottenere la chiave dell'argomento. Sostituire <topic_name> con il nome scelto.

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

Ora è possibile inviare eventi all'argomento.

Configurare la pubblicazione di Griglia di eventi

Nel progetto Funzioni durevoli trovare il file host.json.

Durable Functions 1.x

Aggiungere eventGridTopicEndpoint e eventGridKeySettingName in una proprietà durableTask.

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

Durable Functions 2.x

Aggiungere una sezione notifications alla proprietà durableTask del file, sostituendo <topic_name> con il nome scelto. Se le proprietà durableTask o extensions non esistono, è necessario crearle come nell'esempio seguente:

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

Le possibili proprietà di configurazione di Griglia di eventi di Azure sono disponibili nella documentazione host.json. Dopo aver configurato il file host.json, l'app per le funzioni invia gli eventi del ciclo di vita all'argomento di Griglia di eventi. Questa azione si avvia quando si esegue l'app per le funzioni sia localmente che in Azure.

Definire l'impostazione dell'app per la chiave dell'argomento nell'app per le funzioni e in local.settings.json. Il codice JSON seguente è un esempio di local.settings.json per il debug locale usando un emulatore di Archiviazione di Azure. Sostituire <topic_key> con la chiave dell'argomento.

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

Se si usa l'emulatore di archiviazione anziché un account di archiviazione di Azure reale, assicurarsi che sia in esecuzione. È consigliabile cancellare tutti i dati di archiviazione esistenti prima dell'esecuzione.

Se si usa un account di archiviazione di Azure reale, sostituire UseDevelopmentStorage=true con local.settings.json la relativa stringa di connessione.

Creare funzioni che ascoltano gli eventi

Usando il portale di Azure, creare un'altra app per le funzioni per rimanere in ascolto degli eventi pubblicati dall'app Durable Functions. È consigliabile crearla nella stessa area dell'argomento di Griglia di eventi.

Creare una funzione di trigger di Griglia di eventi

  1. Selezionare Funzioni nell'app per le funzioni, quindi selezionare + Aggiungi

    Aggiungere una funzione nella portale di Azure.

  2. Cercare Griglia di eventi, quindi selezionare il modello del trigger di Griglia di eventi di Azure.

    Selezionare il modello di trigger di Griglia di eventi nel portale di Azure.

  3. Assegnare un nome al nuovo trigger, quindi selezionare Crea funzione.

    Assegnare un nome al trigger di Griglia di eventi nel portale di Azure.

    Viene creata una funzione con il codice seguente:

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

Aggiungere una sottoscrizione di Griglia di eventi

È ora possibile aggiungere una sottoscrizione di Griglia di eventi per l'argomento di Griglia di eventi creato. Per altre informazioni, vedere Concetti di Griglia di eventi di Azure.

  1. Selezionare Integrazione nella nuova funzione, quindi selezionare Trigger di Griglia di eventi (eventGridEvent) .

    Selezionare il collegamento del trigger di Griglia di eventi.

  2. Selezionare Crea descrizione di Griglia di eventi.

    Creare la sottoscrizione di Griglia di eventi.

  3. Assegnare un nome alla sottoscrizione di eventi e selezionare il tipo di argomento Argomenti di Griglia di eventi.

  4. Selezionare la sottoscrizione. Dopodiché, selezionare il gruppo di risorse e la risorsa creati per l'argomento di Griglia di eventi.

  5. Selezionare Create (Crea).

    Creare una sottoscrizione di Griglia di eventi.

Ora si è pronti a ricevere gli eventi del ciclo di vita.

Eseguire l'app Durable Functions per inviare gli eventi

Avviare il debug nel computer locale, quindi avviare un'orchestrazione nel progetto Durable Functions configurato in precedenza. L'app pubblica eventi del ciclo di vita di Durable Functions in Griglia di eventi. Verificare che Griglia di eventi attivi la funzione di listener creata controllandone i log nel portale di Azure.

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)

Schema di eventi

L'elenco seguente spiega lo schema degli eventi del ciclo di vita:

  • id : identificatore univoco dell'evento di Griglia di eventi.
  • subject : percorso dell'oggetto dell'evento. durable/orchestrator/{orchestrationRuntimeStatus}. {orchestrationRuntimeStatus} saranno Running, Completed, Failed e Terminated.
  • data : parametri specifici di Durable Functions.
    • hubName : nome TaskHub.
    • functionName : Nome della funzione dell'agente di orchestrazione.
    • instanceId : ID istanza di Durable Functions.
    • reason : dati aggiuntivi associati all'evento di rilevamento. Per altre informazioni, vedere Diagnostica in Funzioni durevoli (Funzioni di Azure)
    • runtimeStatus : stato di runtime dell'orchestrazione. Running (In esecuzione), Completed (Completato), Failed (Non riuscito), Canceled (Annullato).
  • eventType : "orchestratorEvent"
  • eventTime : Ora evento (UTC).
  • dataVersion : versione dello schema di eventi del ciclo di vita.
  • metadataVersion: versione dei metadati.
  • topic : Risorsa argomento di Griglia di eventi.

Come eseguire test in locale

Per testare localmente, leggere Test locali con app Web visualizzatore. È anche possibile usare l'utilità ngrok , come illustrato in questa esercitazione.

Passaggi successivi