Руководство. Маршрутизация сообщений 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 (изолированный).
Создание раздела "Сетка событий" (настраиваемый раздел)
На этом шаге вы создадите раздел сетки событий.
- Скопируйте и вставьте скрипт в редактор.
- Замените следующие значения.
- Выберите Open Cloud Shell.
- Переключитесь с PowerShell на Bash (в левом верхнем углу окна Cloud Shell).
- Скопируйте и вставьте скрипт из редактора в 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 :
- Создайте пространство имен Сетки событий.
- Создайте два клиента.
- Создайте пространство тем.
- Создание привязок разрешений издателя и подписчика.
- Проверьте использование приложения MQTTX, чтобы убедиться, что клиенты могут отправлять и получать сообщения.
Включение управляемого удостоверения для пространства имен
Замените следующее значение и запустите скрипт, чтобы включить управляемое удостоверение, назначаемое системой, для пространства имен Сетки событий.
Заполнитель | Description |
---|---|
EVENTGRIDNAMESPACENAME |
Имя пространства имен Сетки событий. |
Сценарий использует команду с identity
набором az eventgrid namespace update
SystemAssigned
удостоверений.
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, чтобы отправить несколько тестовых сообщений в пространство имен Сетки событий.
Ниже приведен поток событий или сообщений:
MQTTX отправляет сообщения в пространство тем пространства имен Сетки событий.
Сообщения направляются в настраиваемый раздел, настроенный вами.
Сообщения перенаправляются в подписку на события, которая является функцией Azure.
Используйте функцию ведения журнала, чтобы убедиться, что функция получила событие.
Следующий шаг
См. примеры кода в этом репозитории GitHub.