Publication de Durable Functions sur Azure Event Grid
Cet article explique comment configurer Durable Functions de façon à publier les événements de cycle de vie d’orchestration (tels que créé, terminé et échoué) sur une Rubrique Azure Event Grid personnalisée.
Voici certains scénarios pour lesquels cette fonctionnalité est utile :
Scénarios DevOps, comme les déploiements bleus/verts : vous avez intérêt à savoir si des tâches sont en cours d’exécution avant d’implémenter la stratégie de déploiement côte à côte.
Prise en charge du monitoring et des diagnostics avancés : vous pouvez effectuer le suivi des données sur l’état d’orchestration dans un magasin externe optimisé pour les requêtes, comme Azure SQL Database ou Azure Cosmos DB.
Activité longue en arrière-plan : si vous utilisez Durable Functions pour une activité longue en arrière-plan, cette fonctionnalité vous donne des indications sur l’état actuel.
Prérequis
- Installez Microsoft.Azure.WebJobs.Extensions.DurableTask dans votre projet Durable Functions.
- Installez l’émulateur de stockage Azure ou utilisez un compte Stockage Azure existant.
- Installez Azure CLI ou utilisez Azure Cloud Shell.
Créer une rubrique Event Grid personnalisée
Créez une rubrique Event Grid afin d’envoyer des événements à partir de l’extension Fonctions durables. Les instructions suivantes vous expliquent comment créer une rubrique à l’aide de l’interface Azure CLI. Pour créer la rubrique, vous pouvez également utiliser PowerShell ou utiliser le portail Azure.
Créer un groupe de ressources
Créez un groupe de ressources avec la commande az group create
. Azure Event Grid ne prend pas en charge toutes les régions. Pour plus d’informations sur les régions prises en charge, consultez Vue d’ensemble d’Azure Event Grid.
az group create --name eventResourceGroup --location westus2
Créer une rubrique personnalisée
Une rubrique Event Grid fournit un point de terminaison défini par l’utilisateur vers lequel vous envoyez vos événements. Remplacez <topic_name>
par un nom unique pour votre rubrique. Le nom de la rubrique doit être unique, car il devient une entrée DNS.
az eventgrid topic create --name <topic_name> -l westus2 -g eventResourceGroup
Obtenir le point de terminaison et la clé
Obtenez le point de terminaison de la rubrique. Remplacez <topic_name>
par le nom de votre choix.
az eventgrid topic show --name <topic_name> -g eventResourceGroup --query "endpoint" --output tsv
Obtenez la clé de la rubrique. Remplacez <topic_name>
par le nom de votre choix.
az eventgrid topic key list --name <topic_name> -g eventResourceGroup --query "key1" --output tsv
Vous pouvez maintenant envoyer des événements à la rubrique.
Configurer la publication Event Grid
Dans votre projet Fonctions durables, recherchez le fichier host.json
.
Durable Functions 1.x
Ajoutez eventGridTopicEndpoint
et eventGridKeySettingName
dans une propriété durableTask
.
{
"durableTask": {
"eventGridTopicEndpoint": "https://<topic_name>.westus2-1.eventgrid.azure.net/api/events",
"eventGridKeySettingName": "EventGridKey"
}
}
Durable Functions 2.x
Ajoutez une section notifications
à la propriété durableTask
du fichier, en remplaçant <topic_name>
par le nom de votre choix. Si les propriétés durableTask
ou extensions
n’existent pas, créez-les comme dans l’exemple suivant :
{
"version": "2.0",
"extensions": {
"durableTask": {
"notifications": {
"eventGrid": {
"topicEndpoint": "https://<topic_name>.westus2-1.eventgrid.azure.net/api/events",
"keySettingName": "EventGridKey"
}
}
}
}
}
Les propriétés de configuration d’Azure Event Grid disponibles se trouvent dans la documentation host.json. Une fois le fichier host.json
configuré, votre application de fonction envoie des événements de cycle de vie à la rubrique Event Grid. Cette action démarre quand vous exécutez votre application de fonction tant localement que dans Azure.
Définissez le paramètre d’application pour la clé de rubrique dans l’application Function App et local.settings.json
. Le JSON suivant est un exemple de local.settings.json
pour le débogage local à l’aide d’un émulateur Stockage Azure. Remplacez <topic_key>
par la clé de rubrique.
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"EventGridKey": "<topic_key>"
}
}
Si vous utilisez l’émulateur de stockage au lieu d’un compte de stockage Azure réel, assurez-vous qu’il est en cours d’exécution. Il est recommandé d’effacer toutes les données de stockage existantes avant de l’exécuter.
Si vous utilisez un compte de Stockage Azure réel, remplacez UseDevelopmentStorage=true
dans local.settings.json
par sa chaîne de connexion.
Créer des fonctions qui écoutent les événements
À l’aide du portail Azure, créez une autre application de fonction pour écouter les événements publiés par votre application Durable Functions. Il est préférable de la placer dans la même région que la rubrique Event Grid.
Créer une fonction de déclenchement Event Grid
Dans votre application de fonction, sélectionnez Fonctions, puis + Ajouter.
Recherchez Event Grid, puis sélectionnez le modèle Déclencheur Azure Event Grid.
Nommez le nouveau déclencheur, puis sélectionnez Créer une fonction.
Une fonction présentant le code suivant est créée :
#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)); }
Ajouter un abonnement Event Grid
Vous pouvez à présent ajouter un abonnement Event Grid à la rubrique Event Grid que vous avez créée. Pour plus d’informations, consultez Concepts utilisés dans Azure Event Grid.
Dans votre nouvelle fonction, sélectionnez Intégration, puis Déclencheur Event Grid (eventGridEvent) .
Sélectionnez Créer une description Event Grid.
Nommez votre abonnement aux événements et sélectionnez le type de rubrique Rubriques Event Grid.
Sélectionnez l’abonnement. Sélectionnez ensuite le groupe de ressources créé pour la rubrique Event Grid.
Sélectionnez Create (Créer).
Vous êtes maintenant prêt à recevoir les événements du cycle de vie.
Exécuter une application Durable Functions pour envoyer les événements
Dans le projet Durable Functions que vous avez configuré précédemment, commencez à déboguer sur votre ordinateur local, puis démarrez une orchestration. L’application publie des événements de cycle de vie de Durable Functions sur Event Grid. Vérifiez qu’Event Grid déclenche la fonction d’écouteur que vous avez créée en consultant ses journaux dans le portail 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)
Schéma d’événement
La liste suivante explique le schéma des événements du cycle de vie :
id
: identificateur unique de l’événement Event Grid.subject
: chemin d’accès de l’objet de l’événement.durable/orchestrator/{orchestrationRuntimeStatus}
.{orchestrationRuntimeStatus}
seraRunning
,Completed
,Failed
etTerminated
.data
: paramètres propres à Durable Functions.hubName
: nom du TaskHub.functionName
: nom de la fonction d’orchestrateur.instanceId
: identificateur de l’instance Durable Functions.reason
: données supplémentaires associées à l’événement de suivi. Pour en savoir plus, consultez la section Diagnostics dans Fonctions durables (Azure Functions).runtimeStatus
: état du runtime d’orchestration. Running, Completed, Failed, Canceled. (En cours d’exécution, Terminé, En échec ou Annulé)
eventType
: "orchestratorEvent"eventTime
: heure de l’événement (UTC).dataVersion
: version du schéma d’événement du cycle de vie.metadataVersion
: Version des métadonnées.topic
: ressource de rubrique Event Grid.
Procédure de test local
Pour effectuer des tests locaux, consultez Tests locaux avec une application web de visionneuse.