Configurer la publication Durable Functions sur Azure Event Grid

La publication d’événements de cycle de vie d’orchestration sur Azure Event Grid permet l’automatisation DevOps (par exemple, les déploiements bleus/verts), les tableaux de bord de surveillance en temps réel et le suivi des processus en arrière-plan longs.

Note

Ce guide utilise .NET exemples, mais les concepts et les commandes Azure CLI s’appliquent à tous les langages de Durable Functions pris en charge.

Conseil / Astuce

Si vous avez déjà configuré une rubrique personnalisée Event Grid et une identité managée, passez à Configurer l’application d’éditeur de Durable Functions.

Prerequisites

Créer une rubrique Event Grid personnalisée

Vous pouvez créer une rubrique Event Grid pour l’envoi d’événements à partir de Durable Functions à l’aide de the Azure CLI, PowerShell ou le portail Azure.

Ce guide utilise le Azure CLI.

Créer un groupe de ressources

Créez un groupe de ressources avec la commande az group create. Choisissez un emplacement qui prend en charge Event Grid et correspond à l’emplacement où vous souhaitez déployer vos ressources.

Note

Actuellement, Azure Event Grid ne prend pas en charge toutes les régions. Pour plus d’informations sur les régions prises en charge, consultez la vue d’ensemble d’Azure Event Grid.

az group create --name <resource-group-name> --location <location>

Activer le fournisseur de ressources Event Grid

  1. Si c’est la première fois que vous utilisez Event Grid dans votre abonnement Azure, vous devrez peut-être inscrire le fournisseur de ressources Event Grid. Exécutez la commande suivante pour enregistrer le fournisseur :

    az provider register --namespace Microsoft.EventGrid
    
  2. L’inscription peut prendre un certain temps. Pour vérifier l'état, exécutez la commande suivante :

    az provider show --namespace Microsoft.EventGrid --query "registrationState"
    

    Lorsque registrationState est Registered, vous êtes prêt à continuer.

Créer une rubrique personnalisée

Une rubrique Event Grid fournit un point de terminaison défini par l’utilisateur vers lequel vous publiez votre événement. Remplacez <topic-name> la commande suivante 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> --location <location> --resource-group <resource-group-name>

Obtenir le point de terminaison de la rubrique

Obtenez le point de terminaison du sujet. Dans les commandes suivantes, remplacez <topic-name> par le nom que vous avez choisi.

az eventgrid topic show --name <topic-name> --resource-group <resource-group-name> --query "endpoint" --output tsv

Enregistrez ce point de terminaison ultérieurement.

Les identités managées dans Azure permettent aux ressources de s’authentifier auprès des services Azure sans stocker d’informations d’identification, ce qui simplifie la sécurité et la gestion des identités. Affectez l’identité managée associée à votre application Durable Function à votre rubrique personnalisée Event Grid.

Configurer l’application éditeur Durable Functions

Bien que votre application Durable Functions publie automatiquement des événements de cycle de vie d’orchestration dans Event Grid, vous devez configurer les paramètres de connexion. Ajoutez ce qui suit à la extensions.durableTask section de votre host.json:

{
  "version": "2.0",
  "extensions": {
    "durableTask": {
      "eventGridTopicEndpoint": "%EventGrid__topicEndpoint%",
      "eventGridKeySettingName": "EventGrid__credential"
    }
  }
}

Note

Le eventGridTopicEndpoint paramètre fait référence au point de terminaison de rubrique personnalisé Event Grid que vous avez enregistré précédemment. Le paramètre d’informations d’identification gère les scénarios d’identité managée et de chaîne de connexion.

Attribuer le rôle Expéditeur de données Event Grid

Accordez à votre identité managée l’autorisation de publier des événements dans la rubrique Event Grid.

az role assignment create \
  --assignee <client-id-of-managed-identity> \
  --assignee-principal-type ServicePrincipal \
  --role "EventGrid Data Sender" \
  --scope /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.EventGrid/topics/<topic-name>

Remplacez les valeurs suivantes :

  • <client-id-of-managed-identity>: ID client de votre identité managée assignée par l'utilisateur
  • <subscription-id>: VOTRE ID d’abonnement Azure
  • <resource-group-name>: nom du groupe de ressources contenant votre rubrique Event Grid
  • <topic-name>: Nom de votre rubrique Event Grid

Note

Les attributions de rôle peuvent prendre 5 à 10 minutes pour se propager. Vous pouvez voir des erreurs d’authentification si vous continuez immédiatement après l’affectation.

Configuration des paramètres d’application

Une fois que vous avez activé l'identité managée pour votre application de fonction et rubrique, configurez les paramètres de l'application Event Grid sur votre application de fonction Durable Functions.

Ajoutez les paramètres d’application suivants :

  • EventGrid__topicEndpoint — point de terminaison de la rubrique Event Grid.
  • EventGrid__credential — défini sur managedidentity.
  • EventGrid__clientId — ID client d’identité managée affecté par l’utilisateur.
az functionapp config appsettings set --name <function app name> --resource-group <resource group name> --settings EventGrid__topicEndpoint="<topic endpoint>" EventGrid__credential="managedidentity" EventGrid__clientId="<client id>"

S’abonner à des événements

Pour recevoir les événements de cycle de vie publiés, créez un abonnement Event Grid qui route les événements de votre rubrique personnalisée vers un abonné. Les types d’abonnés courants incluent Azure Functions (avec un déclencheur Event Grid), Logic Apps et des webhooks.

L’exemple suivant crée une application de fonction d’abonné avec un déclencheur Event Grid à l’aide de la Azure CLI. Si vous disposez déjà d’un abonné, passez à créer un abonnement Event Grid.

Créer une application de fonction d’écouteur

Créez une application de fonction pour héberger le déclencheur Event Grid. L’écouteur doit se trouver dans la même région que la rubrique Event Grid.

# Create a resource group
az group create --name <listener-resource-group-name> --location <location>

# Create a storage account
az storage account create \
  --name <storage-account-name> \
  --resource-group <listener-resource-group-name> \
  --location <location> \
  --sku Standard_LRS \
  --allow-blob-public-access false

# Create the function app
az functionapp create \
  --resource-group <listener-resource-group-name> \
  --consumption-plan-location <location> \
  --runtime <preferred-runtime> \
  --functions-version 4 \
  --name <listener-function-app-name> \
  --storage-account <storage-account-name>

Créer et déployer une fonction de déclencheur Event Grid

Structurer un projet local, ajouter un déclencheur Event Grid et le publier :

mkdir EventGridListenerFunction && cd EventGridListenerFunction
func init --name EventGridListener --runtime dotnet-isolated
func new --template "Event Grid trigger" --name EventGridTrigger
func azure functionapp publish <listener-function-app-name>

Note

Remplacez dotnet-isolated par votre runtime préféré (node, , pythonou javapowershell). Pour obtenir des instructions de déploiement détaillées, consultez Publish vers Azure.

Créer un abonnement Event Grid

Créez l’abonnement en utilisant le type de point de terminaison azurefunction, qui gère automatiquement la validation des webhooks :

az eventgrid event-subscription create \
  --name <subscription-name> \
  --source-resource-id /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.EventGrid/topics/<topic-name> \
  --endpoint /subscriptions/<subscription-id>/resourceGroups/<listener-resource-group-name>/providers/Microsoft.Web/sites/<listener-function-app-name>/functions/EventGridTrigger \
  --endpoint-type azurefunction

Conseil / Astuce

L’utilisation --endpoint-type azurefunction avec l’ID de ressource de la fonction est l’approche recommandée. Il gère automatiquement la validation du webhook et est plus fiable que l’utilisation --endpoint-type webhook avec une URL.

Schéma d’événement

Lorsqu’un état d’orchestration change, le runtime Durable Functions publie un événement avec la structure suivante. Les événements sont générés automatiquement pour chaque transition d’état : vous n’avez pas besoin d’ajouter de code.

Champ Description
id Identificateur unique de l’événement Event Grid.
subject durable/orchestrator/{orchestrationRuntimeStatus}— l’état peut être Running, Completedou FailedTerminated.
eventType A toujours la valeur orchestratorEvent.
eventTime Heure d’événement (UTC).
data.hubName Nom de TaskHub .
data.functionName Nom de la fonction Orchestrator.
data.instanceId ID d’instance d’orchestration unique.
data.runtimeStatus Running, Completed, Failed ou Canceled.
data.reason Données de suivi supplémentaires. Pour plus d’informations, consultez Les diagnostics dans Durable Functions.

Event Grid garantit une livraison au moins une fois, donc vous pouvez recevoir des événements en double dans de rares cas d’échec. Envisagez d’ajouter une logique de déduplication à l’aide du instanceId cas échéant.

Vérifier la livraison des événements

Pour vérifier la configuration de bout en bout, déployez votre application Durable Functions et déclenchez une orchestration :

  1. Publier le code de fonction dans Azure et vérifier que votre application de fonction affiche « En cours d’exécution » dans le portail Azure.

  2. Dans le portail Azure, vérifiez les paramètres de votre application sous Settings>Environment variables incluez EventGrid__topicEndpoint et (si vous utilisez l’identité managée) EventGrid__credential.

  3. Déclenchez une orchestration à l’aide d’un client HTTP :

    curl -X POST https://<function_app_name>.azurewebsites.net/api/HelloOrchestration_HttpStart
    
  4. Dans le portail Azure, accédez à votre application de fonction listener>EventGridTrigger>Monitor pour afficher les événements reçus. Vous devriez voir des événements avec des sujets comme durable/orchestrator/Running et durable/orchestrator/Completed.

Vérifier dans Application Insights (facultatif)

Pour une vue plus complète, exécutez cette requête KQL dans les journaux d'Application Insights de votre application fonctionnelle :

traces
| where message contains "Event type" or message contains "Event subject"
| project timestamp, message
| order by timestamp desc

Résolution des problèmes

Les événements ne sont pas publiés dans Event Grid

Problème : la fonction d’écouteur ne reçoit pas d’événements.

Solutions :

  • Vérifiez que l’application de fonction Durable Functions a les paramètres d’application appropriés :
    • EventGrid__topicEndpoint doit pointer vers votre point de terminaison de sujet personnalisé
    • EventGrid__credential doit être défini sur managedidentity
    • EventGrid__clientId doit être défini si vous utilisez une identité affectée par l’utilisateur
  • Vérifiez que l’identité managée a le rôle Expéditeur de données EventGrid affecté à la rubrique personnalisée Event Grid.
  • Vérifiez les journaux d’activité de l’application de fonction Durable Functions dans Application Insights pour connaître les erreurs.
  • Vérifiez que la rubrique Event Grid existe et qu’elle est accessible dans le même abonnement.

La fonction d’écouteur n’est pas déclenchée

Problème : la fonction d’écouteur existe, mais n’est pas en cours d’exécution lorsque les événements sont publiés.

Solutions :

  • Vérifiez que l’abonnement Event Grid a été créé et est activé :
    • Dans le portail Azure, accédez à votre rubrique Event Grid → Subscriptions
    • Vérifiez que l’abonnement de votre fonction d’écouteur est répertorié avec l’état Activé
  • Vérifiez que l’abonnement Event Grid utilise le type de point de terminaison approprié :
    • Pour Azure Functions, utilisez --endpoint-type azurefunction avec l'ID de ressource de la fonction
    • Si vous avez utilisé --endpoint-type webhook, vérifiez que l’URL du webhook est au format correct : https://<function-app>.azurewebsites.net/runtime/webhooks/eventgrid?functionName=<function-name>&code=<system-key>
  • Vérifiez les journaux de l’application de la fonction d’écouteur pour identifier les erreurs ou les problèmes de remise.
  • Dans la rubrique Event Grid → Métriques, recherchez les événements abandonnés qui peuvent indiquer des défaillances de remise.

Erreurs de type « Interdit » ou erreurs d’authentification dans les journaux

Problème : erreurs d’authentification lors de la publication sur Event Grid.

Solutions :

  • Vérifiez que l’identité managée est correctement configurée et activée sur l’application de fonction Durable Functions :
    • Dans le portail Azure, accédez à votre application de fonction → Identity
    • Confirmer que l'état indique Activé pour l'identité assignée par le système ou assignée par l'utilisateur
  • Vérifiez que l’attribution de rôle est correcte :
    • Accédez à votre rubrique Event Grid → Access Control (IAM)
    • Vérifiez que votre identité managée a le rôle Expéditeur de données EventGrid (remarque : aucun espace entre « Event » et « Grid »)
    • L’attribution de rôle peut prendre 5 à 10 minutes pour se propager

Erreurs « Connexion refusée » ou « point de terminaison introuvable »

Problème : Erreurs de connexion à la rubrique Event Grid.

Solutions :

  • Vérifiez que le point de terminaison de rubrique Event Grid dans les paramètres de votre application est correct et inclut l’URL complète (par exemple, https://my-topic.eventgrid.azure.net/api/events)
  • Vérifiez que la ressource de rubrique Event Grid existe dans le même abonnement et la même région
  • Vérifiez que votre application Durable Functions dispose d’un accès réseau au point de terminaison Event Grid

Tester localement

Pour tester localement, consultez Test local avec l’application web visionneuse. Lorsque vous effectuez des tests localement avec une identité managée, utilisez vos informations d’identification de développeur pour vous authentifier auprès de la rubrique Event Grid. Pour plus d’informations, consultez Configurer Durable Functions avec une identité managée - Développement local.

Nettoyer les ressources

Si vous ne souhaitez pas continuer à utiliser les ressources créées dans ce tutoriel, supprimez-les pour éviter les frais.

Supprimer les groupes de ressources

Supprimez les groupes de ressources et toutes leurs ressources contenues :

az group delete --name <resource-group-name> --yes
az group delete --name <listener-resource-group-name> --yes

Supprimer des ressources individuelles

Si vous souhaitez conserver certaines ressources, vous pouvez les supprimer individuellement :

  1. Supprimez l’abonnement Event Grid :

    az eventgrid event-subscription delete \
      --name <subscription-name> \
      --source-resource-id /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.EventGrid/topics/<topic-name>
    
  2. Supprimez la rubrique Event Grid :

    az eventgrid topic delete --name <topic-name> --resource-group <resource-group-name>
    
  3. Supprimez les applications de fonction :

    az functionapp delete --name <publisher-function-app-name> --resource-group <resource-group-name>
    az functionapp delete --name <listener-function-app-name> --resource-group <listener-resource-group-name>
    
  4. Supprimez les comptes de stockage :

    az storage account delete --name <storage-account-name> --resource-group <resource-group-name> --yes
    az storage account delete --name <listener-storage-account-name> --resource-group <listener-resource-group-name> --yes
    

Étapes suivantes

Pour en savoir plus :