Руководство. Маршрутизация сообщений MQTT в Сетка событий Azure на Функции 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 и настраиваемую раздел "Сетка событий". Далее в этом руководстве вы настроите маршрутизацию для пространства имен Сетки событий, чтобы события или сообщения, отправленные в пространство имен, перенаправлялись в пользовательский раздел, а затем в функцию Azure через подписку на раздел.

Заполнитель 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, а схема доставки событий в облаке указана как схема облачного события.

Заполнитель Description
FUNCTIONRESOURCEGROUP Имя группы ресурсов с приложением Функции Azure.
FUNCTIONSAPPNAME Имя приложения Функции Azure.
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 в пространстве имен Сетки событий с помощью Azure CLI :

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

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

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

Заполнитель Description
EVENTGRIDNAMESPACENAME Имя пространства имен Сетки событий.

Сценарий использует команду с identity набором az eventgrid namespace updateSystemAssigned удостоверений.

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

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

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 команду с идентификаторами управляемого удостоверения пространства имен и пользовательского раздела, а также назначает роль отправителя данных сетки событий управляемому пространству имен в пользовательском разделе.

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

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

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, чтобы отправить несколько тестовых сообщений в пространство имен Сетки событий.

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

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

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

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

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

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

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

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