Publicación de Durable Functions en Azure Event Grid
En este artículo se muestra cómo configurar Durable Functions para publicar eventos de ciclo de vida de orquestación (como los creados, los completados y los que contienen errores) en un tema personalizadoAzure Event Grid.
A continuación se muestran algunos escenarios donde esta característica resulta útil:
Escenarios de DevOps, como las implementaciones Azul/Verde: por si quiere saber si hay tareas en ejecución antes de implementar la estrategia de implementación en paralelo.
Compatibilidad con la supervisión y el diagnóstico avanzados: puede realizar el seguimiento de la información de estado de la orquestación en un almacén externo optimizado para las consultas, como Azure SQL Database o Azure Cosmos DB.
Actividad de ejecución en segundo plano de larga duración: si se utiliza Durable Functions para una actividad de ejecución en segundo plano de larga duración, esta característica le ayuda a conocer el estado actual.
Prerrequisitos
- Instale Microsoft.Azure.WebJobs.Extensions.DurableTask en el proyecto de Durable Functions.
- Instale el emulador de almacenamiento de Azurite o use una cuenta de Azure Storage existente.
- Instale la CLI de Azure o use Azure Cloud Shell.
Creación de un tema de Event Grid personalizado
Cree un tema de Event Grid para enviar eventos desde Durable Functions. Las instrucciones siguientes muestran cómo crear un tema con la CLI de Azure. También puede crear el tema mediante PowerShell o Azure Portal.
Crear un grupo de recursos
Cree un grupo de recursos con el comando az group create
. Actualmente, Azure Event Grid no se admite en todas las regiones. Para información sobre las regiones donde se admite, consulte la introducción a Azure Event Grid.
az group create --name eventResourceGroup --location westus2
Creación de un tema personalizado
Un tema de Event Grid proporciona un punto de conexión definido por el usuario en el que se publicar eventos. Reemplace <topic_name>
por un nombre único para el tema. El nombre del tema debe ser único, ya que se convierte en entrada DNS.
az eventgrid topic create --name <topic_name> -l westus2 -g eventResourceGroup
Obtención del punto de conexión y la clave
Obtenga el punto de conexión del tema. Reemplace <topic_name>
por el nombre que haya elegido.
az eventgrid topic show --name <topic_name> -g eventResourceGroup --query "endpoint" --output tsv
Obtenga la clave del tema. Reemplace <topic_name>
por el nombre que haya elegido.
az eventgrid topic key list --name <topic_name> -g eventResourceGroup --query "key1" --output tsv
Ahora puede enviar eventos al tema.
Configuración de la publicación en Event Grid
En su proyecto de Durable Functions, busque el archivo host.json
.
Durable Functions 1.x
Agregue eventGridTopicEndpoint
y eventGridKeySettingName
en una propiedad durableTask
.
{
"durableTask": {
"eventGridTopicEndpoint": "https://<topic_name>.westus2-1.eventgrid.azure.net/api/events",
"eventGridKeySettingName": "EventGridKey"
}
}
Durable Functions 2.x
Agregue una sección notifications
a la propiedad durableTask
del archivo, reemplazando <topic_name>
por el nombre que eligió. Si las propiedades durableTask
o extensions
no existen, créelas como en este ejemplo:
{
"version": "2.0",
"extensions": {
"durableTask": {
"notifications": {
"eventGrid": {
"topicEndpoint": "https://<topic_name>.westus2-1.eventgrid.azure.net/api/events",
"keySettingName": "EventGridKey"
}
}
}
}
}
Las posibles propiedades de configuración de Azure Event Grid se pueden encontrar en la documentación de host.json. Después de configurar el archivo host.json
, la aplicación de función envía eventos del ciclo de vida al tema de Event Grid. Esta acción empieza cuando se ejecuta la aplicación de funciones tanto localmente como en Azure.
Establezca la configuración de la aplicación para la clave del tema en la aplicación de función y en local.settings.json
. El siguiente JSON es un ejemplo de local.settings.json
para la depuración local mediante un emulador de Azure Storage. Reemplace <topic_key>
por la clave del tema.
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"EventGridKey": "<topic_key>"
}
}
Si usa el emulador de Storage en lugar de una cuenta de Azure Storage real, asegúrese de que se está ejecutando. Es una buena idea borrar los datos de almacenamiento existentes antes de ejecutarlo.
Si utiliza una cuenta de Azure Storage real, reemplace UseDevelopmentStorage=true
en local.settings.json
por su cadena de conexión.
Creación de funciones que realicen escuchas para los eventos
Con Azure Portal, cree otra aplicación de función para escuchar eventos publicados por la aplicación de Durable Functions. Se recomienda ubicarla en la misma región que el tema de Event Grid.
Creación de una función de desencadenador de Event Grid
En la aplicación de funciones, seleccione Funciones y, a continuación, seleccione + Agregar.
Busque Event Grid y, a continuación, seleccione la plantilla Desencadenador de Azure Event Grid.
Asigne un nombre al nuevo desencadenador y, a continuación, seleccione Crear función.
Se creará una función con el código siguiente:
#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)); }
Incorporación de una suscripción de Event Grid
Ya puede agregar una suscripción a Event Grid para el tema de Event Grid que ha creado. Para más información, consulte Conceptos de Azure Event Grid.
En la nueva función, seleccione Integración y, a continuación, seleccione Desencadenador de Event Grid (eventGridEvent) .
Seleccione Crear descripción de Event Grid.
Asigne un nombre a la suscripción de eventos y seleccione el tipo de tema de Temas de Event Grid.
Seleccione la suscripción. A continuación, seleccione el grupo de recursos y el recurso que ha creado para el tema de Event Grid.
Seleccione Crear.
Ahora está preparado para recibir eventos de ciclo de vida.
Ejecución de una aplicación de Durable Functions para enviar eventos
En el proyecto de Durable Functions que configuró anteriormente, inicie la depuración en la máquina local e inicie una orquestación. La aplicación los eventos de publica de ciclo de vida de Durable Functions en Event Grid. Compruebe que Event Grid desencadena la función de cliente de escucha que ha creado comprobando sus registros en 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)
Esquema de eventos
En la lista siguiente se explica el esquema de los eventos de ciclo de vida:
id
: identificador único del evento de Event Grid.subject
: ruta de acceso al asunto del evento.durable/orchestrator/{orchestrationRuntimeStatus}
.{orchestrationRuntimeStatus}
seráRunning
,Completed
,Failed
yTerminated
.data
: parámetros específicos de Durable Functions.hubName
: nombre de TaskHub.functionName
: nombre de una función de orquestador.instanceId
: instanceId de Durable Functions.reason
: información adicional asociada al evento de seguimiento. Para más información, consulte Diagnóstico con Durable Functions (Azure Functions)runtimeStatus
: estado del entorno en tiempo de ejecución de la orquestación. Running, Completed, Failed, Canceled.
eventType
: "orchestratorEvent"eventTime
: hora del evento (UTC).dataVersion
: versión del esquema de los eventos de ciclo de vida.metadataVersion
: versión de los metadatos.topic
: recurso de tema de Event Grid.
Prueba local
Para realizar las pruebas locales, lea Pruebas locales con la aplicación web de visor.