Share via


Tutorial: Encaminhar 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 subscrição do Azure, pode inscrever-se para obter 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 de Grade de Eventos do Azure em vez de usar o Gatilho HTTP. Você deve 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ê usa essa função do Azure como um manipulador de eventos para a assinatura de um tópico posteriormente neste tutorial.

Nota

  • Crie todos os recursos na mesma região.
  • Este tutorial foi testado com uma função do Azure que usa a pilha de tempo de execução do .NET 8.0 (isolada).

Criar um tópico da Grade de Eventos (tópico personalizado)

Nesta etapa, você cria um tópico Grade de Eventos.

  1. Copie e cole o script em um editor.
  2. Substitua os seguintes valores.
  3. Selecione Open Cloud Shell.
  4. Alterne do PowerShell para o Bash (no canto superior esquerdo da janela do Cloud Shell).
  5. 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. Mais adiante neste tutorial, você configura o roteamento para um namespace de 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.

Marcador de Posição 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 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

Nota

Use o esquema de eventos na nuvem em todos os lugares neste tutorial.

Adicionar uma assinatura ao tópico usando a função

Nesta etapa, você cria uma assinatura para o tópico personalizado usando a função do Azure criada anteriormente.

Substitua os seguintes valores 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, ID de origem é o ID de recurso do tópico e ponto de extremidade é o ID de 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.

Marcador de Posição Description
FUNCTIONRESOURCEGROUP Nome do grupo de recursos que tem o aplicativo Azure Functions.
FUNCTIONSAPPNAME Nome do aplicativo 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ópico e associações de permissão

Siga as instruções de Guia de início rápido: publique e assine mensagens MQTT em um namespace de grade de eventos com a CLI do Azure para:

  1. Crie um namespace Event Grid.
  2. Crie dois clientes.
  3. Crie um espaço de tópico.
  4. Crie associações de permissão de editor e assinante.
  5. Teste usando o aplicativo MQTTX para confirmar se os clientes são capazes de enviar e receber mensagens.

Habilitar 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 Grade de Eventos.

Marcador de Posição Description
EVENTGRIDNAMESPACENAME Nome do namespace Event Grid.

O script usa o az eventgrid namespace update comando com identity set to SystemAssigned identity.

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. Para fazer isso, adicione 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 az role assignment create comando com as IDs da identidade gerenciada do namespace e o tópico personalizado e atribui a função 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 Grade de Eventos para que as mensagens recebidas sejam roteadas para o tópico personalizado criado.

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, inscrever mensagens usando o aplicativo MQTTX para enviar algumas mensagens de teste para o namespace Event Grid.

Aqui está o fluxo dos eventos ou mensagens:

  1. O MQTTX envia mensagens para o espaço de tópico do namespace Event Grid.

  2. As mensagens são encaminhadas para o tópico personalizado que você configurou.

  3. As mensagens são encaminhadas para a assinatura do evento, que é a função do Azure.

  4. Use o recurso de log para verificar se a função recebeu o evento.

    Captura de tela que mostra a página Fluxo de log para uma função do Azure.

Próximo passo

Veja exemplos de código neste repositório GitHub.