Tutoriel : configurer un pont MQTT entre Azure IoT MQ (préversion) et Azure Event Grid
Important
Opérations Azure IoT (préversion) – activé parc Azure Arc est actuellement en PRÉVERSION. Vous ne devez pas utiliser ce logiciel en préversion dans des environnements de production.
Pour connaître les conditions juridiques qui s’appliquent aux fonctionnalités Azure en version bêta, en préversion ou plus généralement non encore en disponibilité générale, consultez l’Avenant aux conditions d’utilisation des préversions de Microsoft Azure.
Dans ce tutoriel, vous allez apprendre à configurer IoT MQ pour un pont MQTT bidirectionnel avec Azure Event Grid MQTT Broker PaaS. Vous pouvez utiliser cette fonctionnalité pour traiter vos données IoT à la périphérie et dans le cloud. Par exemple, vous pouvez utiliser IoT MQ pour traiter les données de télémétrie à la périphérie, puis relier les données à Azure Event Grid pour un traitement plus approfondi dans le cloud.
Prérequis
Définir des variables d’environnement
Se connecter avec Azure CLI :
az login
Définissez des variables d’environnement pour le reste de la configuration. Remplacez les valeurs dans <>
par des valeurs ou des noms valides de votre choix. Un nouvel espace de noms et un espace de rubrique Azure Event Grid sont créés dans votre abonnement Azure en fonction des noms que vous fournissez :
# 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>
Créer un espace de noms Event Grid avec MQTT Broker activé
Créer un espace de noms Event Grid avec Azure CLI. L’emplacement doit être identique à celui que vous avez utilisé pour déployer des opérations Azure IoT.
az eventgrid namespace create \
--namespace-name $EVENT_GRID_NAMESPACE \
--resource-group $RESOURCE_GROUP \
--location $LOCATION \
--topic-spaces-configuration "{state:Enabled,maximumClientSessionsPerAuthenticationName:3}"
En définissant le topic-spaces-configuration
, cette commande crée un espace de noms avec :
- MQTT broker activé
- Nombre maximal de sessions clientes par nom d’authentification 3.
L’option max client sessions permet à IoT MQ de générer plusieurs instances et de se connecter. Pour plus d’informations, consultez support multisession.
Créer un espace de rubrique
Dans l’espace de noms Event Grid, créez un espace de rubrique nommé tutorial
avec un modèle de rubrique telemetry/#
.
az eventgrid namespace topic-space create \
--resource-group $RESOURCE_GROUP \
--namespace-name $EVENT_GRID_NAMESPACE \
--name tutorial \
--topic-templates "telemetry/#"
En utilisant le caractère générique #
dans le modèle de rubrique, vous pouvez publier sur n’importe quelle rubrique sous l’espace de rubriquetelemetry
. Par exemple, telemetry/temperature
ou telemetry/humidity
.
Accorder à Azure IoT MQ préversion l’accès à l’espace de rubrique Event Grid
À l’aide de az k8s-extension show
, recherchez l’ID de principal de l’extension Azure IoT MQ Arc. La commande stocke l’ID du principal dans une variable pour une utilisation ultérieure.
export PRINCIPAL_ID=$(az k8s-extension show \
--resource-group $RESOURCE_GROUP \
--cluster-name $CLUSTER_NAME \
--name mq \
--cluster-type connectedClusters \
--query identity.principalId -o tsv)
echo $PRINCIPAL_ID
Notez la valeur de sortie de identity.principalId
, qui est une valeur GUID au format suivant :
d84481ae-9181-xxxx-xxxx-xxxxxxxxxxxx
Ensuite, utilisez Azure CLI pour attribuer des rôles d’éditeur et d’abonné à IoT MQ pour l’espace de rubrique que vous avez créé.
Attribuez le rôle d’éditeur :
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
Attribuez le rôle d’abonné :
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
Conseil
L’étendue correspond à la id
de l’espace de rubrique que vous avez créé avec az eventgrid namespace topic-space create
à l’étape précédente, et vous pouvez la trouver dans la sortie de la commande.
Nom d’hôte du MQTT Broker Event Grid
Utilisez Azure CLI pour obtenir le nom d’hôte du MQTT Broker Event Grid.
az eventgrid namespace show \
--resource-group $RESOURCE_GROUP \
--namespace-name $EVENT_GRID_NAMESPACE \
--query topicSpacesConfiguration.hostname \
-o tsv
Prenez note de la valeur de sortie pour topicSpacesConfiguration.hostname
qui est une valeur de nom d’hôte qui ressemble à ceci :
example.region-1.ts.eventgrid.azure.net
Créer un connecteur de pont MQTT et des ressources de mappage de rubriques
Dans un nouveau fichier nommé bridge.yaml
, spécifiez la configuration du connecteur de pont MQTT et de la carte de rubriques. Remplacez l’exemple de valeur d’espace réservé dans remoteBrokerConnection endpoint
par le nom d’hôte MQTT Event Grid de l’étape précédente. Incluez le numéro de port 8883.
apiVersion: mq.iotoperations.azure.com/v1beta1
kind: MqttBridgeConnector
metadata:
name: tutorial-bridge
namespace: azure-iot-operations
spec:
image:
repository: mcr.microsoft.com/azureiotoperations/mqttbridge
tag: 0.4.0-preview
pullPolicy: IfNotPresent
protocol: v5
bridgeInstances: 2
logLevel: debug
remoteBrokerConnection:
endpoint: example.region-1.ts.eventgrid.azure.net:8883
tls:
tlsEnabled: true
authentication:
systemAssignedManagedIdentity:
audience: https://eventgrid.azure.net
localBrokerConnection:
endpoint: aio-mq-dmqtt-frontend:8883
tls:
tlsEnabled: true
trustedCaCertificateConfigMap: aio-ca-trust-bundle-test-only
authentication:
kubernetes: {}
---
apiVersion: mq.iotoperations.azure.com/v1beta1
kind: MqttBridgeTopicMap
metadata:
name: tutorial-topic-map
namespace: azure-iot-operations
spec:
mqttBridgeConnectorRef: tutorial-bridge
routes:
- direction: local-to-remote
name: publish
source: tutorial/local
target: telemetry/iot-mq
qos: 1
- direction: remote-to-local
name: subscribe
source: telemetry/#
target: tutorial/cloud
qos: 1
Vous configurez le connecteur de pont MQTT sur :
- Utiliser MQTT Broker Event Grid comme répartiteur distant
- Utiliser le répartiteur IoT MQ local comme répartiteur local
- Utiliser TLS pour les répartiteurs distants et locaux
- Utiliser l’identité managée affectée par le système pour l’authentification auprès du répartiteur distant
- Utiliser le compte de service Kubernetes pour l’authentification auprès du répartiteur local
- Utilisez le mappage de rubriques pour mapper la rubrique
tutorial/local
à la rubriquetelemetry/iot-mq
sur le répartiteur distant - Utilisez le mappage de rubriques pour mapper la rubrique
telemetry/#
sur le répartiteur distant à la rubriquetutorial/cloud
sur le répartiteur local
Lorsque vous publiez sur la rubrique tutorial/local
sur le répartiteur MQ IoT local, le message est ponté vers la rubrique telemetry/iot-mq
sur MQTT Broker Event Grid distant. Ensuite, le message est renvoyé à la rubrique tutorial/cloud
sur le répartiteur IoT MQ local. Lorsque vous publiez sur la rubrique telemetry/iot-mq
sur le MQTT Broker Event Grid local, le message est ponté vers la rubrique tutorial/cloud
sur le MQTT Broker Event Grid distant.
Appliquez le fichier de déploiement avec kubectl.
kubectl apply -f bridge.yaml
mqttbridgeconnector.mq.iotoperations.azure.com/tutorial-bridge created
mqttbridgetopicmap.mq.iotoperations.azure.com/tutorial-topic-map created
Vérifier le déploiement du pont MQTT
Utilisez kubectl pour vérifier que les deux instances de pont sont prêtes et en cours d’exécution.
kubectl get pods -n azure-iot-operations -l app=aio-mq-mqttbridge
NAME READY STATUS RESTARTS AGE
aio-mq-tutorial-bridge-0 1/1 Running 0 45s
aio-mq-tutorial-bridge-1 1/1 Running 0 45s
Vous pouvez maintenant publier sur le répartiteur local et vous abonner au MQTT Broker Event Grid et vérifier le flux de messages comme prévu.
Déployer le client MQTT
Pour vérifier que le pont MQTT fonctionne, déployez un client MQTT sur le même espace de noms que IoT MQ. Dans un nouveau fichier nommé client.yaml
, spécifiez le déploiement du client :
apiVersion: v1
kind: Pod
metadata:
name: mqtt-client
namespace: azure-iot-operations
spec:
serviceAccountName: mqtt-client
containers:
- image: alpine
name: mqtt-client
command: ["sh", "-c"]
args: ["apk add mosquitto-clients mqttui && sleep infinity"]
volumeMounts:
- name: mq-sat
mountPath: /var/run/secrets/tokens
- name: trust-bundle
mountPath: /var/run/certs
volumes:
- name: mq-sat
projected:
sources:
- serviceAccountToken:
path: mq-sat
audience: aio-mq
expirationSeconds: 86400
- name: trust-bundle
configMap:
name: aio-ca-trust-bundle-test-only
Appliquez le fichier de déploiement avec kubectl.
kubectl apply -f client.yaml
pod/mqtt-client created
Démarrer un abonné
Utilisez kubectl exec
pour démarrer un interpréteur de commandes dans le pod client mosquitto.
kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh
À l’intérieur de l’interpréteur de commandes, démarrez un abonné au répartiteur MQ IoT sur l’espace de rubrique tutorial/#
avec mqttui.
mqttui log "tutorial/#" \
-b mqtts://aio-mq-dmqtt-frontend:8883 \
-u '$sat' \
--password $(cat /var/run/secrets/tokens/mq-sat) \
--insecure
Laissez la commande en cours d’exécution et ouvrez une nouvelle fenêtre de terminal.
Publier des messages MQTT dans le cloud via le pont
Dans une nouvelle fenêtre de terminal, démarrez un autre interpréteur de commandes dans le pod client mosquitto.
kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh
Dans l’interpréteur de commandes, utilisez mosquitto pour publier cinq messages dans la rubrique tutorial/local
.
mosquitto_pub -h aio-mq-dmqtt-frontend -p 8883 \
-m "This message goes all the way to the cloud and back!" \
-t "tutorial/local" -u '$sat' -P $(cat /var/run/secrets/tokens/mq-sat) \
--cafile /var/run/certs/ca.crt \
--repeat 5 --repeat-delay 1 -d
Afficher les messages dans l’abonné
Dans l’interpréteur de commandes de l’abonné, vous voyez les messages que vous avez publiés.
23:17:50.802 QoS:AtMostOnce tutorial/local Payload( 52): This message goes all the way to the cloud and back!
23:17:51.086 QoS:AtMostOnce tutorial/cloud Payload( 52): This message goes all the way to the cloud and back!
23:17:51.803 QoS:AtMostOnce tutorial/local Payload( 52): This message goes all the way to the cloud and back!
23:17:51.888 QoS:AtMostOnce tutorial/cloud Payload( 52): This message goes all the way to the cloud and back!
23:17:52.804 QoS:AtMostOnce tutorial/local Payload( 52): This message goes all the way to the cloud and back!
23:17:52.888 QoS:AtMostOnce tutorial/cloud Payload( 52): This message goes all the way to the cloud and back!
23:17:53.805 QoS:AtMostOnce tutorial/local Payload( 52): This message goes all the way to the cloud and back!
23:17:53.895 QoS:AtMostOnce tutorial/cloud Payload( 52): This message goes all the way to the cloud and back!
23:17:54.807 QoS:AtMostOnce tutorial/local Payload( 52): This message goes all the way to the cloud and back!
23:17:54.881 QoS:AtMostOnce tutorial/cloud Payload( 52): This message goes all the way to the cloud and back!
Ici, vous voyez que les messages sont publiés sur le répartiteur MQ IoT local dans la rubrique tutorial/local
, pontés vers MQTT Broker Event Grid, puis renvoyés au répartiteur IoT MQ local sur la rubrique tutorial/cloud
. Les messages sont ensuite remis à l’abonné. Dans cet exemple, le temps d’aller-retour est d’environ 80 ms.
Vérifier les métriques Event Grid pour vérifier la remise des messages
Vous pouvez également vérifier les métriques Event Grid pour vérifier que les messages sont remis au MQTT Broker Event Grid. Dans le portail Azure, accédez à l’espace de noms Event Grid que vous avez créé. Sous Métriques>MQTT : Messages publiés réussis. Vous devez voir le nombre de messages publiés et remis augmenter lorsque vous publiez des messages sur le répartiteur IoT MQ local.
Conseil
Vous pouvez vérifier les configurations des cartes de rubriques, de la QoS et des routes de message avec l’extension CLI az iot ops check --detail-level 2
.
Étapes suivantes
Dans ce tutoriel, vous avez appris à configurer IoT MQ pour le pont MQTT bidirectionnel avec le MQTT Broker Azure Event Grid. À l’étape suivante, explorez les scénarios suivants :
- Pour utiliser un client MQTT pour publier des messages directement sur le MQTT Broker Event Grid, consultez Publier des messages MQTT sur le MQTT Broker Event Grid. Donnez au client une liaison d’autorisation d’éditeur à l’espace de rubrique que vous avez créé et vous pouvez publier des messages dans n’importe quelle rubrique sous le
telemetry
, commetelemetry/temperature
outelemetry/humidity
. Tous ces messages sont liés à la rubriquetutorial/cloud
sur le répartiteur IoT MQ local. - Pour configurer des règles de routage pour le MQTT Broker Event Grid, consultez Configurer des règles d’acheminement pour le MQTT Broker Event Grid. Vous pouvez utiliser des règles d’acheminement pour router les messages vers différentes rubriques en fonction du nom de la rubrique ou pour filtrer les messages en fonction du contenu du message.
Contenu connexe
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de l’année 2024, nous abandonnerons progressivement le mécanisme de retour d’information GitHub Issues pour le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultez :Soumettre et afficher des commentaires pour