Tutorial: Konfigurieren der MQTT-Bridge zwischen der Azure IoT MQ-Vorschau und Azure Event Grid
Wichtig
Die von Azure Arc aktivierte Azure IoT Operations Preview befindet sich derzeit in der VORSCHAU. Sie sollten diese Vorschausoftware nicht in Produktionsumgebungen verwenden.
Die zusätzlichen Nutzungsbestimmungen für Microsoft Azure-Vorschauen enthalten rechtliche Bedingungen. Sie gelten für diejenigen Azure-Features, die sich in der Beta- oder Vorschauversion befinden oder aber anderweitig noch nicht zur allgemeinen Verfügbarkeit freigegeben sind.
In diesem Tutorial erfahren Sie, wie Sie IoT MQ für bidirektionale MQTT-Bridge mit dem Azure Event Grid MQTT-Broker PaaS konfigurieren. Sie können diese Funktion verwenden, um Ihre IoT-Daten am Edge und in der Cloud zu verarbeiten. Sie können beispielsweise IoT MQ verwenden, um Telemetriedaten am Edge-Bereich zu verarbeiten und dann die Daten zum Azure Event Grid für die weitere Verarbeitung in der Cloud zu überbrücken.
Voraussetzungen
Festlegen von Umgebungsvariablen
Anmelden mit der Azure CLI:
az login
Legen Sie Umgebungsvariablen für den Rest des Setups fest. Ersetzen Sie Werte in <>
durch gültige Werte oder Namen Ihrer Wahl. Auf der Grundlage der von Ihnen angegebenen Namen werden in Ihrem Azure-Abonnement ein neuer Azure Event Grid-Namespace und ein Themenbereich erstellt:
# 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>
Event Grid-Namespace mit aktiviertem MQTT-Broker erstellen
Erstellen eines Event Grid-Namespace mit Azure CLI. Der Speicherort sollte mit dem Speicherort übereinstimmen, den Sie zum Bereitstellen von Azure IoT Operations verwendet haben.
az eventgrid namespace create \
--namespace-name $EVENT_GRID_NAMESPACE \
--resource-group $RESOURCE_GROUP \
--location $LOCATION \
--topic-spaces-configuration "{state:Enabled,maximumClientSessionsPerAuthenticationName:3}"
Durch Festlegen des topic-spaces-configuration
erstellt dieser Befehl einen Namespace mit:
- MQTT-Broker aktiviert
- Maximale Clientsitzungen pro Authentifizierungsname als 3.
Mit der Option für max. Clientsitzungen kann IoT MQ mehrere Instanzen erzeugen und trotzdem eine Verbindung herstellen. Weitere Informationen finden Sie unter Unterstützung für mehrere Sitzungen.
Erstellen eines Themenbereichs
Erstellen Sie im Event Grid-Namespace einen Themenbereich tutorial
mit einer Themenvorlage telemetry/#
.
az eventgrid namespace topic-space create \
--resource-group $RESOURCE_GROUP \
--namespace-name $EVENT_GRID_NAMESPACE \
--name tutorial \
--topic-templates "telemetry/#"
Mithilfe des Platzhalters #
in der Themenvorlage können Sie in jedem Thema im telemetry
Themenbereich veröffentlichen. Zum Beispiel: telemetry/temperature
oder telemetry/humidity
.
Gewähren des Zugangs zum Event Grid Themenbereich für die Azure IoT MQ-Vorschau
Suchen Sie mithilfe von az k8s-extension show
die Prinzipal-ID für die Arc-Erweiterung von Azure IoT-MQ. Der Befehl speichert die Prinzipal-ID in einer Variablen für die spätere Verwendung.
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
Notieren Sie sich den Ausgabewert für identity.principalId
, bei dem es sich um einen GUID-Wert mit dem folgenden Format handelt:
d84481ae-9181-xxxx-xxxx-xxxxxxxxxxxx
Verwenden Sie dann Azure CLI, um Herausgeber- und Abonnentenrollen zu IoT MQ für den von Ihnen erstellten Themenbereich zuzuweisen.
Zuweisen der Herausgeberrolle:
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
Zuweisen der Abonnentenrolle:
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
Tipp
Der Umfang entspricht dem id
des Themenbereichs, den Sie mit az eventgrid namespace topic-space create
im vorherigen Schritt erstellt haben. Sie können ihn der Ausgabe des Befehls finden.
Hostname des Event Grid MQTT-Brokers
Verwenden Sie Azure CLI, um den Hostnamen des Event Grid MQTT-Brokers abzurufen.
az eventgrid namespace show \
--resource-group $RESOURCE_GROUP \
--namespace-name $EVENT_GRID_NAMESPACE \
--query topicSpacesConfiguration.hostname \
-o tsv
Notieren Sie sich den Ausgabewert für topicSpacesConfiguration.hostname
, bei dem es sich um einen Hostnamenwert handelt, der wie folgt aussieht:
example.region-1.ts.eventgrid.azure.net
Erstellen eines MQTT-Bridge-Connectors und Themenzuordnungsressourcen
Geben Sie in einer neuen Datei mit dem Namen bridge.yaml
den MQTT-Bridge-Connector und die Themenzuordnungskonfiguration an. Ersetzen Sie den Beispielplatzhalterwert in remoteBrokerConnectionendpoint
durch den Event Grid MQTT-Hostnamen aus dem vorherigen Schritt. Schließen Sie die Portnummer 8883 ein.
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
Sie konfigurieren den MQTT-Bridge-Connector folgendermaßen:
- Verwenden des Event Grid MQTT-Brokers als Remote-Broker
- Verwenden des lokalen IoT MQ-Brokers als lokalen Broker
- Verwenden von TLS für Remote-Broker und lokale Broker
- Verwenden der systemseitig zugewiesenen verwalteten Identität für die Authentifizierung bei dem Remote-Broker
- Verwenden des Kubernetes-Dienstkontos für die Authentifizierung für den lokalen Broker
- Verwenden der Themenzuordnung zum Zuordnen des Themas
tutorial/local
zum Thematelemetry/iot-mq
des Remote-Brokers - Verwenden Sie die Themenzuordnung, um das Thema
telemetry/#
auf dem Remote-Broker dem Thematutorial/cloud
auf dem lokalen Broker zuzuordnen
Wenn Sie im Thema tutorial/local
zum lokalen IoT MQ-Broker veröffentlichen, wird die Nachricht mit dem Thema telemetry/iot-mq
zum Remote Event Grid MQTT-Broker überbrückt. Anschließend wird die Nachricht zurück zum Thema tutorial/cloud
zum lokalen IoT MQ-Broker überbrückt. Ebenso wird die Nachricht, wenn Sie das Thema telemetry/iot-mq
auf dem Remote Event Grid MQTT Broker veröffentlichen, mit dem Thema tutorial/cloud
zum lokalen IoT MQ Broker überbrückt.
Wenden Sie die Bereitstellungsdatei mit kubectl an.
kubectl apply -f bridge.yaml
mqttbridgeconnector.mq.iotoperations.azure.com/tutorial-bridge created
mqttbridgetopicmap.mq.iotoperations.azure.com/tutorial-topic-map created
Überprüfen der MQTT-Brückenbereitstellung
Verwenden Sie kubectl, um zu überprüfen, ob die beiden Brückeninstanzen bereit und ausgeführt werden.
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
Sie können jetzt auf dem lokalen Broker veröffentlichen und den Event Grid MQTT Broker abonnieren und den Nachrichtenfluss wie erwartet überprüfen.
Bereitstellen des MQTT-Clients
Um zu überprüfen, ob die MQTT-Brücke funktioniert, stellen Sie einen MQTT-Client auf dem selben Namespace wie IoT MQ bereit. Geben Sie in einer neuen Datei mit dem Namen client.yaml
die Clientbereitstellung an:
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
Wenden Sie die Bereitstellungsdatei mit kubectl an.
kubectl apply -f client.yaml
pod/mqtt-client created
Starten eines Abonnenten
Verwenden Sie kubectl exec
, um eine Shell im Mosquitto-Client-Pod zu starten.
kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh
Starten Sie innerhalb der Shell einen Abonnenten des IoT MQ Brokers im Themenbereich tutorial/#
mit mqttui.
mqttui log "tutorial/#" \
-b mqtts://aio-mq-dmqtt-frontend:8883 \
-u '$sat' \
--password $(cat /var/run/secrets/tokens/mq-sat) \
--insecure
Lassen Sie den Befehl laufen und öffnen Sie ein neues Terminalfenster.
Veröffentlichen von MQTT-Nachrichten in der Cloud über die Brücke
Starten Sie in einem neuen Terminalfenster eine weitere Shell im Mosquitto-Client-Pod.
kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh
Verwenden Sie mosquitto in der Shell, um fünf Nachrichten im Thema tutorial/local
zu veröffentlichen.
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
Anzeigen der Nachrichten im Abonnenten
In der Abonnentenshell werden die von Ihnen veröffentlichten Nachrichten angezeigt.
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!
Hier sehen Sie, dass die Nachrichten im lokalen IoT MQ-Broker im tutorial/local
Thema veröffentlicht werden, zu Event Grid MQTT Broker überbrückt und dann wieder zum lokalen IoT MQ Broker im Thema tutorial/cloud
überbrückt. Die Nachrichten werden dann an den Abonnenten übermittelt. In diesem Beispiel beträgt die Roundtrip-Zeit etwa 80 ms.
Überprüfen von Event Grid-Metriken, um die Nachrichtenübermittlung zu überprüfen
Sie können auch die Event-Grid-Metriken überprüfen, um zu verifizieren, dass die Nachrichten an den Event Grid MQTT-Broker übermittelt werden. Navigieren Sie im Azure-Portal zum von Ihnen erstellten Event Grid-Namespace. Unter Metriken>MQTT: Erfolgreich veröffentlichte Nachrichten. Die Anzahl der veröffentlichten und übermittelten Nachrichten sollte beim Veröffentlichen von Nachrichten an den lokalen IoT MQ-Broker erhöht werden.
Tipp
Sie können die Konfigurationen von Themenkarten, QoS und Nachrichtenrouten mit der CLI-Erweiterungaz iot ops check --detail-level 2
überprüfen.
Nächste Schritte
In diesem Tutorial haben Sie gelernt, wie man IoT MQ für bidirektionale MQTT-Bridge mit dem Azure Event Grid MQTT-Broker PaaS konfiguriert. Erkunden Sie als Nächstes die folgenden Szenarien:
- Wenn Sie einen MQTT-Client verwenden möchten, um Nachrichten direkt im Event Grid MQTT-Broker zu veröffentlichen, lesen Sie Veröffentlichen von MQTT-Nachrichten im Event Grid MQTT-Broker. Weisen Sie dem Client eine Herausgeberberechtigungsbindung an den von Ihnen erstellten Themenbereich zu, und Sie können Nachrichten in einem beliebigen Thema unter dem
telemetry
veröffentlichen, wietelemetry/temperature
odertelemetry/humidity
. All diese Nachrichten werden mit dem Thematutorial/cloud
auf dem lokalen IoT MQ-Broker überbrückt. - Zum Einrichten von Routingregeln für den Event Grid MQTT-Broker, siehe Konfigurieren von Routingregeln für den Event Grid MQTT-Broker. Mithilfe von Routingregeln können Sie Nachrichten basierend auf dem Themennamen an verschiedene Themen weiterleiten oder Nachrichten basierend auf dem Nachrichteninhalt filtern.
Zugehöriger Inhalt
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für