Partager via


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

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

  1. Dans votre application de fonction, sélectionnez Fonctions, puis + Ajouter.

    Ajouter une fonction dans le portail Azure.

  2. Recherchez Event Grid, puis sélectionnez le modèle Déclencheur Azure Event Grid.

    Sélectionnez le modèle de déclencheur Event Grid sur le Portail Azure.

  3. Nommez le nouveau déclencheur, puis sélectionnez Créer une fonction.

    Nommez le déclencheur Event Grid sur le Portail Azure.

    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.

  1. Dans votre nouvelle fonction, sélectionnez Intégration, puis Déclencheur Event Grid (eventGridEvent) .

    Sélectionnez le lien du déclencheur Event Grid.

  2. Sélectionnez Créer une description Event Grid.

    Créez l’abonnement Event Grid.

  3. Nommez votre abonnement aux événements et sélectionnez le type de rubrique Rubriques Event Grid.

  4. Sélectionnez l’abonnement. Sélectionnez ensuite le groupe de ressources créé pour la rubrique Event Grid.

  5. Sélectionnez Create (Créer).

    Créer un abonnement Event Grid.

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} sera Running, Completed, Failed et Terminated.
  • 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.

Étapes suivantes