Tutorial: Rotear mensagens MQTT na Grade de Eventos do Azure para o Azure Functions usando tópicos personalizados – CLI do Azure
Neste tutorial, você aprenderá a rotear mensagens MQTT recebidas por um namespace da Grade de Eventos do Azure para uma função do Azure por meio de um tópico personalizado da Grade de Eventos seguindo estas etapas:
Se não tiver uma assinatura do Azure, você poderá inscrever-se em uma avaliação gratuita.
Pré-requisitos
Siga as instruções de Criar uma função Azure usando o Visual Studio Code, mas use o Gatilho da Grade de Eventos do Azure em vez de usar o Gatilho HTTP. Você deverá ver um código semelhante ao exemplo a seguir:
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);
}
}
}
Você usará essa função do Azure como um manipulador de eventos para a assinatura de um tópico mais adiante neste tutorial.
Observação
- Crie todos os recursos na mesma região.
- Este tutorial foi testado com uma função do Azure que usa a pilha de runtime do .NET 8.0 (isolada).
Criar um tópico da Grade de Eventos (tópico personalizado)
Nesta etapa, você criará um tópico da Grade de Eventos.
- Copie e cole o script em um editor.
- Substitua os valores a seguir.
- Selecione Abrir o Cloud Shell.
- Mude do PowerShell para o Bash (no canto superior esquerdo da janela do Cloud Shell).
- Copie e cole o script do editor para o Cloud Shell e execute o script.
O script cria um grupo de recursos do Azure e um tópico personalizado da Grade de Eventos nele. Posteriormente neste tutorial, você configurará o roteamento para um namespace da Grade de Eventos para que os eventos ou mensagens enviadas para o namespace sejam roteados para o tópico personalizado e, em seguida, para a função do Azure por meio da assinatura do tópico.
Espaço reservado | Descrição |
---|---|
RESOURCEGROUPNAME |
Nome do grupo de recursos a ser criado. |
REGION |
Região na qual você deseja criar o grupo de recursos e o tópico personalizado. |
TOPICNAME |
Nome do tópico personalizado a ser criado. |
O script usa o comando az eventgrid topic create
para criar um tópico da Grade de Eventos ou um tópico personalizado. O tipo de esquema é especificado como esquema de evento na nuvem.
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
Observação
Use o Esquema de evento na nuvem em todos os lugares neste tutorial.
Adicione uma assinatura ao tópico usando a função
Nesta etapa, você criará uma assinatura para o tópico personalizado usando a função do Azure criada anteriormente.
Substitua os valores a seguir e execute o script no Cloud Shell. O script usa o comando az eventgrid event-subscription create
para criar uma assinatura de função do Azure para o tópico personalizado. No comando, a ID de origem é a ID do recurso do tópico e o ponto de extremidade é a ID do recurso da função. O tipo de ponto de extremidade é definido como função do Azure e o esquema de entrega de eventos é especificado como o esquema de eventos na nuvem.
Espaço reservado | Descrição |
---|---|
FUNCTIONRESOURCEGROUP |
Nome do grupo de recursos que tem o aplicativo do Azure Functions. |
FUNCTIONSAPPNAME |
Nome do aplicativo do Azure Functions. |
FUNCTIONNAME |
Nome da função do 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
Criar namespaces, clientes, espaços de tópicos e associações de permissões
Siga as instruções do Início rápido: Publicar e assinar mensagens MQTT em um namespace da Grade de Eventos com a CLI do Azure para:
- Criar um namespace da Grade de Eventos.
- Criar dois clientes.
- Criar um espaço de tópico.
- Criar vinculações de permissão de fornecedor e assinante.
- Testar usando o aplicativo MQTTX para confirmar que os clientes podem enviar e receber mensagens.
Habilitar a identidade gerenciada do namespace
Substitua o valor a seguir e execute o script para habilitar a identidade gerenciada atribuída pelo sistema para o namespace da Grade de Eventos.
Espaço reservado | Descrição |
---|---|
EVENTGRIDNAMESPACENAME |
Nome do namespace da Grade de Eventos. |
O script usa o comando az eventgrid namespace update
com identity
definido como identidade SystemAssigned
.
nsName="EVENTGRIDNAMESPACENAME"
az eventgrid namespace update -g $rgName -n $nsName --topic-spaces-configuration "{state:Enabled}" --identity "{type:SystemAssigned}"
Em seguida, conceda à identidade gerenciada do namespace a permissão enviar no tópico personalizado da Grade de Eventos criado anteriormente para que o namespace possa enviar ou rotear mensagens para o tópico personalizado. Você faz isso adicionando a identidade gerenciada à função Remetente de Dados da Grade de Eventos no tópico 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
O script usa o comando az role assignment create
com as IDs da identidade gerenciada do namespace e o tópico personalizado e atribui a função do Remetente de Dados da Grade de Eventos à identidade gerenciada do namespace no tópico personalizado.
Configurar mensagens de roteamento para a função do Azure por meio de um tópico personalizado
Nesta etapa, configure o roteamento do namespace da Grade de Eventos para que as mensagens que ele recebe sejam encaminhadas para o tópico personalizado que você criou.
az eventgrid namespace update -g $rgName -n $nsName --topic-spaces-configuration "{state:Enabled,'routeTopicResourceId':$topicResourceId,'routingIdentityInfo':{type:SystemAssigned}}"
O script usa o comando az eventgrid namespace update
para definir o tópico de roteamento e o tipo de identidade gerenciada a ser usado para rotear eventos para o tópico.
Enviar mensagens MQTT de teste usando o MQTTX
Envie mensagens MQTT de teste para o namespace e confirme se a função as recebe.
Siga as instruções do artigo Publicar, assinar mensagens usando o aplicativo MQTTX para enviar algumas mensagens de teste para o namespace da Grade de Eventos.
Aqui está o fluxo dos eventos ou mensagens:
O MQTTX envia mensagens para o espaço de tópico do namespace da Grade de Eventos.
As mensagens são encaminhadas para o tópico personalizado que você configurou.
As mensagens são encaminhadas para a assinatura do evento, que é a função do Azure.
Use o recurso de registro em log para verificar se a função recebeu o evento.
Próxima etapa
Veja exemplos de código em este repositório GitHub.