Tutorial: Bidirektionale MQTT-Brücke zu Azure Event Grid
Wichtig
Diese Seite enthält Anweisungen zum Verwalten der Komponenten von Azure IoT Einsatz mithilfe von Kubernetes-Bereitstellungsmanifesten. Diese Option befindet sich in der Vorschau. Dieses Feature wird mit einigen Einschränkungen bereitgestellt und sollte nicht für Produktionsworkloads verwendet werden.
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 Lernprogramm richten Sie eine bidirektionale MQTT-Brücke zwischen einem Azure IoT Einsatz MQTT-Broker und Azure Event Grid ein. Um das Tutorial einfach zu halten, werden die Standardeinstellungen für den MQTT-Broker von Azure IoT Einsatz und die Azure Event Grid-Endpunkte verwendet und wird keine Transformation angewendet.
Voraussetzungen
- Azure IoT Einsatz. Siehe Bereitstellen von „Azure IoT Einsatz“.
- Datenflussprofil. Weitere Informationen finden Sie unter Konfigurieren eines Datenflussprofils.
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}"
Wenn die eventgrid
-Erweiterung nicht installiert ist, erhalten Sie eine Eingabeaufforderung, in der Sie gefragt werden, ob Sie sie installieren möchten. Wählen Sie Y
aus, um die Erweiterung zu installieren.
Durch Festlegen des topic-spaces-configuration
erstellt dieser Befehl einen Namespace mit:
- MQTT-Broker aktiviert
- Maximale Clientsitzungen pro Authentifizierungsname als 3.
Die Option „Max.-Clientsitzungen“ ermöglicht Azure IoT Einsatz MQTT, mehrere Instanzen zu erzeugen und trotzdem eine Verbindung herzustellen. 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 Einsatz
Suchen Sie mithilfe der Azure CLI die Prinzipal-ID für die Arc-Erweiterung für Azure IoT Einsatz. Der Befehl speichert die Prinzipal-ID in einer Variablen für die spätere Verwendung.
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
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 Azure IoT Einsatz MQTT die Herausgeber- und Abonnentenrolle 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 Azure Event Grid-Datenflussendpunkts
Erstellen Sie den Datenflussendpunkt für das Azure Event Grid. Dieser Endpunkt ist das Ziel für den Datenfluss, der Nachrichten an Azure Event Grid sendet. Ersetzen Sie <EVENT_GRID_HOSTNAME>
durch den MQTT-Hostnamen, den Sie im vorherigen Schritt ermittelt haben. Schließen Sie die Portnummer 8883
ein.
Der Datenfluss und die Datenflussendpunkte für Azure Event Grid können als Azure-Standardressourcen bereitgestellt werden, da sie über Azure Resource Provider-Implementierungen verfügen. Diese Bicep-Vorlagendatei aus der Bicep-Datei für das MQTT-Bridge Dataflow Tutorial stellt die erforderlichen Datenfluss- und Datenflussendpunkte bereit.
Laden Sie die Datei auf Ihren lokales Computer herunter, und stellen Sie sicher, dass Sie die Werte für customLocationName
, aioInstanceName
eventGridHostName
durch Ihre eigenen Werte ersetzen.
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'
}
}
}
}
Führen Sie als Nächstes in Ihrem Terminal den folgenden Befehl aus. Ersetzen Sie <FILE>
durch den Namen der heruntergeladenen Bicep-Datei.
az deployment group create --resource-group <RESOURCE_GROUP> --template-file <FILE>.bicep
Hier wird die Authentifizierungsmethode so festgelegt, dass SystemAssignedManagedIdentity
die verwaltete Identität der Azure IoT Einsatz-Erweiterung zur Authentifizierung beim MQTT-Broker von Event Grid verwendet wird. Diese Einstellung funktioniert, weil die Azure IoT Einsatz-Erweiterung über die erforderlichen Berechtigungen zum Veröffentlichen und Abonnieren des Event Grid-Themenbereichs verfügt, die über Azure RBAC-Rollen konfiguriert werden. Beachten Sie, dass in der Konfiguration keine Geheimnisse wie Benutzername oder Kennwort erforderlich sind.
Da der MQTT-Broker von Event Grid TLS erfordert, ist die Einstellung tls
aktiviert. Es ist nicht erforderlich, ein vertrauenswürdiges Zertifizierungsstellenzertifikat bereitzustellen, da der Event Grid MQTT-Broker eine vertrauenswürdige Zertifizierungsstelle verwendet.
Erstellen von Dataflows
Erstellen Sie zwei Datenflüsse mit dem MQTT-Brokerendpunkt von Azure IoT Einsatz als Quelle und dem Azure Event Grid-Endpunkt als Ziel und umgekehrt. Die Transformation muss nicht konfiguriert werden.
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'
}
}
]
}
}
Führen Sie wie beim Datenendpunkt in Ihrem Terminal den folgenden Befehl aus:
az deployment group create --resource-group <RESOURCE_GROUP> --template-file <FILE>.bicep
Zusammen bilden die beiden Datenflüsse eine MQTT-Brücke, wo Sie Folgendes tun können:
- Verwenden des Event Grid MQTT-Brokers als Remote-Broker
- Verwenden des lokalen MQTT-Brokers von Azure IoT Einsatz 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/aio
des Remote-Brokers - Verwenden Sie die Themenzuordnung, um das Thema
telemetry/#
auf dem Remote-Broker dem Thematutorial/cloud
auf dem lokalen Broker zuzuordnen
Hinweis
Standardmäßig stellt Azure IoT Einsatz einen MQTT-Broker sowie einen MQTT-Broker-Datenflussendpunkt bereit. Der MQTT-Broker-Datenflussendpunkt wird verwendet, um eine Verbindung mit dem MQTT-Broker herzustellen. In der Standardkonfiguration wird das integrierte Dienstkontotoken für die Authentifizierung verwendet. Der Endpunkt trägt den Namen default
und ist im selben Namespace wie Azure IoT Einsatz verfügbar. Der Endpunkt wird als Quelle für den Dataflow verwendet, der in diesem Tutorial erstellt wird. Weitere Informationen zum MQTT-Broker-Standard-Datenflussendpunkt finden Sie unter Lokaler MQTT-Broker-Standardendpunkt für Azure IoT Einsatz.
Wenn Sie das Thema tutorial/local
auf dem lokalen MQTT Broker von Azure IoT Einsatz veröffentlichen, wird die Nachricht mit dem Thema telemetry/aio
zum Remote-MQ Broker von Event Grid überbrückt. Anschließend wird die Nachricht zurück zum Thema tutorial/cloud
(weil es vom Platzhalterthema telemetry/#
erfasst wird) auf dem lokalen Azure IoT Operations MQTT-Broker überbrückt. Ebenso wird die Nachricht, wenn Sie das Thema telemetry/aio
auf dem Remote Event Grid MQTT Broker veröffentlichen, mit dem Thema tutorial/cloud
zum lokalen MQTT Broker von Azure IoT Einsatz überbrückt.
Bereitstellen des MQTT-Clients
Um zu überprüfen, ob die MQTT-Brücke funktioniert, stellen Sie einen MQTT-Client im selben Namespace wie Azure IoT Einsatz bereit. Geben Sie in einer neuen Datei mit dem Namen client.yaml
die Clientbereitstellung an:
Derzeit ist bicep nicht für die Bereitstellung des MQTT-Clients anwendbar.
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 Azure IoT Einsatz-Brokers im Themenbereich tutorial/#
mit 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)
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-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)
Anzeigen der Nachrichten im Abonnenten
In der Abonnentenshell werden die von Ihnen veröffentlichten Nachrichten angezeigt.
Hier sehen Sie, dass die Nachrichten im lokalen Azure IoT Einsatz-Broker im Thema tutorial/local
veröffentlicht werden, zum Event Grid MQTT Broker überbrückt und dann wieder zum lokalen Azure IoT Einsatz-Broker im Thema tutorial/cloud
überbrückt werden. 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. Wechseln Sie im Azure-Portal zu dem von Ihnen erstellten Event Grid-Namespace. Unter Metriken>MQTT: Erfolgreich veröffentlichte Nachrichten. Die Anzahl der veröffentlichten und übermittelten Nachrichten sollte sich beim Veröffentlichen von Nachrichten an den lokalen Azure IoT Einsatz-Broker erhöhen.
Tipp
Sie können die Konfigurationen von Datenflüssen, QoS und Nachrichtenrouten mit der CLI-Erweiterung az iot ops check --detail-level 2
überprüfen.
Nächste Schritte
In diesem Tutorial haben Sie erfahren, wie Sie Azure IoT Einsatz für eine bidirektionale MQTT-Brücke mit dem Azure Event Grid MQTT-Broker 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
. Alle diese Nachrichten werden mit dem Thematutorial/cloud
im lokalen Azure IoT Operations-Broker verknüpft. - 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.