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
- Operacje usługi Azure IoT. Zobacz Wdrażanie operacji usługi Azure IoT.
- 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>
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 8883
portu .
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
, , aioInstanceName
eventGridHostName
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 tematututorial/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.yaml
okreś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.
Napiwek
Konfiguracje przepływów danych, QoS i tras komunikatów można sprawdzić za pomocą rozszerzenia az iot ops check --detail-level 2
interfejsu 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ładtelemetry
lubtelemetry/humidity
. Wszystkie te komunikaty są łączone z tematemtutorial/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.