Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym samouczku skonfigurujesz dwukierunkowy mostek MQTT między brokerem MQTT usługi Azure IoT a usługą Azure Event Grid. Aby zachować prostotę samouczka, użyj domyślnych ustawień brokera MQTT operacji Azure IoT oraz punktów końcowych Azure Event Grid, i nie stosuj żadnych przekształceń.
Wymagania wstępne
- Instancja usługi Operacje Azure IoT wdrożona w klastrze Kubernetes. Aby uzyskać więcej informacji, zobacz Deploy Operacje Azure IoT.
Na komputerze deweloperskim zainstalowano Azure CLI. Sprawdź dostępne rozszerzenia Azure CLI dla minimalnej wymaganej wersji do korzystania z rozszerzenia azure-iot-ops. Użyj
az --versiondo sprawdzenia swojej wersji iaz upgradedo aktualizacji, jeśli to konieczne. Aby uzyskać więcej informacji, zobacz Install the Azure CLI .Rozszerzenie Operacje Azure IoT dla Azure CLI. Użyj następującego polecenia, aby dodać rozszerzenie lub zaktualizować je do najnowszej wersji:
az extension add --upgrade --name azure-iot-ops
- Profil przepływu danych. Zobacz Konfigurowanie profilu przepływu danych.
Ustawianie zmiennych środowiskowych
Zaloguj się przy użyciu interfejsu wiersza polecenia platformy Azure:
az login
Ustaw zmienne środowiskowe dla pozostałej części konfiguracji. Zastąp wartości <> prawidłowymi wartościami lub wybranymi nazwami. Nowa przestrzeń nazw usługi Azure Event Grid i przestrzeń tematów są tworzone w ramach subskrypcji platformy Azure na podstawie nazw, które podajesz:
# 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>
Utwórz przestrzeń nazw Event Grid z brokerem MQTT włączonym
Tworzenie przestrzeni nazw usługi Event Grid za pomocą interfejsu wiersza polecenia platformy Azure. Lokalizacja powinna być taka sama jak lokalizacja użyta do wdrożenia operacji usługi Azure IoT.
az eventgrid namespace create \
--namespace-name $EVENT_GRID_NAMESPACE \
--resource-group $RESOURCE_GROUP \
--location $LOCATION \
--topic-spaces-configuration "{state:Enabled,maximumClientSessionsPerAuthenticationName:3}"
eventgrid Jeśli rozszerzenie nie jest zainstalowane, zostanie wyświetlony monit z pytaniem, czy chcesz go zainstalować. Wybierz Y , aby zainstalować rozszerzenie.
Ustawiając polecenie topic-spaces-configuration, to polecenie tworzy przestrzeń nazw z następującymi elementami:
- Broker MQTT włączony
- Maksymalna liczba sesji klientów na nazwę użytkownika dla uwierzytelniania wynosi 3.
Opcja maksymalnych sesji klientów umożliwia operacjom MQTT usługi Azure IoT uruchamiać wiele instancji i nadal się łączyć. Aby dowiedzieć się więcej, zobacz Obsługa wielu sesji.
Tworzenie obszaru tematu
W przestrzeni nazw usługi Event Grid utwórz przestrzeń tematu o nazwie tutorial z szablonem tematu sensor/#.
az eventgrid namespace topic-space create \
--resource-group $RESOURCE_GROUP \
--namespace-name $EVENT_GRID_NAMESPACE \
--name tutorial \
--topic-templates "sensor/#"
Używając symbolu wieloznakowego # w szablonie tematu, możesz publikować w dowolnym temacie w obszarze tematu sensor. Na przykład: sensor/temperature lub sensor/humidity.
Przyznawanie usłudze Operacje Azure IoT dostępu do obszaru tematu usługi Event Grid
Za pomocą Azure CLI znajdź identyfikator główny dla Operacje Azure IoT Arc. Polecenie przechowuje identyfikator główny w zmiennej do późniejszego użycia.
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
Zanotuj wartość wyjściową elementu identity.principalId, która jest wartością identyfikatora GUID w następującym formacie:
aaaaaaaa-bbbb-cccc-1111-222222222222
Następnie użyj interfejsu wiersza polecenia platformy Azure, aby przypisać role wydawcy i subskrybenta do usługi Operacje Azure IoT MQTT dla utworzonego obszaru tematu.
Przypisz rolę wydawcy:
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
Przypisz rolę subskrybenta:
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
Wskazówka
Zakres odpowiada id obszarowi tematu, który utworzyłeś az eventgrid namespace topic-space create w poprzednim kroku, i znajduje się w danych wyjściowych polecenia.
Nazwa hosta brokera MQTT usługi Event Grid
Użyj interfejsu wiersza polecenia platformy Azure, aby uzyskać nazwę hosta brokera MQTT usługi Event Grid.
az eventgrid namespace show \
--resource-group $RESOURCE_GROUP \
--namespace-name $EVENT_GRID_NAMESPACE \
--query topicSpacesConfiguration.hostname \
-o tsv
Zanotuj wartość wyjściową topicSpacesConfiguration.hostname, która jest nazwą hosta i wygląda następująco:
example.region-1.ts.eventgrid.azure.net
Tworzenie punktu końcowego przepływu danych usługi Azure Event Grid
Tworzenie punktu końcowego przepływu danych dla usługi Azure Event Grid. Ten punkt końcowy jest miejscem docelowym przepływu danych, który wysyła komunikaty do usługi Azure Event Grid. Zastąp <EVENT_GRID_HOSTNAME> nazwą hosta MQTT uzyskaną w poprzednim kroku. Dołącz numer 8883portu .
Przepływ danych i punkty końcowe przepływu danych w usłudze Azure Event Grid mogą być wdrażane jako standardowe zasoby platformy Azure, ponieważ istnieją implementacje dostawcy zasobów Azure. Ten plik Bicep z pliku Bicep dla przepływu danych mostka MQTT Samouczek wdraża niezbędne punkty końcowe przepływu danych i przepływu danych.
Pobierz plik do lokalizacji lokalnej i pamiętaj, aby zastąpić wartości customLocationName, , aioInstanceNameeventGridHostName twoimi.
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@2026-07-01' existing = {
name: aioInstanceName
}
resource remoteMqttBrokerDataflowEndpoint 'Microsoft.IoTOperations/instances/dataflowEndpoints@2026-07-01' = {
parent: aioInstance
name: 'eventgrid'
extendedLocation: {
name: customLocation.id
type: 'CustomLocation'
}
properties: {
endpointType: 'Mqtt'
mqttSettings: {
host: eventGridHostName
authentication: {
method: 'SystemAssignedManagedIdentity'
systemAssignedManagedIdentitySettings: {}
}
tls: {
mode: 'Enabled'
}
}
}
}
Następnie wykonaj następujące polecenie w terminalu. Zastąp <FILE> nazwą pobranego pliku Bicep.
az deployment group create --resource-group <RESOURCE_GROUP> --template-file <FILE>.bicep
W tym miejscu metoda uwierzytelniania jest ustawiona na SystemAssignedManagedIdentity w celu użycia tożsamości zarządzanej rozszerzenia Operacje Azure IoT do uwierzytelniania z brokerem MQTT usługi Event Grid. To ustawienie działa, ponieważ rozszerzenie Operacje usługi Azure IoT ma niezbędne uprawnienia do publikowania i subskrybowania przestrzeni tematów Event Grid skonfigurowanej poprzez role RBAC w usłudze Azure. Zwróć uwagę, że w konfiguracji nie są wymagane żadne wpisy tajne, takie jak nazwa użytkownika lub hasło.
Ponieważ broker MQTT usługi Event Grid wymaga protokołu TLS, tls ustawienie jest włączone. Nie trzeba podawać zaufanego certyfikatu urzędu certyfikacji, ponieważ broker MQTT usługi Event Grid używa powszechnie zaufanego urzędu certyfikacji.
Tworzenie przepływów danych
Utwórz dwa przepływy danych, z punktem końcowym brokera MQTT operacji usługi Azure IoT jako źródłem i punktem końcowym usługi Azure Event Grid jako miejscem docelowym, oraz odwrotnie. Nie trzeba konfigurować transformacji.
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@2026-07-01' existing = {
name: aioInstanceName
}
resource defaultDataflowProfile 'Microsoft.IoTOperations/instances/dataflowProfiles@2026-07-01' existing = {
parent: aioInstance
name: 'default'
}
resource dataflow_1 'Microsoft.IoTOperations/instances/dataflowProfiles/dataflows@2026-07-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: 'sensor/aio'
}
}
]
}
}
resource dataflow_2 'Microsoft.IoTOperations/instances/dataflowProfiles/dataflows@2026-07-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('sensor/#')
}
}
{
operationType: 'BuiltInTransformation'
builtInTransformationSettings: {
serializationFormat: 'Json'
datasets: []
filter: []
map: [
{
type: 'PassThrough'
inputs: [
'*'
]
output: '*'
}
]
}
}
{
operationType: 'Destination'
destinationSettings: {
endpointRef: 'default'
dataDestination: 'tutorial/cloud'
}
}
]
}
}
Podobnie jak w przypadku punktu końcowego przepływu danych, wykonaj następujące polecenie w terminalu:
az deployment group create --resource-group <RESOURCE_GROUP> --template-file <FILE>.bicep
Razem dwa przepływy danych tworzą mostek MQTT, w którym:
- Używanie brokera MQTT usługi Event Grid jako brokera zdalnego
- Użyj lokalnego brokera MQTT Operacje Azure IoT jako brokera lokalnego
- Używanie protokołu TLS dla brokerów zdalnych i lokalnych
- Użyj tożsamości zarządzanej przypisanej przez system do uwierzytelniania na zdalnym brokerze
- Użyj konta usługi Kubernetes do uwierzytelniania w lokalnym brokerze
- Mapa tematu służy do mapowania tematu
tutorial/localdo tematusensor/aiona zdalnym brokerze - Użyj mapy tematu, aby zmapować temat
sensor/#na brokerze zdalnym do tematututorial/cloudna brokerze lokalnym
Uwaga
Domyślnie operacje Azure IoT wdrażają zarówno brokera MQTT, jak i punkt końcowy przepływu danych brokera MQTT. Punkt końcowy przepływu danych brokera MQTT służy do nawiązywania połączenia z brokerem MQTT. Domyślna konfiguracja używa wbudowanego tokenu konta usługi do uwierzytelniania. Punkt końcowy ma nazwę default i jest dostępny w tej samej przestrzeni nazw co operacje usługi Azure IoT. Punkt końcowy jest używany jako źródło przepływu danych utworzonego w tym samouczku. Aby dowiedzieć się więcej o domyślnym punkcie końcowym przepływu danych brokera MQTT, zobacz Domyślny punkt końcowy brokera MQTT dla operacji Operacje Azure IoT.
Podczas publikowania w tutorial/local temacie dotyczącym lokalnego brokera MQTT operacji usługi Azure IoT komunikat jest łączony z tematem sensor/aio w zdalnym brokerze MQTT usługi Event Grid. Następnie komunikat jest łączony z powrotem do tematu tutorial/cloud (ponieważ sensor/# temat wieloznaczny przechwytuje go) w lokalnym brokerze MQTT operacji usługi Azure IoT. Podobnie, gdy publikujesz na kanale sensor/aio zdalnego brokera MQTT usługi Event Grid, komunikat jest przekazywany do kanału tutorial/cloud lokalnego brokera MQTT operacji usługi Azure IoT.
Wdrażanie klienta MQTT
Aby sprawdzić, czy mostek MQTT działa, wdróż klienta MQTT w tej samej przestrzeni nazw co operacje usługi Azure IoT.
Obecnie Bicep nie ma zastosowania do wdrażania klienta MQTT.
Uruchamianie subskrybenta
Użyj kubectl exec, aby uruchomić powłokę w podzie klienta mosquitto.
kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh
W powłoce uruchom subskrybenta brokera operacji Azure IoT w przestrzeni tematów tutorial/# przy użyciu 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)
Pozostaw uruchomione polecenie i otwórz nowe okno terminalu.
Publikowanie komunikatów MQTT w chmurze za pośrednictwem mostka
W nowym oknie terminalu uruchom kolejny shell w podzie klienta Mosquitto.
kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh
Wewnątrz powłoki użyj mosquitto, aby opublikować pięć komunikatów w temacie tutorial/local .
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)
Wyświetl komunikaty w subskrybencie
W powłoce użytkownika widzisz opublikowane komunikaty.
Client null sending CONNECT
Client $server-generated/0000aaaa-11bb-cccc-dd22-eeeeee333333 received CONNACK (0)
Client $server-generated/0000aaaa-11bb-cccc-dd22-eeeeee333333 sending SUBSCRIBE (Mid: 1, Topic: tutorial/#, QoS: 0, Options: 0x00)
Client $server-generated/0000aaaa-11bb-cccc-dd22-eeeeee333333 received SUBACK
Subscribed (mid: 1): 0
Client $server-generated/0000aaaa-11bb-cccc-dd22-eeeeee333333 sending PINGREQ
Client $server-generated/0000aaaa-11bb-cccc-dd22-eeeeee333333 received PINGRESP
Client $server-generated/0000aaaa-11bb-cccc-dd22-eeeeee333333 received PUBLISH (d0, q0, r0, m0, 'tutorial/local', ... (52 bytes))
This message goes all the way to the cloud and back!
Client $server-generated/0000aaaa-11bb-cccc-dd22-eeeeee333333 received PUBLISH (d0, q0, r0, m0, 'tutorial/local', ... (52 bytes))
This message goes all the way to the cloud and back!
Client $server-generated/0000aaaa-11bb-cccc-dd22-eeeeee333333 received PUBLISH (d0, q0, r0, m0, 'tutorial/local', ... (52 bytes))
This message goes all the way to the cloud and back!
Client $server-generated/0000aaaa-11bb-cccc-dd22-eeeeee333333 received PUBLISH (d0, q0, r0, m0, 'tutorial/local', ... (52 bytes))
This message goes all the way to the cloud and back!
Client $server-generated/0000aaaa-11bb-cccc-dd22-eeeeee333333 received PUBLISH (d0, q0, r0, m0, 'tutorial/local', ... (52 bytes))
This message goes all the way to the cloud and back!
Client $server-generated/0000aaaa-11bb-cccc-dd22-eeeeee333333 sending PINGREQ
Client $server-generated/0000aaaa-11bb-cccc-dd22-eeeeee333333 received PINGRESP
W tym miejscu zobaczysz, że komunikaty są publikowane w lokalnym brokerze operacji usługi Azure IoT w tutorial/local temacie, pomostowane do brokera MQTT usługi Event Grid, a następnie ponownie łączone z lokalnym brokerem operacji usługi Azure IoT w tutorial/cloud temacie. Komunikaty są następnie dostarczane do subskrybenta. W tym przykładzie czas rundy wynosi około 80 ms.
Sprawdzanie metryk usługi Event Grid w celu zweryfikowania dostarczania komunikatów
Możesz również sprawdzić metryki usługi Event Grid, aby sprawdzić, czy komunikaty są dostarczane do brokera MQTT usługi Event Grid. W witrynie Azure przejdź do utworzonej przestrzeni nazw Event Grid. W obszarze Metrics MQTT: Successful Published Messages (Metryki>MQTT: pomyślne opublikowane komunikaty). Podczas publikowania komunikatów do lokalnego brokera operacji Azure IoT powinieneś zauważyć wzrost liczby opublikowanych i dostarczonych komunikatów.
Wskazówka
Można sprawdzić konfiguracje przepływów danych, QoS oraz tras komunikatów za pomocą rozszerzenia wiersza poleceniaaz iot ops check --detail-level 2.
Następne kroki
W tym samouczku nauczysz się, jak skonfigurować operacje usługi Azure IoT na potrzeby dwukierunkowego mostka MQTT z użyciem brokera MQTT usługi Azure Event Grid. W następnych krokach zapoznaj się z następującymi scenariuszami:
- Aby użyć klienta MQTT do publikowania komunikatów bezpośrednio w brokerze MQTT usługi Event Grid, zobacz Publikowanie komunikatów MQTT w brokerze MQTT usługi Event Grid. Nadaj klientowi powiązanie uprawnień wydawcy z utworzonym obszarem tematu, dając tym samym możliwość publikowania komunikatów do dowolnego tematu w tym obszarze, takich jak lub
sensor. Wszystkie te komunikaty są łączone z tematemtutorial/clouddotyczącym lokalnego brokera operacji usługi Azure IoT. - Aby skonfigurować reguły routingu dla brokera MQTT usługi Event Grid, zobacz Konfigurowanie reguł routingu dla brokera MQTT usługi Event Grid. Reguły routingu umożliwiają kierowanie komunikatów do różnych tematów na podstawie nazwy tematu lub filtrowanie komunikatów na podstawie zawartości wiadomości.
- Informacje o zasobie BrokerListener
- Skonfiguruj autoryzację dla komponentu BrokerListener
- Konfiguracja uwierzytelniania dla BrokerListenera
- Konfigurowanie protokołu TLS z automatycznym zarządzaniem certyfikatami