Pubblicazione di Durable Functions in Griglia di eventi di Azure
Questo articolo illustra come configurare Durable Functions per pubblicare eventi del ciclo di vita dell'orchestrazione(ad esempio, creati, completati e non riusciti) 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 avanzato di monitoraggio e diagnostica: è possibile tenere traccia delle informazioni sullo stato dell'orchestrazione in un archivio esterno ottimizzato per le query, ad esempio database SQL di Azure o Azure Cosmos DB.
Attività in background a esecuzione prolungata: se si usa Funzioni durevoli per un'attività in background a esecuzione prolungata, questa funzionalità consente di stabilire lo stato corrente.
Prerequisiti
- Installare Microsoft.Azure.WebJobs.Extensions.DurableTask nel progetto Durable Functions.
- Installare l'emulatore di archiviazione Azurite o usare un account di Archiviazione di Azure esistente.
- Installare l'interfaccia della riga di comando di Azure oppure usare Azure Cloud Shell
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 per il local.settings.json
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 Archiviazione anziché un account Archiviazione di Azure reale, assicurarsi che sia in esecuzione. È consigliabile cancellare i dati di archiviazione esistenti prima dell'esecuzione.
Se si usa un account Archiviazione di Azure reale, sostituire UseDevelopmentStorage=true
con local.settings.json
il relativo 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
Selezionare Funzioni nell'app per le funzioni, quindi selezionare + Aggiungi
Cercare Griglia di eventi, quindi selezionare il modello del trigger di Griglia di eventi di Azure.
Assegnare un nome al nuovo trigger, quindi selezionare Crea funzione.
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.
Selezionare Integrazione nella nuova funzione, quindi selezionare Trigger di Griglia di eventi (eventGridEvent).
Selezionare Crea descrizione di Griglia di eventi.
Assegnare un nome alla sottoscrizione di eventi e selezionare il tipo di argomento Argomenti di Griglia di eventi.
Selezionare la sottoscrizione. Dopodiché, selezionare il gruppo di risorse e la risorsa creati per l'argomento di Griglia di eventi.
Seleziona Crea.
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 per l'evento di Griglia di eventi.subject
: percorso dell'oggetto dell'evento.durable/orchestrator/{orchestrationRuntimeStatus}
.{orchestrationRuntimeStatus}
sarannoRunning
,Completed
,Failed
eTerminated
.data
: parametri specifici di Durable Functions.hubName
: nome di TaskHub .functionName
: nome della funzione dell'agente di orchestrazione.instanceId
: Durable Functions instanceId.reason
: dati aggiuntivi associati all'evento di rilevamento. Per altre informazioni, vedere Diagnostica in Funzioni durevoli (Funzioni di Azure)runtimeStatus
: stato del runtime di orchestrazione. Running (In esecuzione), Completed (Completato), Failed (Non riuscito), Canceled (Annullato).
eventType
: "orchestratorEvent"eventTime
: ora dell'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 eseguire il test in locale, leggere Test locali con l'app Web visualizzatore.