Bagikan melalui


Tutorial: Mengonfigurasi jembatan MQTT antara Pratinjau Azure IoT MQ dan Azure Event Grid

Penting

Pratinjau Operasi Azure IoT – diaktifkan oleh Azure Arc saat ini dalam PRATINJAU. Anda tidak boleh menggunakan perangkat lunak pratinjau ini di lingkungan produksi.

Lihat Ketentuan Penggunaan Tambahan untuk Pratinjau Microsoft Azure untuk persyaratan hukum yang berlaku pada fitur Azure dalam versi beta, pratinjau, atau belum dirilis secara umum.

Dalam tutorial ini, Anda mempelajari cara mengonfigurasi IoT MQ untuk jembatan MQTT dua arah dengan broker Azure Event Grid MQTT PaaS. Anda dapat menggunakan fitur ini untuk memproses data IoT Anda di tepi dan di cloud. Misalnya, Anda dapat menggunakan IoT MQ untuk memproses data telemetri di tepi, lalu menjenguk data ke Azure Event Grid untuk pemrosesan lebih lanjut di cloud.

Prasyarat

Atur variabel lingkungan

Masuk dengan Azure CLI:

az login

Atur variabel lingkungan untuk sisa penyiapan. Ganti nilai dengan <> nilai atau nama pilihan Anda yang valid. Namespace layanan dan ruang topik Azure Event Grid baru dibuat di langganan Azure Anda berdasarkan nama yang Anda berikan:

# 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>

Membuat namespace Layanan Event Grid dengan broker MQTT diaktifkan

Buat namespace Layanan Event Grid dengan Azure CLI. Lokasi harus sama dengan yang Anda gunakan untuk menyebarkan Operasi Azure IoT.

az eventgrid namespace create \
  --namespace-name $EVENT_GRID_NAMESPACE \
  --resource-group $RESOURCE_GROUP \
  --location $LOCATION \
  --topic-spaces-configuration "{state:Enabled,maximumClientSessionsPerAuthenticationName:3}"

Dengan mengatur topic-spaces-configuration, perintah ini membuat namespace layanan dengan:

  • Broker MQTT diaktifkan
  • Sesi klien maksimum per nama autentikasi sebagai 3.

Opsi sesi klien maks memungkinkan IoT MQ untuk menelurkan beberapa instans dan masih terhubung. Untuk mempelajari lebih lanjut, lihat dukungan multi-sesi.

Membuat ruang topik

Di namespace Layanan Event Grid, buat ruang topik bernama tutorial dengan templat telemetry/#topik .

az eventgrid namespace topic-space create \
  --resource-group $RESOURCE_GROUP \
  --namespace-name $EVENT_GRID_NAMESPACE \
  --name tutorial \
  --topic-templates "telemetry/#"

Dengan menggunakan # kartubebas dalam templat topik, Anda dapat menerbitkan ke topik apa pun di telemetry bawah ruang topik. Misalnya, telemetry/temperature atau telemetry/humidity.

Memberikan akses Pratinjau Azure IoT MQ ke ruang topik Event Grid

Menggunakan az k8s-extension show, temukan ID utama untuk ekstensi Azure IoT MQ Arc. Perintah menyimpan ID utama dalam variabel untuk digunakan nanti.

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

Perhatikan nilai output untuk identity.principalId, yang merupakan nilai GUID dengan format berikut:

d84481ae-9181-xxxx-xxxx-xxxxxxxxxxxx

Kemudian, gunakan Azure CLI untuk menetapkan peran penerbit dan pelanggan ke IoT MQ untuk ruang topik yang Anda buat.

Tetapkan peran penerbit:

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

Tetapkan peran pelanggan:

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

Tip

Cakupan cocok id dengan az eventgrid namespace topic-space create ruang topik yang Anda buat di langkah sebelumnya, dan Anda dapat menemukannya dalam output perintah.

Nama host broker Event Grid MQTT

Gunakan Azure CLI untuk mendapatkan nama host broker Event Grid MQTT.

az eventgrid namespace show \
  --resource-group $RESOURCE_GROUP \
  --namespace-name $EVENT_GRID_NAMESPACE \
  --query topicSpacesConfiguration.hostname \
  -o tsv

Perhatikan nilai output untuk topicSpacesConfiguration.hostname itu adalah nilai nama host yang terlihat seperti:

example.region-1.ts.eventgrid.azure.net

Membuat konektor jembatan MQTT dan sumber daya peta topik

Dalam file baru bernama bridge.yaml, tentukan konektor jembatan MQTT dan konfigurasi peta topik. Ganti contoh nilai tempat penampung di remoteBrokerConnection endpoint dengan nama host Event Grid MQTT dari langkah sebelumnya. Sertakan nomor 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

Anda mengonfigurasi konektor jembatan MQTT untuk:

  • Gunakan broker Azure Event Grid MQTT sebagai broker jarak jauh
  • Gunakan broker IoT MQ lokal sebagai broker lokal
  • Gunakan TLS untuk broker jarak jauh dan lokal
  • Gunakan identitas terkelola yang ditetapkan sistem untuk autentikasi ke broker jarak jauh
  • Gunakan akun layanan Kubernetes untuk autentikasi ke broker lokal
  • Gunakan peta topik untuk memetakan tutorial/local topik ke telemetry/iot-mq topik di broker jarak jauh
  • Gunakan peta topik untuk memetakan telemetry/# topik di broker jarak jauh ke tutorial/cloud topik di broker lokal

Ketika Anda menerbitkan ke tutorial/local topik di broker IoT MQ lokal, pesan di bridge ke telemetry/iot-mq topik pada broker Event Grid MQTT jarak jauh. Kemudian, pesan di-bridge kembali ke tutorial/cloud topik di broker IoT MQ lokal. Demikian pula, ketika Anda menerbitkan ke telemetry/iot-mq topik pada broker Event Grid MQTT jarak jauh, pesan dijemput ke tutorial/cloud topik di broker IoT MQ lokal.

Terapkan file penyebaran dengan kubectl.

kubectl apply -f bridge.yaml
mqttbridgeconnector.mq.iotoperations.azure.com/tutorial-bridge created
mqttbridgetopicmap.mq.iotoperations.azure.com/tutorial-topic-map created

Memverifikasi penyebaran jembatan MQTT

Gunakan kubectl untuk memeriksa dua instans bridge siap dan berjalan.

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

Anda sekarang dapat menerbitkan di broker lokal dan berlangganan Event Grid MQTT Broker dan memverifikasi alur pesan seperti yang diharapkan.

Menyebarkan klien MQTT

Untuk memverifikasi bahwa jembatan MQTT berfungsi, sebarkan klien MQTT ke namespace yang sama dengan IoT MQ. Dalam file baru bernama client.yaml, tentukan penyebaran klien:

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

Terapkan file penyebaran dengan kubectl.

kubectl apply -f client.yaml
pod/mqtt-client created

Memulai pelanggan

Gunakan kubectl exec untuk memulai shell di pod klien mosquitto.

kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh

Di dalam shell, mulai pelanggan ke broker IoT MQ pada tutorial/# ruang topik dengan mqttui.

mqttui log "tutorial/#" \
-b mqtts://aio-mq-dmqtt-frontend:8883 \
-u '$sat' \
--password $(cat /var/run/secrets/tokens/mq-sat) \
--insecure

Biarkan perintah berjalan dan buka jendela terminal baru.

Menerbitkan pesan MQTT ke cloud melalui jembatan

Di jendela terminal baru, mulai shell lain di pod klien mosquitto.

kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh

Di dalam shell, gunakan mosquitto untuk menerbitkan lima pesan ke topik tersebut 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

Menampilkan pesan di pelanggan

Di shell pelanggan, Anda akan melihat pesan yang Anda terbitkan.

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!

Di sini, Anda melihat pesan dipublikasikan ke broker IoT MQ lokal ke topik, tutorial/local di bridged ke broker Event Grid MQTT, dan kemudian di bridge kembali ke broker IoT MQ lokal lagi tentang topik tersebut tutorial/cloud . Pesan kemudian dikirimkan ke pelanggan. Dalam contoh ini, waktu pulang pergi sekitar 80 mdtk.

Periksa metrik Event Grid untuk memverifikasi pengiriman pesan

Anda juga dapat memeriksa metrik Event Grid untuk memverifikasi bahwa pesan dikirimkan ke broker Event Grid MQTT. Di portal Azure, navigasikan ke namespace Layanan Event Grid yang Anda buat. Di bawah Metrik>MQTT: Pesan yang Berhasil Diterbitkan. Anda akan melihat jumlah pesan yang diterbitkan dan dikirimkan meningkat saat Anda menerbitkan pesan ke broker IoT MQ lokal.

Cuplikan layar tampilan metrik di portal Azure untuk menampilkan pesan MQTT yang berhasil.

Tip

Anda dapat memeriksa konfigurasi peta topik, QoS, dan rute pesan dengan ekstensi az iot ops check --detail-level 2CLI .

Langkah berikutnya

Dalam tutorial ini, Anda mempelajari cara mengonfigurasi IoT MQ untuk jembatan MQTT dua arah dengan broker Azure Event Grid MQTT. Sebagai langkah berikutnya, jelajahi skenario berikut:

  • Untuk menggunakan klien MQTT untuk menerbitkan pesan langsung ke broker Event Grid MQTT, lihat Menerbitkan pesan MQTT ke broker Event Grid MQTT. Beri klien izin penerbit yang mengikat ke ruang topik yang Anda buat, dan Anda dapat menerbitkan pesan ke topik apa pun di bawah telemetry, seperti telemetry/temperature atau telemetry/humidity. Semua pesan ini di bridge ke tutorial/cloud topik di broker IoT MQ lokal.
  • Untuk menyiapkan aturan perutean untuk broker Event Grid MQTT, lihat Mengonfigurasi aturan perutean untuk broker Azure Event Grid MQTT. Anda dapat menggunakan aturan perutean untuk merutekan pesan ke topik yang berbeda berdasarkan nama topik, atau untuk memfilter pesan berdasarkan konten pesan.