Share via


Tutorial: Enrutamiento de mensajes MQTT en Azure Event Grid a Azure Functions mediante temas personalizados: CLI de Azure

En este tutorial, descubrirás cómo enrutar los mensajes MQTT recibidos por un espacio de nombres de Azure Event Grid a una función de Azure mediante un tema personalizado de Event Grid siguiendo estos pasos:

Si no tiene ninguna suscripción de Azure, puede registrarse para obtener una evaluación gratuita.

Requisitos previos

Sigue las instrucciones de Creación de una función de Azure mediante Visual Studio Code, pero usa el Desencadenador de Azure Event Grid en lugar de usar el Desencadenador de HTTP. Deberías ver un código similar al ejemplo siguiente:

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);
        }
    }
}

Esta función de Azure se usa como controlador de eventos para la suscripción de un tema más adelante en este tutorial.

Nota:

  • Crea todos los recursos en la misma región.
  • Este tutorial se ha probado con una función de Azure que usa la pila en tiempo de ejecución de .NET 8.0 (aislado).

Creación de un tema de Event Grid (tema personalizado)

En este paso, crearás un tema de Event Grid.

  1. Copia y pega el script en un editor.
  2. Reemplaza los siguientes valores.
  3. Selecciona Abrir Cloud Shell.
  4. Cambia de PowerShell a Bash (en la esquina superior izquierda de la ventana de Cloud Shell).
  5. Copia y pega el script del editor en Cloud Shell y ejecuta el script.

El script crea un grupo de recursos de Azure y un tema personalizado de Event Grid en él. Más adelante en este tutorial, configurarás el enrutamiento de un espacio de nombres de Event Grid para que los eventos o mensajes enviados al espacio de nombres se enruten al tema personalizado y, después, a la función de Azure mediante la suscripción al tema.

Marcador de posición Descripción
RESOURCEGROUPNAME Nombre del grupo de recursos que se va a crear.
REGION Región en la que quieres crear el grupo de recursos y el tema personalizado.
TOPICNAME Nombre del tema personalizado que se va a crear.

El script usa el comando az eventgrid topic create para crear un tema de Event Grid o uno personalizado. El tipo de esquema se especifica como esquema de eventos en la nube.

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

Nota:

Usa el Esquema de eventos en la nube para todo este tutorial.

Incorporación de una suscripción al tema mediante la función

En este paso, crearás una suscripción al tema personalizado mediante la función de Azure que creaste anteriormente.

Reemplaza los valores siguientes y ejecuta el script en Cloud Shell. El script usa el comando az eventgrid event-subscription create para crear una suscripción de función de Azure al tema personalizado. En el comando, el id. de origen es el id. de recurso del tema y el punto de conexión es el id. de recurso de la función. El tipo de punto de conexión se establece en la función de Azure y el esquema de entrega de eventos se especifica como el esquema de eventos en la nube.

Marcador de posición Descripción
FUNCTIONRESOURCEGROUP Nombre del grupo de recursos que tiene la aplicación de Azure Functions.
FUNCTIONSAPPNAME Nombre de la aplicación de Azure Functions.
FUNCTIONNAME Nombre de la función de 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

Creación de espacios de nombres, clientes, espacios de temas y enlaces de permisos

Sigue las instrucciones de Inicio rápido: Publicación y suscripción a mensajes MQTT en un espacio de nombres de Event Grid con la CLI de Azure para:

  1. Crear un espacio de nombres de Event Grid.
  2. Crear dos clientes.
  3. Crear un espacio de temas.
  4. Crear enlaces de permisos de publicador y suscriptor.
  5. Probar el uso de la aplicación MQTTX para confirmar que los clientes pueden enviar y recibir mensajes.

Habilitación de la identidad administrada para el espacio de nombres

Reemplaza el siguiente valor y ejecuta el script a fin de habilitar la identidad administrada asignada por el sistema para el espacio de nombres de Event Grid.

Marcador de posición Descripción
EVENTGRIDNAMESPACENAME Nombre del espacio de nombres de Event Grid.

El script usa el comando az eventgrid namespace update con identity establecido en la identidad SystemAssigned.

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

Después, concede a la identidad administrada del espacio de nombres el permiso send en el tema personalizado de Event Grid que creaste anteriormente para que el espacio de nombres pueda enviar o enrutar mensajes al tema personalizado. Para ello, agrega la identidad administrada al rol de Remitente de datos de Event Grid en el tema personalizado.

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

El script usa el comando az role assignment create con los id. de la identidad administrada del espacio de nombres y el tema personalizado, y asigna el rol de remitente de datos de Event Grid a la identidad administrada del espacio de nombres en el tema personalizado.

Configuración del enrutamiento de mensajes a la función de Azure mediante un tema personalizado

En este paso, configurarás el enrutamiento para el espacio de nombres de Event Grid a fin de que los mensajes que recibe se enruten al tema personalizado que creaste.

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

El script usa el comando az eventgrid namespace update para establecer el tema de enrutamiento y el tipo de identidad administrada que se va a usar a fin de enrutar eventos al tema.

Envío de mensajes MQTT de prueba mediante MQTTX

Envía mensajes MQTT de prueba al espacio de nombres y confirma que la función las recibe.

Sigue las instrucciones del artículo Publicación y suscripción de mensajes mediante la aplicación MQTTX para enviar algunos mensajes de prueba al espacio de nombres de Event Grid.

Este es el flujo de los eventos o mensajes:

  1. MQTTX envía mensajes al espacio de temas del espacio de nombres de Event Grid.

  2. Los mensajes se enrutan al tema personalizado que configuraste.

  3. Los mensajes se reenvían a la suscripción de eventos, que es la función de Azure.

  4. Usa la característica de registro para comprobar que la función ha recibido el evento.

    Captura de pantalla que muestra la página Flujo de registro de una función de Azure.

Paso siguiente

Puedes ver ejemplos de código en este repositorio de GitHub.