Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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 você não tiver uma assinatura do Azure, poderá se inscrever para uma avaliação gratuita.
Pré-requisitos
Siga as instruções de Criar uma função do Azure usando o Visual Studio Code, mas use o Gatilho da Grade de Eventos do Azure em vez de usar o Gatilho HTTP. Você deve ver um código semelhante ao seguinte exemplo:
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 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 Cloud Shell.
- Alterne do PowerShell para 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 para o tópico.
| Placeholder | Description |
|---|---|
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 az eventgrid topic create comando para criar um tópico da Grade de Eventos ou um tópico personalizado. O tipo de esquema é especificado como o esquema de eventos de 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 eventos de nuvem em todos os lugares neste tutorial.
Adicionar 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 az eventgrid event-subscription create comando para criar uma assinatura de função do Azure para o tópico personalizado. No comando, o ID do recurso de origem é o ID do recurso do tópico e o endpoint é o 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 de nuvem.
| Placeholder | Description |
|---|---|
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 namespace, clientes, espaços de tópicos e associações de permissão
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.
- Crie dois clientes.
- Crie um espaço de tema.
- Crie vínculos de permissão para editor e assinante.
- Teste usando o aplicativo MQTTX para confirmar se os clientes podem enviar e receber mensagens.
Habilitar a identidade gerenciada para o 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.
| Placeholder | Description |
|---|---|
EVENTGRIDNAMESPACENAME |
Nome do namespace da Grade de Eventos. |
O script usa o comando az eventgrid namespace update com identity configurado para 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 de envio 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 de 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 az role assignment create comando com as IDs da identidade gerenciada do namespace e o tópico personalizado e atribui a função de 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 tópico personalizado
Nesta etapa, você configura o roteamento para o namespace da Grade de Eventos para que as mensagens recebidas sejam roteadas 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 az eventgrid namespace update comando para definir o tópico de roteamento e o tipo de identidade gerenciada a ser usada para rotear eventos para o tópico.
Enviar mensagens MQTT de teste usando MQTTX
Envie mensagens MQTT de teste para o namespace e confirme se a função as recebe.
Siga as instruções do artigo Publicar e assinar mensagens usando o aplicativo MQTTX para enviar algumas mensagens de teste para o namespace do Event Grid.
Aqui está o fluxo dos eventos ou mensagens:
O MQTTX envia mensagens para o espaço de tópicos do namespace do Event Grid.
As mensagens são roteadas 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 neste repositório github.