Udostępnij za pośrednictwem


Samouczek: dwukierunkowy mostek MQTT do usługi Azure Event Grid

Ważne

Ta strona zawiera instrukcje dotyczące zarządzania składnikami operacji usługi Azure IoT przy użyciu manifestów wdrażania platformy Kubernetes, które są w wersji zapoznawczej. Ta funkcja jest udostępniana z kilkoma ograniczeniami i nie powinna być używana w przypadku obciążeń produkcyjnych.

Zobacz Dodatkowe warunki użytkowania wersji zapoznawczych platformy Microsoft Azure, aby zapoznać się z postanowieniami prawnymi dotyczącymi funkcji platformy Azure, które są w wersji beta lub wersji zapoznawczej albo w inny sposób nie zostały jeszcze wydane jako ogólnie dostępne.

W tym samouczku skonfigurujesz dwukierunkowy mostek MQTT między brokerem MQTT operacji usługi Azure IoT i usługą Azure Event Grid. Aby zachować prosty samouczek, użyj domyślnych ustawień brokera MQTT operacji usługi Azure IoT i punktów końcowych usługi Azure Event Grid, a nie zastosowano przekształcenia.

Wymagania wstępne

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>

Tworzenie przestrzeni nazw usługi Event Grid z włączonym brokerem MQTT

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 klienta na nazwę uwierzytelniania jako 3.

Opcja maksymalna sesji klienta umożliwia MQTT operacjom usługi Azure IoT tworzenie wielu wystąpień i nadal nawiązywanie połączenia. 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 telemetry/#.

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

Używając symbolu wieloznakowego # w szablonie tematu, możesz opublikować go w dowolnym temacie w obszarze tematu telemetry . Na przykład: telemetry/temperature lub telemetry/humidity.

Przyznawanie usłudze Azure IoT Operations dostępu do obszaru tematu usługi Event Grid

Za pomocą interfejsu wiersza polecenia platformy Azure znajdź identyfikator podmiotu zabezpieczeń rozszerzenia Azure IoT Operations Arc. Polecenie przechowuje identyfikator podmiotu zabezpieczeń 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:

d84481ae-9181-xxxx-xxxx-xxxxxxxxxxxx

Następnie użyj interfejsu wiersza polecenia platformy Azure, aby przypisać role wydawcy i subskrybenta do usługi Azure IoT Operations 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

Napiwek

Zakres pasuje do id obszaru tematu utworzonego az eventgrid namespace topic-space create w poprzednim kroku i można go znaleźć 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 wartością nazwy hosta, która wygląda następująco:

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

Tworzenie punktu końcowego przepływu danych usługi Azure Event Grid

Utwórz punkt końcowy 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> ciąg nazwą hosta MQTT uzyskaną w poprzednim kroku. Dołącz numer 8883portu .

Przepływ danych i punkty końcowe przepływu danych usługi Azure Event Grid można wdrożyć jako standardowe zasoby platformy Azure, ponieważ mają implementacje dostawcy zasobów platformy Azure. Ten plik szablonu Bicep z pliku Bicep dla przepływu danych mostka MQTT— samouczek wdrażania niezbędnych punktów końcowych 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@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'
      }
    }
  }
}

Następnie wykonaj następujące polecenie w terminalu. Zastąp <FILE> ciąg 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 użycie tożsamości zarządzanej rozszerzenia Operacje usługi Azure IoT do uwierzytelniania za pomocą brokera 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 tematu usługi Event Grid skonfigurowanej za pomocą ról RBAC platformy 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 za pomocą punktu końcowego brokera MQTT operacji usługi Azure IoT jako źródła i punktu końcowego usługi Azure Event Grid jako miejsca docelowego i na odwrót. 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@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'
        }
      }
    ]
  }
}

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 operacji usługi Azure IoT jako brokera lokalnego
  • Używanie protokołu TLS dla brokerów zdalnych i lokalnych
  • Używanie tożsamości zarządzanej przypisanej przez system do uwierzytelniania w zdalnym brokerze
  • Użyj konta usługi Kubernetes do uwierzytelniania w lokalnym brokerze
  • Mapa tematu służy do mapowania tematu tutorial/local telemetry/aio na temat w zdalnym brokerze
  • Mapa tematu służy do mapowania tematu telemetry/# na brokera zdalnego do tematu tutorial/cloud w lokalnym brokerze

Uwaga

Domyślnie operacje usługi Azure IoT wdraża brokera MQTT, a także 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 na temat domyślnego punktu końcowego przepływu danych brokera MQTT, zobacz Domyślny punkt końcowy brokera MQTT dla operacji usługi Azure IoT Operations.

Podczas publikowania w tutorial/local temacie dotyczącym lokalnego brokera MQTT operacji usługi Azure IoT komunikat jest łączony z tematem telemetry/aio w zdalnym brokerze MQTT usługi Event Grid. Następnie komunikat jest łączony z powrotem do tematu tutorial/cloud (ponieważ telemetry/# temat wieloznaczny przechwytuje go) w lokalnym brokerze MQTT operacji usługi Azure IoT. Podobnie podczas publikowania w telemetry/aio temacie na zdalnym brokerze MQTT usługi Event Grid komunikat jest łączony z tematem tutorial/cloud w lokalnym brokerze 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. W nowym pliku o nazwie client.yamlokreśl wdrożenie klienta:

Obecnie bicep nie ma zastosowania do wdrażania klienta MQTT.

Uruchamianie subskrybenta

Użyj kubectl exec polecenia , aby uruchomić powłokę w zasobniku klienta mosquitto.

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

W powłoce uruchom subskrybenta brokera operacji usługi Azure IoT w obszarze tematu za tutorial/# pomocą polecenia 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 kolejną powłokę w zasobniku 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świetlanie komunikatów w subskrybentze

W powłoce subskrybenta zostaną wyświetlone opublikowane komunikaty.

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 Portal przejdź do utworzonej przestrzeni nazw usługi Event Grid. W obszarze Metrics MQTT: Successful Published Messages (Metryki>MQTT: pomyślne opublikowane komunikaty). Podczas publikowania komunikatów w lokalnym brokerze operacji usługi Azure IoT powinna być widoczna liczba opublikowanych i dostarczonych komunikatów.

Zrzut ekranu przedstawiający widok metryk w witrynie Azure Portal przedstawiający pomyślne komunikaty MQTT.

Napiwek

Konfiguracje przepływów danych, QoS i tras komunikatów można sprawdzić za pomocą rozszerzenia az iot ops check --detail-level 2interfejsu wiersza polecenia .

Następne kroki

W tym samouczku przedstawiono sposób konfigurowania operacji usługi Azure IoT na potrzeby dwukierunkowego mostka MQTT za pomocą 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 i możesz opublikować komunikaty w dowolnym temacie w obszarze , na telemetry/temperature przykład telemetrylub telemetry/humidity. Wszystkie te komunikaty są łączone z tematem tutorial/cloud dotyczą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.