Руководство. Двунаправленный мост MQTT для Сетка событий Azure
Внимание
Предварительная версия операций Интернета вещей Azure, включенная Azure Arc в настоящее время в предварительной версии. Не следует использовать это программное обеспечение предварительной версии в рабочих средах.
Вам потребуется развернуть новую установку Операций Интернета вещей Azure, когда общедоступная версия станет доступной. Вы не сможете обновить предварительную установку.
Юридические условия, применимые к функциям 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}"
Задав 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 со следующим форматом:
d84481ae-9181-xxxx-xxxx-xxxxxxxxxxxx
Затем используйте 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
Общие сведения о конечной точке потока данных брокера MQTT по умолчанию Для операций Интернета вещей Azure
По умолчанию Операции Интернета вещей Azure развертывают брокер MQTT, а также конечную точку потока данных брокера MQTT. Конечная точка потока данных брокера MQTT используется для подключения к брокеру MQTT. Конфигурация по умолчанию использует встроенный маркер учетной записи службы для проверки подлинности. Конечная точка называется default
и доступна в том же пространстве имен, что и Операции Интернета вещей Azure. Конечная точка используется в качестве источника для потоков данных, создаваемых на следующих шагах.
Дополнительные сведения о конечной точке потока данных брокера MQTT по умолчанию см. в статье о локальной конечной точке брокера MQTT Azure IoT Operations.
Создание конечной точки потока данных Сетка событий Azure
Создайте конечную точку потока данных для Сетка событий Azure. Эта конечная точка является назначением потока данных, который отправляет сообщения в Сетка событий Azure. Замените <EVENT_GRID_HOSTNAME>
на имя узла MQTT, полученное на предыдущем шаге. Включите номер 8883
порта.
Конечные точки потока данных и потоков данных Сетка событий Azure можно развернуть как стандартные ресурсы Azure, так как у них есть реализации поставщика ресурсов Azure (RPS). Этот файл шаблона Bicep из Bicep File for MQTT-bridge dataflow 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-09-15-preview' existing = {
name: aioInstanceName
}
resource remoteMqttBrokerDataflowEndpoint 'Microsoft.IoTOperations/instances/dataflowEndpoints@2024-09-15-preview' = {
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-09-15-preview' existing = {
name: aioInstanceName
}
resource defaultDataflowProfile 'Microsoft.IoTOperations/instances/dataflowProfiles@2024-09-15-preview' existing = {
parent: aioInstance
name: 'default'
}
resource dataflow_1 'Microsoft.IoTOperations/instances/dataflowProfiles/dataflows@2024-09-15-preview' = {
parent: defaultDataflowProfile
name: 'local-to-remote'
extendedLocation: {
name: customLocation.id
type: 'CustomLocation'
}
properties: {
mode: 'Enabled'
operations: [
{
operationType: 'Source'
sourceSettings: {
endpointRef: 'default'
dataSources: array('tutorial/local')
}
}
{
operationType: 'Destination'
destinationSettings: {
endpointRef: remoteMqttBrokerDataflowEndpoint.name
dataDestination: 'telemetry/aio'
}
}
]
}
}
resource dataflow_2 'Microsoft.IoTOperations/instances/dataflowProfiles/dataflows@2024-09-15-preview' = {
parent: defaultDataflowProfile
name: 'remote-to-local'
extendedLocation: {
name: customLocation.id
type: 'CustomLocation'
}
properties: {
mode: 'Enabled'
operations: [
{
operationType: 'Source'
sourceSettings: {
endpointRef: remoteMqttBrokerDataflowEndpoint.name
dataSources: array('telemetry/#')
}
}
{
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
разделом на локальном брокере
При публикации tutorial/local
в разделе на локальном брокере MQTT операций Интернета вещей Azure сообщение переместится на telemetry/aio
раздел удаленного брокера MQTT сетки событий. Затем сообщение перемыкается обратно в tutorial/cloud
раздел (так как telemetry/#
подстановочный знак захватывает его) на локальном брокере MQTT операций Интернета вещей Azure. Аналогичным образом, когда вы публикуете telemetry/aio
раздел в удаленном брокере MQTT сетки событий, сообщение будет мостом к tutorial/cloud
теме локального брокера MQTT операций Интернета вещей Azure.
Развертывание клиента MQTT
Чтобы проверить работу моста MQTT, разверните клиент MQTT в том же пространстве имен, что и Операции Интернета вещей Azure. В новом файле с именем client.yaml
укажите развертывание клиента:
В настоящее время 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)
Просмотр сообщений в подписчике
В оболочке подписчика отображаются опубликованные сообщения.
Здесь вы увидите, что сообщения публикуются в локальном брокере Операций Интернета вещей 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 сетки событий". Правила маршрутизации можно использовать для маршрутизации сообщений в разные разделы на основе имени раздела или фильтрации сообщений на основе содержимого сообщения.