Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tutorial, aprenderá a enrutar los mensajes MQTT recibidos por un espacio de nombres de Azure Event Grid a una función de Azure a través de un tema personalizado de Event Grid siguiendo estos pasos:
Si no tiene una suscripción de Azure, puede registrarse para obtener una evaluación gratuita.
Prerrequisitos
Siga las instrucciones de Creación de una función de Azure mediante Visual Studio Code, pero use el desencadenador de Azure Event Grid en lugar de usar el desencadenador HTTP. Debería ver 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:
- Cree todos los recursos en la misma región.
- Este tutorial se ha probado con una función de Azure que utiliza el entorno de ejecución de .NET 8.0 (aislado).
Creación de un tema de Event Grid (tema personalizado)
En este paso, creará un tema de Event Grid.
- Copie y pegue el script en un editor.
- Reemplace los valores siguientes.
- Seleccione Abrir Consola en la Nube.
- Cambie de PowerShell a Bash (en la esquina superior izquierda de la ventana de Cloud Shell).
- Copie y pegue el script del editor en Cloud Shell y ejecute 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á 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, a continuación, a la función de Azure a través de la suscripción al tema.
| Placeholder | Description |
|---|---|
RESOURCEGROUPNAME |
Nombre del grupo de recursos que se va a crear. |
REGION |
Región en la que desea crear el grupo de recursos y el tema personalizado. |
TOPICNAME |
Nombre del tema personalizado que se va a crear. |
El script usa el az eventgrid topic create comando para crear un tema de Event Grid o un tema 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:
Use el esquema de eventos en la nube en todas partes en este tutorial.
Adición de una suscripción al tema mediante la función
En este paso, creará una suscripción al tema personalizado mediante la función de Azure que creó anteriormente.
Reemplace los valores siguientes y ejecute el script en Cloud Shell. El script usa el az eventgrid event-subscription create comando para crear una suscripción de función de Azure al tema personalizado. En el comando, el identificador de origen es el identificador de recurso del tema y el punto de conexión es el identificador 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.
| Placeholder | Description |
|---|---|
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
Siga 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:
- Crear un espacio de nombres de Event Grid.
- Cree dos clientes.
- Cree un espacio de temas.
- Crear enlaces de permisos de publicador y suscriptor.
- Pruebe 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
Reemplace el siguiente valor y ejecute el script para habilitar la identidad administrada asignada por el sistema para el espacio de nombres de Event Grid.
| Placeholder | Description |
|---|---|
EVENTGRIDNAMESPACENAME |
Nombre del espacio de nombres de Event Grid. |
El script usa el comando az eventgrid namespace update con identity establecido en SystemAssigned identidad.
nsName="EVENTGRIDNAMESPACENAME"
az eventgrid namespace update -g $rgName -n $nsName --topic-spaces-configuration "{state:Enabled}" --identity "{type:SystemAssigned}"
A continuación, conceda a la identidad administrada del espacio de nombres el permiso de envío en el tema personalizado de Event Grid que creó anteriormente para que el espacio de nombres pueda enviar o enrutar mensajes al tema personalizado. Para ello, agregue la identidad administrada al rol 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 del tema personalizado, y asigna el rol Remitente de datos de Event Grid a la identidad administrada del espacio de nombres en el tema personalizado.
Configurar el enrutamiento de mensajes a la función de Azure a través de un tema personalizado
En este paso, configurará el enrutamiento para el espacio de nombres de Event Grid para que los mensajes que recibe se enruten al tema personalizado que creó.
az eventgrid namespace update -g $rgName -n $nsName --topic-spaces-configuration "{state:Enabled,'routeTopicResourceId':$topicResourceId,'routingIdentityInfo':{type:SystemAssigned}}"
El script usa el az eventgrid namespace update comando para establecer el tema de enrutamiento y el tipo de identidad administrada que se usará para enrutar eventos al tema.
Envío de mensajes MQTT de prueba mediante MQTTX
Envíe mensajes MQTT de prueba al espacio de nombres y confirme que la función las recibe.
Siga las instrucciones del artículo Publicar y suscribir mensajes con la aplicación MQTTX para enviar algunos mensajes de prueba al namespace de Event Grid.
Este es el flujo de los eventos o mensajes:
MQTTX envía mensajes al espacio de temas del espacio de nombres de Event Grid.
Los mensajes se enrutan al tema personalizado que configuraste.
Los mensajes se reenvieron a la suscripción de eventos, que es la función de Azure.
Use la característica de registro para comprobar que la función ha recibido el evento.
Paso siguiente
Consulte ejemplos de código en este repositorio de GitHub.