Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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
Projet Durable Functions déployé sur Azure. Si vous n’en avez pas, créez-en un à l’aide du guide de démarrage rapide pour votre langue préférée :
Version correcte de l’extension Durable Functions. Pour .NET, mettez à jour votre extension vers la dernière version :
2.7.0+ (en cours)
dotnet add package Microsoft.Azure.WebJobs.Extensions.DurableTask1.1.0+ (worker isolé)
dotnet add package Microsoft.Azure.Functions.Worker.Extensions.DurableTask
Pour d’autres langues, vérifiez votre
package.json,requirements.txt,pom.xmlourequirements.psd1.Identité managée activée et configurée sur votre application de fonction.
Un fournisseur de stockage en cours d’exécution ou l’émulateur de stockage Azurite local.
Outil de test HTTP qui sécurise vos données.
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
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.EventGridL’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
registrationStateestRegistered, 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.
Configurer la publication Event Grid avec Managed Identity (recommandé)
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 surmanagedidentity. -
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 :
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.
Dans le portail Azure, vérifiez les paramètres de votre application sous Settings>Environment variables incluez
EventGrid__topicEndpointet (si vous utilisez l’identité managée)EventGrid__credential.Déclenchez une orchestration à l’aide d’un client HTTP :
curl -X POST https://<function_app_name>.azurewebsites.net/api/HelloOrchestration_HttpStartDans 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/Runningetdurable/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__topicEndpointdoit pointer vers votre point de terminaison de sujet personnalisé -
EventGrid__credentialdoit être défini surmanagedidentity -
EventGrid__clientIddoit ê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 azurefunctionavec 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>
- Pour Azure Functions, utilisez
- 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 :
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>Supprimez la rubrique Event Grid :
az eventgrid topic delete --name <topic-name> --resource-group <resource-group-name>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>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 :