Руководство. Двунаправленный мост MQTT для Сетка событий Azure
Внимание
На этой странице содержатся инструкции по управлению компонентами Операций Интернета вещей Azure с помощью манифестов развертывания Kubernetes, которые доступны в предварительной версии. Эта функция предоставляется с несколькими ограничениями и не должна использоваться для рабочих нагрузок.
Юридические условия, применимые к функциям Azure, которые находятся в состоянии бета-версии, предварительной версии или иным образом еще не выпущены в общедоступной версии, см. на странице Дополнительные условия использования предварительных версий в Microsoft Azure.
В этом руководстве описано, как настроить двунаправленный мост MQTT между брокером MQTT операций Интернета вещей Azure и Сетка событий Azure. Чтобы упростить руководство, используйте параметры по умолчанию для брокера MQTT Операций Интернета вещей Azure и конечных точек Сетка событий Azure, а преобразование не применяется.
Необходимые компоненты
- Операции Интернета вещей Azure. См. статью "Развертывание операций Интернета вещей Azure".
- Профиль потока данных. См. раздел "Настройка профиля потока данных".
Настройка переменных среды
Войдите с помощью Azure CLI:
az login
Задайте переменные среды для остальной части программы установки. Замените значения в <>
допустимых значениях или именах. Новое пространство имен Сетка событий Azure и пространство тем создаются в подписке Azure на основе указанных имен:
# For this tutorial, the steps assume the IoT Operations cluster and the Event Grid
# are in the same subscription, resource group, and location.
# Name of the resource group of Azure Event Grid and IoT Operations cluster
export RESOURCE_GROUP=<RESOURCE_GROUP_NAME>
# Azure region of Azure Event Grid and IoT Operations cluster
export LOCATION=<LOCATION>
# Name of the Azure Event Grid namespace
export EVENT_GRID_NAMESPACE=<EVENT_GRID_NAMESPACE>
# Name of the Arc-enabled IoT Operations cluster
export CLUSTER_NAME=<CLUSTER_NAME>
# Subscription ID of Azure Event Grid and IoT Operations cluster
export SUBSCRIPTION_ID=<SUBSCRIPTION_ID>
Создание пространства имен Сетки событий с включенным брокером MQTT
Создайте пространство имен Сетки событий с помощью Azure CLI. Расположение должно совпадать с расположением, используемым для развертывания операций Интернета вещей Azure.
az eventgrid namespace create \
--namespace-name $EVENT_GRID_NAMESPACE \
--resource-group $RESOURCE_GROUP \
--location $LOCATION \
--topic-spaces-configuration "{state:Enabled,maximumClientSessionsPerAuthenticationName:3}"
eventgrid
Если расширение не установлено, появится запрос на установку. Выберите Y
, чтобы установить расширение.
Задав topic-spaces-configuration
команду, эта команда создает пространство имен с:
- Включен брокер MQTT
- Максимальное количество клиентских сеансов на имя проверки подлинности как 3.
Параметр максимального числа клиентских сеансов позволяет Azure IoT Operations MQTT создавать несколько экземпляров и по-прежнему подключаться. Дополнительные сведения см . в разделе поддержки нескольких сеансов.
Создание пространства разделов
В пространстве имен Сетки событий создайте пространство тем с именем tutorial
шаблона раздела telemetry/#
.
az eventgrid namespace topic-space create \
--resource-group $RESOURCE_GROUP \
--namespace-name $EVENT_GRID_NAMESPACE \
--name tutorial \
--topic-templates "telemetry/#"
Используя #
подстановочный знак в шаблоне раздела, вы можете опубликовать в любом разделе в telemetry
пространстве тем. Например, telemetry/temperature
или telemetry/humidity
.
Предоставление доступа к разделу "Сетка событий" для операций Интернета вещей Azure
С помощью Azure CLI найдите основной идентификатор расширения Azure IoT Operations Arc. Команда сохраняет идентификатор субъекта в переменной для последующего использования.
export PRINCIPAL_ID=$(az k8s-extension list \
--resource-group $RESOURCE_GROUP \
--cluster-name $CLUSTER_NAME \
--cluster-type connectedClusters \
--query "[?extensionType=='microsoft.iotoperations'].identity.principalId | [0]" -o tsv)
echo $PRINCIPAL_ID
Запишите выходное значение для identity.principalId
, которое является значением GUID со следующим форматом:
aaaaaaaa-bbbb-cccc-1111-222222222222
Затем используйте Azure CLI для назначения ролей издателя и подписчика Azure IoT Operations MQTT для созданного пространства тем.
Назначьте роль издателя:
az role assignment create \
--assignee $PRINCIPAL_ID \
--role "EventGrid TopicSpaces Publisher" \
--scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.EventGrid/namespaces/$EVENT_GRID_NAMESPACE/topicSpaces/tutorial
Назначьте роль подписчика:
az role assignment create \
--assignee $PRINCIPAL_ID \
--role "EventGrid TopicSpaces Subscriber" \
--scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.EventGrid/namespaces/$EVENT_GRID_NAMESPACE/topicSpaces/tutorial
Совет
Область соответствует id
пространству тем, созданному az eventgrid namespace topic-space create
на предыдущем шаге, и вы можете найти его в выходных данных команды.
Имя узла брокера MQTT сетки событий
Используйте Azure CLI, чтобы получить имя узла брокера MQTT сетки событий.
az eventgrid namespace show \
--resource-group $RESOURCE_GROUP \
--namespace-name $EVENT_GRID_NAMESPACE \
--query topicSpacesConfiguration.hostname \
-o tsv
Запишите выходное значение для topicSpacesConfiguration.hostname
этого значения имени узла, которое выглядит следующим образом:
example.region-1.ts.eventgrid.azure.net
Создание конечной точки потока данных Сетка событий Azure
Создайте конечную точку потока данных для Сетка событий Azure. Эта конечная точка является назначением потока данных, который отправляет сообщения в Сетка событий Azure. Замените <EVENT_GRID_HOSTNAME>
на имя узла MQTT, полученное на предыдущем шаге. Включите номер 8883
порта.
Конечные точки потока данных и потока данных Сетка событий Azure можно развернуть как стандартные ресурсы Azure, так как они имеют реализацию поставщика ресурсов Azure (RPS). Этот файл шаблона Bicep из Bicep File for MQTT-bridge data flow Tutorial развертывает необходимые конечные точки потока данных и потока данных.
Скачайте файл в свой локальный и замените значения customLocationName
для , aioInstanceName
eventGridHostName
с вашими.
param customLocationName string = '<CUSTOM_LOCATION_NAME>'
param aioInstanceName string = '<AIO_INSTANCE_NAME>'
param eventGridHostName string = '<EVENT_GRID_HOSTNAME>:8883'
resource customLocation 'Microsoft.ExtendedLocation/customLocations@2021-08-31-preview' existing = {
name: customLocationName
}
resource aioInstance 'Microsoft.IoTOperations/instances@2024-11-01' existing = {
name: aioInstanceName
}
resource remoteMqttBrokerDataflowEndpoint 'Microsoft.IoTOperations/instances/dataflowEndpoints@2024-11-01' = {
parent: aioInstance
name: 'eventgrid'
extendedLocation: {
name: customLocation.id
type: 'CustomLocation'
}
properties: {
endpointType: 'Mqtt'
mqttSettings: {
host: eventGridHostName
authentication: {
method: 'SystemAssignedManagedIdentity'
systemAssignedManagedIdentitySettings: {}
}
tls: {
mode: 'Enabled'
}
}
}
}
Затем выполните следующую команду в терминале. Замените <FILE>
именем скачаемого файла Bicep.
az deployment group create --resource-group <RESOURCE_GROUP> --template-file <FILE>.bicep
Здесь метод проверки подлинности устанавливается для SystemAssignedManagedIdentity
использования управляемого удостоверения расширения Операций Интернета вещей Azure для проверки подлинности с помощью брокера MQTT сетки событий. Этот параметр работает, так как расширение Операций Интернета вещей Azure имеет необходимые разрешения для публикации и подписки на пространство разделов Сетки событий, настроенное с помощью ролей RBAC Azure. Обратите внимание, что в конфигурации не требуются секреты, например имя пользователя или пароль.
Так как для брокера MQTT сетки событий требуется TLS, tls
параметр включен. Не нужно предоставлять доверенный сертификат ЦС, так как брокер MQTT сетки событий использует широко доверенный центр сертификации.
Создание потоков данных
Создайте два потока данных с конечной точкой брокера MQTT операций Интернета вещей Azure в качестве источника и конечной точки Сетка событий Azure в качестве назначения и наоборот. Нет необходимости настраивать преобразование.
param customLocationName string = '<CUSTOM_LOCATION_NAME>'
param aioInstanceName string = '<AIO_INSTANCE_NAME>'
resource customLocation 'Microsoft.ExtendedLocation/customLocations@2021-08-31-preview' existing = {
name: customLocationName
}
resource aioInstance 'Microsoft.IoTOperations/instances@2024-11-01' existing = {
name: aioInstanceName
}
resource defaultDataflowProfile 'Microsoft.IoTOperations/instances/dataflowProfiles@2024-11-01' existing = {
parent: aioInstance
name: 'default'
}
resource dataflow_1 'Microsoft.IoTOperations/instances/dataflowProfiles/dataflows@2024-11-01' = {
parent: defaultDataflowProfile
name: 'local-to-remote'
extendedLocation: {
name: customLocation.id
type: 'CustomLocation'
}
properties: {
mode: 'Enabled'
operations: [
{
operationType: 'Source'
sourceSettings: {
endpointRef: 'default'
serializationFormat: 'Json'
dataSources: array('tutorial/local')
}
}
{
operationType: 'BuiltInTransformation'
builtInTransformationSettings: {
serializationFormat: 'Json'
datasets: []
filter: []
map: [
{
type: 'PassThrough'
inputs: [
'*'
]
output: '*'
}
]
}
}
{
operationType: 'Destination'
destinationSettings: {
endpointRef: 'eventgrid'
dataDestination: 'telemetry/aio'
}
}
]
}
}
resource dataflow_2 'Microsoft.IoTOperations/instances/dataflowProfiles/dataflows@2024-11-01' = {
parent: defaultDataflowProfile
name: 'remote-to-local'
extendedLocation: {
name: customLocation.id
type: 'CustomLocation'
}
properties: {
mode: 'Enabled'
operations: [
{
operationType: 'Source'
sourceSettings: {
endpointRef: 'eventgrid'
serializationFormat: 'Json'
dataSources: array('telemetry/#')
}
}
{
operationType: 'BuiltInTransformation'
builtInTransformationSettings: {
serializationFormat: 'Json'
datasets: []
filter: []
map: [
{
type: 'PassThrough'
inputs: [
'*'
]
output: '*'
}
]
}
}
{
operationType: 'Destination'
destinationSettings: {
endpointRef: 'default'
dataDestination: 'tutorial/cloud'
}
}
]
}
}
Как и конечная точка потока данных, выполните следующую команду в терминале:
az deployment group create --resource-group <RESOURCE_GROUP> --template-file <FILE>.bicep
Вместе два потока данных образуют мост MQTT, где вы:
- Использование брокера MQTT сетки событий в качестве удаленного брокера
- Использование локального брокера MQTT операций Интернета вещей Azure в качестве локального брокера
- Использование TLS для удаленных и локальных брокеров
- Использование управляемого удостоверения, назначаемого системой, для проверки подлинности в удаленном брокере
- Использование учетной записи службы Kubernetes для проверки подлинности в локальном брокере
- Сопоставление раздела с темой удаленного брокера с
telemetry/aio
помощьюtutorial/local
карты разделов -
telemetry/#
Сопоставление раздела с удаленным брокером сtutorial/cloud
разделом на локальном брокере
Примечание.
По умолчанию Операции Интернета вещей Azure развертывают брокер MQTT, а также конечную точку потока данных брокера MQTT. Конечная точка потока данных брокера MQTT используется для подключения к брокеру MQTT. Конфигурация по умолчанию использует встроенный маркер учетной записи службы для проверки подлинности. Конечная точка называется default
и доступна в том же пространстве имен, что и Операции Интернета вещей Azure. Конечная точка используется в качестве источника потока данных, созданного в этом руководстве. Дополнительные сведения о конечной точке потока данных брокера MQTT по умолчанию см. в статье о локальной конечной точке брокера MQTT Azure IoT Operations по умолчанию.
При публикации tutorial/local
в разделе на локальном брокере MQTT операций Интернета вещей Azure сообщение переместится на telemetry/aio
раздел удаленного брокера MQTT сетки событий. Затем сообщение перемыкается обратно в tutorial/cloud
раздел (так как telemetry/#
подстановочный знак захватывает его) на локальном брокере MQTT операций Интернета вещей Azure. Аналогичным образом, когда вы публикуете telemetry/aio
раздел в удаленном брокере MQTT сетки событий, сообщение будет мостом к tutorial/cloud
теме локального брокера MQTT операций Интернета вещей Azure.
Развертывание клиента MQTT
Чтобы проверить работу моста MQTT, разверните клиент MQTT в том же пространстве имен, что и Операции Интернета вещей Azure.
В настоящее время Bicep не применяется к развертыванию клиента MQTT.
Запуск подписчика
Используется kubectl exec
для запуска оболочки в модуле pod клиента Mosquitto.
kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh
В оболочке запустите подписчик брокера Операций Интернета вещей Azure в tutorial/#
пространстве mosquitto_sub
тем.
mosquitto_sub --host aio-broker --port 18883 \
-t "tutorial/#" \
--debug --cafile /var/run/certs/ca.crt \
-D CONNECT authentication-method 'K8S-SAT' \
-D CONNECT authentication-data $(cat /var/run/secrets/tokens/broker-sat)
Оставьте команду запущенной и откройте новое окно терминала.
Публикация сообщений MQTT в облаке через мост
В новом окне терминала запустите другую оболочку в модуле клиента Mosquitto.
kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh
В оболочке используйте mosquitto для публикации пяти сообщений в tutorial/local
раздел.
mosquitto_pub -h aio-broker -p 18883 \
-m "This message goes all the way to the cloud and back!" \
-t "tutorial/local" \
--repeat 5 --repeat-delay 1 -d \
--debug --cafile /var/run/certs/ca.crt \
-D CONNECT authentication-method 'K8S-SAT' \
-D CONNECT authentication-data $(cat /var/run/secrets/tokens/broker-sat)
Просмотр сообщений в подписчике
В оболочке подписчика отображаются опубликованные сообщения.
Client null sending CONNECT
Client $server-generated/0000aaaa-11bb-cccc-dd22-eeeeee333333 received CONNACK (0)
Client $server-generated/0000aaaa-11bb-cccc-dd22-eeeeee333333 sending SUBSCRIBE (Mid: 1, Topic: tutorial/#, QoS: 0, Options: 0x00)
Client $server-generated/0000aaaa-11bb-cccc-dd22-eeeeee333333 received SUBACK
Subscribed (mid: 1): 0
Client $server-generated/0000aaaa-11bb-cccc-dd22-eeeeee333333 sending PINGREQ
Client $server-generated/0000aaaa-11bb-cccc-dd22-eeeeee333333 received PINGRESP
Client $server-generated/0000aaaa-11bb-cccc-dd22-eeeeee333333 received PUBLISH (d0, q0, r0, m0, 'tutorial/local', ... (52 bytes))
This message goes all the way to the cloud and back!
Client $server-generated/0000aaaa-11bb-cccc-dd22-eeeeee333333 received PUBLISH (d0, q0, r0, m0, 'tutorial/local', ... (52 bytes))
This message goes all the way to the cloud and back!
Client $server-generated/0000aaaa-11bb-cccc-dd22-eeeeee333333 received PUBLISH (d0, q0, r0, m0, 'tutorial/local', ... (52 bytes))
This message goes all the way to the cloud and back!
Client $server-generated/0000aaaa-11bb-cccc-dd22-eeeeee333333 received PUBLISH (d0, q0, r0, m0, 'tutorial/local', ... (52 bytes))
This message goes all the way to the cloud and back!
Client $server-generated/0000aaaa-11bb-cccc-dd22-eeeeee333333 received PUBLISH (d0, q0, r0, m0, 'tutorial/local', ... (52 bytes))
This message goes all the way to the cloud and back!
Client $server-generated/0000aaaa-11bb-cccc-dd22-eeeeee333333 sending PINGREQ
Client $server-generated/0000aaaa-11bb-cccc-dd22-eeeeee333333 received PINGRESP
Здесь вы увидите, что сообщения публикуются в локальном брокере Операций Интернета вещей Azure, мостом к брокеру tutorial/local
MQTT сетки событий, а затем снова перемыкаются к локальному брокеру Операций Интернета вещей Azure снова в tutorial/cloud
этой теме. Затем сообщения доставляются подписчику. В этом примере время кругового пути составляет около 80 мс.
Проверка метрик сетки событий для проверки доставки сообщений
Вы также можете проверить метрики сетки событий, чтобы убедиться, что сообщения доставляются брокеру MQTT сетки событий. В портал Azure перейдите в созданное пространство имен Сетки событий. В разделе Метрики MQTT: успешные опубликованные>сообщения. Вы должны увидеть количество опубликованных и доставленных сообщений по мере публикации сообщений в локальном брокере Операций Интернета вещей Azure.
Совет
Конфигурации потоков данных, QoS и маршрутов сообщений можно проверить с помощью расширенияaz iot ops check --detail-level 2
CLI.
Следующие шаги
В этом руководстве вы узнали, как настроить операции Интернета вещей Azure для моста MQTT с помощью брокера MQTT Сетка событий Azure MQTT. В следующих случаях изучите следующие сценарии:
- Чтобы использовать клиент MQTT для публикации сообщений непосредственно в брокере MQTT Сетки событий, см. статью "Публикация сообщений MQTT" в брокере MQTT Сетки событий. Предоставьте клиенту привязку разрешений издателя к созданному пространству тем, и вы можете публиковать сообщения в любой
telemetry
теме, напримерtelemetry/temperature
илиtelemetry/humidity
. Все эти сообщения связаны с темойtutorial/cloud
на локальном брокере Операций Интернета вещей Azure. - Сведения о настройке правил маршрутизации для брокера MQTT сетки событий см. в разделе "Настройка правил маршрутизации для брокера MQTT сетки событий". Правила маршрутизации можно использовать для маршрутизации сообщений в разные разделы на основе имени раздела или фильтрации сообщений на основе содержимого сообщения.