Бөлісу құралы:


Руководство. Двунаправленный мост MQTT для Сетка событий Azure

Внимание

Предварительная версия операций Интернета вещей Azure, включенная Azure Arc в настоящее время в предварительной версии. Не следует использовать это программное обеспечение предварительной версии в рабочих средах.

Вам потребуется развернуть новую установку Операций Интернета вещей Azure, когда общедоступная версия станет доступной. Вы не сможете обновить предварительную установку.

Юридические условия, применимые к функциям Azure, которые находятся в бета-версии, предварительной версии или в противном случае еще не выпущены в общедоступную версию, см . в дополнительных условиях использования для предварительных версий Microsoft Azure.

В этом руководстве описано, как настроить двунаправленный мост MQTT между брокером MQTT операций Интернета вещей Azure и Сетка событий Azure. Чтобы упростить руководство, используйте параметры по умолчанию для брокера MQTT Операций Интернета вещей 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для , aioInstanceNameeventGridHostName с вашими.

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.

Снимок экрана: представление метрик в портал Azure для отображения успешных сообщений MQTT.

Совет

Конфигурации потоков данных, QoS и маршрутов сообщений можно проверить с помощью расширения az iot ops check --detail-level 2CLI.

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

В этом руководстве вы узнали, как настроить операции Интернета вещей Azure для моста MQTT с помощью брокера MQTT Сетка событий Azure MQTT. В следующих случаях изучите следующие сценарии:

  • Чтобы использовать клиент MQTT для публикации сообщений непосредственно в брокере MQTT Сетки событий, см. статью "Публикация сообщений MQTT" в брокере MQTT Сетки событий. Предоставьте клиенту привязку разрешений издателя к созданному пространству тем, и вы можете публиковать сообщения в любой telemetryтеме, например telemetry/temperature или telemetry/humidity. Все эти сообщения связаны с темой tutorial/cloud на локальном брокере Операций Интернета вещей Azure.
  • Сведения о настройке правил маршрутизации для брокера MQTT сетки событий см. в разделе "Настройка правил маршрутизации для брокера MQTT сетки событий". Правила маршрутизации можно использовать для маршрутизации сообщений в разные разделы на основе имени раздела или фильтрации сообщений на основе содержимого сообщения.