Поделиться через


Руководство: Маршрутизация сообщений MQTT в Azure Event Grid на Функции Azure с помощью пользовательских тем — Azure CLI

В этом руководстве описано, как маршрутизировать сообщения MQTT, полученные пространством имен Сетки событий Azure, в функцию Azure с помощью настраиваемого раздела сетки событий, выполнив следующие действия.

Если у вас нет подписки Azure, вы можете зарегистрироваться для получения бесплатной пробной версии.

Предпосылки

Следуйте инструкциям из статьи "Создание функции Azure с помощью Visual Studio Code", но используйте триггер сетки событий Azure вместо триггера HTTP. Вы должны увидеть код, аналогичный следующему примеру:

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

Эта функция Azure используется в качестве обработчика событий для подписки раздела далее в этом руководстве.

Замечание

  • Создайте все ресурсы в одном регионе.
  • В этом руководстве была протестирована функция Azure, использующая стек среды выполнения .NET 8.0 (изолированный).

Создание раздела "Сетка событий" (настраиваемый раздел)

На этом шаге вы создадите раздел сетки событий.

  1. Скопируйте и вставьте скрипт в редактор.
  2. Замените следующие значения.
  3. Выберите Open Cloud Shell.
  4. Переключитесь с PowerShell на Bash (в левом верхнем углу окна Cloud Shell).
  5. Скопируйте и вставьте скрипт из редактора в Cloud Shell и запустите скрипт.

Скрипт создает группу ресурсов Azure и настраиваемую тему Event Grid в ней. Далее в этом руководстве вы настроите маршрутизацию для пространства имен Event Grid, чтобы события или сообщения, отправленные в пространство имен, направлялись в пользовательский раздел, а затем в функцию Azure через подписку на раздел.

Placeholder Description
RESOURCEGROUPNAME Имя создаваемой группы ресурсов.
REGION Регион, в котором необходимо создать группу ресурсов и настраиваемый раздел.
TOPICNAME Имя создаваемого настраиваемого раздела.

Скрипт использует az eventgrid topic create команду для создания раздела сетки событий или настраиваемого раздела. Тип схемы указывается как схема облачного события.

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

Замечание

Используйте схему облачных событий везде в этом руководстве.

Добавление подписки в раздел с помощью функции

На этом шаге вы создадите подписку на пользовательский раздел с помощью созданной ранее функции Azure.

Замените следующие значения и запустите скрипт в Cloud Shell. Сценарий использует az eventgrid event-subscription create команду для создания подписки функции Azure на пользовательскую тему. В команде идентификатор источника — это идентификатор ресурса раздела, а конечная точка — это идентификатор ресурса функции. Тип конечной точки задан как функция Azure, а схема доставки событий в облаке указана как схема облачного события.

Placeholder Description
FUNCTIONRESOURCEGROUP Имя группы ресурсов с приложением "Функции Azure".
FUNCTIONSAPPNAME Имя приложения для Azure Functions.
FUNCTIONNAME Имя функции 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

Создание пространства имен, клиентов, пространств тем и привязок разрешений

Следуйте инструкциям из базового руководства: Публикуйте и подписывайтесь на сообщения MQTT в пространстве имен Event Grid с помощью Azure CLI :

  1. Создайте пространство имен Event Grid.
  2. Создайте два клиента.
  3. Создайте пространство тем.
  4. Создание привязок разрешений издателя и подписчика.
  5. Проверьте использование приложения MQTTX , чтобы убедиться, что клиенты могут отправлять и получать сообщения.

Включите управляемое удостоверение для пространства имен

Замените следующее значение и запустите скрипт, чтобы включить системное управляемое удостоверение для пространства имен Event Grid.

Placeholder Description
EVENTGRIDNAMESPACENAME Имя пространства имен для Event Grid.

Сценарий использует команду az eventgrid namespace update, настроенную с identity на SystemAssigned идентификатор.

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

Затем предоставьте управляемой идентичности пространства имен разрешение на отправку пользовательского раздела Event Grid, созданного ранее, чтобы пространство имен могло отправлять или направлять сообщения в пользовательский раздел. Для этого добавьте управляемое удостоверение в роль Event Grid Data Sender на пользовательской теме.

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

Сценарий использует команду az role assignment create с идентификаторами управляемого удостоверения пространства имен и пользовательской темы, и назначает роль Отправитель данных Event Grid управляемому удостоверению пространства имен на пользовательской теме.

Настройка маршрутизации сообщений в функцию Azure с помощью пользовательского раздела

На этом шаге вы настроите маршрутизацию для пространства имен Event Grid, чтобы полученные сообщения были перенаправлены в созданную вами пользовательскую тему.

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

Скрипт использует az eventgrid namespace update команду, чтобы задать раздел маршрутизации и тип управляемого удостоверения, используемый для маршрутизации событий в раздел.

Отправка тестовых сообщений MQTT с помощью MQTTX

Отправьте тестовые сообщения MQTT в пространство имен и убедитесь, что функция получает их.

Следуйте инструкциям из статьи Публикация и подписка на сообщения с помощью приложения MQTTX, чтобы отправить несколько тестовых сообщений в пространство имен Event Grid.

Ниже приведен поток событий или сообщений:

  1. MQTTX отправляет сообщения в пространство тем в пространстве имен Событийной сети.

  2. Сообщения направляются в настраиваемый раздел, настроенный вами.

  3. Сообщения перенаправляются в подписку на события, которая является функцией Azure.

  4. Используйте функцию ведения журнала, чтобы убедиться, что функция получила событие.

    Снимок экрана: страница потока журнала для функции Azure.

Следующий шаг

См. примеры кода в этом репозитории GitHub.