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 ketelemetry/iot-mq
topik di broker jarak jauh - Gunakan peta topik untuk memetakan
telemetry/#
topik di broker jarak jauh ketutorial/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.
Tip
Anda dapat memeriksa konfigurasi peta topik, QoS, dan rute pesan dengan ekstensi az iot ops check --detail-level 2
CLI .
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
, sepertitelemetry/temperature
atautelemetry/humidity
. Semua pesan ini di bridge ketutorial/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.
Konten terkait
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk