Partager via


Didacticiel : router les messages MQTT dans Azure Event Grid vers Azure Functions en utilisant les rubriques personnalisées - Azure CLI

Dans ce didacticiel, vous apprenez à router les messages MQTT reçus par un espace de noms Azure Event Grid vers une fonction Azure via une rubrique personnalisée Event Grid, en procédant comme suit :

Si vous n’en avez pas, vous pouvez demander un essai gratuit.

Prérequis

Suivez les instructions de Créer une fonction Azure en utilisant Visual Studio Code, mais utilisez le Déclencheur Azure Event Grid au lieu d’utiliser le Déclencheur HTTP. Vous devez obtenir un code similaire à l’exemple suivant :

using System;
using Azure.Messaging;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;

namespace Company.Function
{
    public class MyEventGridTriggerFunc
    {
        private readonly ILogger<MyEventGridTriggerFunc> _logger;

        public MyEventGridTriggerFunc(ILogger<MyEventGridTriggerFunc> logger)
        {
            _logger = logger;
        }

        [Function(nameof(MyEventGridTriggerFunc))]
        public void Run([EventGridTrigger] CloudEvent cloudEvent)
        {
            _logger.LogInformation("Event type: {type}, Event subject: {subject}", cloudEvent.Type, cloudEvent.Subject);
        }
    }
}

Vous utilisez cette fonction Azure comme gestionnaire d’évènements pour l’abonnement d’une rubrique, plus loin dans ce didacticiel.

Remarque

  • Créer l’ensemble des ressources dans la même région.
  • Ce didacticiel a été testé avec une fonction Azure qui utilise la pile d’exécution .NET 8.0 (isolé).

Créer une rubrique Event Grid (rubrique personnalisée)

Dans cette étape, vous créez une rubrique Event Grid.

  1. Copiez et collez le script dans un éditeur.
  2. Remplacez les valeurs suivantes.
  3. Sélectionnez Ouvrir Cloud Shell.
  4. Passez de PowerShell à Bash (en haut à gauche de la fenêtre Cloud Shell).
  5. Copiez et collez le script depuis l’éditeur vers Cloud Shell et exécutez le script.

Le script crée un groupe de ressources Azure et une rubrique personnalisée Event Grid dans celle-ci. Plus loin dans ce didacticiel, vous configurez le routage pour un espace de noms Event Grid afin que les évènements ou les messages envoyés à l’espace de noms soient routés vers la rubrique personnalisée, puis vers la fonction Azure via l’abonnement à la rubrique.

Espace réservé Description
RESOURCEGROUPNAME Nom du groupe de ressources à créer.
REGION Région dans laquelle vous souhaitez créer le groupe de ressources et la rubrique personnalisée.
TOPICNAME Nom de la rubrique personnalisée à créer.

Le script utilise la commande az eventgrid topic create pour créer une rubrique Event Grid ou une rubrique personnalisée. Le type de schéma est spécifié comme schéma d’évènement cloud.

rgName="RESOURCEGROUPNAME"
location="REGION"
topicName="TOPICNAME"

az group create -n $rgName -l $location

az eventgrid topic create --name $topicName -l $location -g $rgName --input-schema cloudeventschemav1_0

Remarque

Utilisez le schéma d’évènement cloud partout dans ce didacticiel.

Ajouter un abonnement à la rubrique en utilisant la fonction

Dans cette étape, vous créez un abonnement à la rubrique personnalisée en utilisant la fonction Azure que vous avez créée précédemment.

Remplacez les valeurs suivantes et exécutez le script dans Cloud Shell. Le script utilise la commande az eventgrid event-subscription create pour créer un abonnement de fonction Azure à la rubrique personnalisée. Dans la commande, l’ID source est l’ID de ressource de la rubrique et le point de terminaison est l’ID de ressource de la fonction. Le type de point de terminaison est défini sur fonction Azure et le schéma de livraison d’évènement est spécifié comme schéma d’évènement cloud.

Espace réservé Description
FUNCTIONRESOURCEGROUP Nom du groupe de ressources qui a l’application Azure Functions.
FUNCTIONSAPPNAME Nom de l’application Azure Functions.
FUNCTIONNAME Nom de la fonction Azure.
funcAppRgName="FUNCTIONRESOURCEGROUP"
funcAppName="FUNCTIONSAPPNAME"
funcName="FUNCTIONNAME"
funcResourceId=$(az functionapp function show -g $funcAppRgName -n $funcAppName --function-name $funcName --query "{I:id}" -o tsv)

topicResourceId=$(az eventgrid topic show --name $topicName -g $rgName --query id --output tsv)
eventSubscriptionName="EVENTSUBSCRIPTIONNAME"
az eventgrid event-subscription create --name $eventSubscriptionName --source-resource-id $topicResourceId  --endpoint-type azurefunction --endpoint $funcResourceId --event-delivery-schema cloudeventschemav1_0

Créer des liaisons d’espace de noms, de clients, d’espaces de rubrique et d’autorisation

Suivez les instructions de Démarrage rapide : publier et s’abonner à des messages MQTT sur un espace de noms Event Grid avec Azure CLI pour :

  1. Créez un espace de noms Event Grid.
  2. Créer deux clients.
  3. Créer un espace de rubrique.
  4. Créez des liaisons d’autorisations éditeur et abonné.
  5. Testez l’utilisation de l’application MQTTX pour confirmer que les clients sont en mesure d’envoyer et de recevoir des messages.

Activer une identité managée pour l’espace de noms

Remplacez la valeur suivante et exécutez le script pour activer l’identité managée affectée par le système pour l’espace de noms Event Grid.

Espace réservé Description
EVENTGRIDNAMESPACENAME Nom de l’espace de noms Event Grid.

Le script utilise la commande az eventgrid namespace update avec identity défini sur identité SystemAssigned.

nsName="EVENTGRIDNAMESPACENAME"
az eventgrid namespace update -g $rgName -n $nsName --topic-spaces-configuration "{state:Enabled}" --identity "{type:SystemAssigned}"

Ensuite, accordez à l’identité managée de l’espace de noms l’autorisation envoi sur la rubrique personnalisée Event Grid que vous avez créée précédemment, afin que l’espace de noms puisse envoyer ou router des messages vers la rubrique personnalisée. Pour ce faire, ajoutez l’identité managée au rôle Expéditeur de données Event Grid dans la rubrique personnalisée.

egNamespaceServicePrincipalObjectID=$(az ad sp list --display-name $nsName --query [].id -o tsv)
topicResourceId=$(az eventgrid topic show --name $topicName -g $rgName --query id --output tsv)
az role assignment create --assignee $egNamespaceServicePrincipalObjectID --role "EventGrid Data Sender" --scope $topicResourceId

Le script utilise la commande az role assignment create avec les ID de l’identité managée de l’espace de noms et la rubrique personnalisée, et affecte le rôleExpéditeur de données Event Grid à l’identité managée de l’espace de noms sur la rubrique personnalisée.

Configurer le routage des messages vers la fonction Azure via une rubrique personnalisée

Dans cette étape, vous configurez le routage de l’espace de noms Event Grid afin que les messages qu’il reçoit soient routés vers la rubrique personnalisée que vous avez créée.

az eventgrid namespace update -g $rgName -n $nsName --topic-spaces-configuration "{state:Enabled,'routeTopicResourceId':$topicResourceId,'routingIdentityInfo':{type:SystemAssigned}}"

Le script utilise la commande az eventgrid namespace update pour définir la rubrique de routage et le type d’identité managée à utiliser pour router les évènements vers la rubrique.

Envoyer des messages MQTT de test en utilisant MQTTX

Envoyez des messages MQTT de test à l’espace de noms et vérifiez que la fonction les reçoit.

Suivez les instructions de l’article Publier et s’abonner à des messages en utilisant l’application MQTTX pour envoyer quelques messages de test à l’espace de noms Event Grid.

Voici le flux des évènements ou des messages :

  1. MQTTX envoie des messages à l’espace de la rubrique de l’espace de noms Event Grid.

  2. Les messages sont routés vers la rubrique personnalisée que vous avez configurée.

  3. Les messages sont transférés à l’abonnement à l’évènement, qui est la fonction Azure.

  4. Utilisez la fonctionnalité de journalisation pour vérifier que la fonction a reçu l’évènement.

    Capture d’écran qui montre la page du flux de journalisation d’une fonction Azure.

Étape suivante

Consultez des exemples de code dans ce référentiel GitHub.