Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом руководстве описано, как маршрутизировать сообщения 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 и настраиваемую тему 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 :
- Создайте пространство имен Event Grid.
- Создайте два клиента.
- Создайте пространство тем.
- Создание привязок разрешений издателя и подписчика.
- Проверьте использование приложения 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.
Ниже приведен поток событий или сообщений:
MQTTX отправляет сообщения в пространство тем в пространстве имен Событийной сети.
Сообщения направляются в настраиваемый раздел, настроенный вами.
Сообщения перенаправляются в подписку на события, которая является функцией Azure.
Используйте функцию ведения журнала, чтобы убедиться, что функция получила событие.
Следующий шаг
См. примеры кода в этом репозитории GitHub.