Kurz: Obousměrný most MQTT do Azure Event Gridu
Důležité
Tato stránka obsahuje pokyny ke správě komponent operací Azure IoT pomocí manifestů nasazení Kubernetes, které jsou ve verzi Preview. Tato funkce je poskytována s několika omezeními a neměla by se používat pro produkční úlohy.
Právní podmínky, které platí pro funkce Azure, které jsou ve verzi beta, verzi Preview nebo které zatím nejsou veřejně dostupné, najdete v Dodatečných podmínkách použití pro Microsoft Azure verze Preview.
V tomto kurzu nastavíte obousměrný most MQTT mezi zprostředkovatelem Azure IoT Operations MQTT a Azure Event Gridem. Pokud chcete tento kurz zachovat jednoduchý, použijte výchozí nastavení pro zprostředkovatele Azure IoT Operations MQTT a koncové body Azure Event Gridu a nepoužije se žádná transformace.
Požadavky
- Operace Azure IoT Viz Nasazení operací Azure IoT.
- Profil toku dat. Viz Konfigurace profilu toku dat.
Nastavení proměnných prostředí
Přihlaste se pomocí Azure CLI:
az login
Nastavte proměnné prostředí pro zbytek nastavení. Nahraďte hodnoty <>
platnými hodnotami nebo názvy podle vašeho výběru. Ve vašem předplatném Azure se vytvoří nový obor názvů a téma služby Azure Event Grid na základě vámi zadaných názvů:
# 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>
Vytvoření oboru názvů Event Gridu s povoleným zprostředkovatelem MQTT
Vytvoření oboru názvů Event Gridu pomocí Azure CLI Umístění by mělo být stejné jako umístění, které jste použili k nasazení operací 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
Pokud rozšíření není nainstalované, zobrazí se výzva s dotazem, jestli ho chcete nainstalovat. Vyberte Y
instalaci rozšíření.
Nastavením tohoto topic-spaces-configuration
příkazu vytvoří obor názvů s:
- Povolený zprostředkovatel MQTT
- Maximální počet klientských relací na název ověřování je 3.
Možnost maximálního počtu relací klientů umožňuje službě Azure IoT Operations MQTT vytvořit více instancí a stále se připojit. Další informace najdete v tématu podpora více relací.
Vytvoření prostoru tématu
V oboru názvů Event Grid vytvořte prostor tématu pojmenovaný tutorial
šablonou tématu telemetry/#
.
az eventgrid namespace topic-space create \
--resource-group $RESOURCE_GROUP \
--namespace-name $EVENT_GRID_NAMESPACE \
--name tutorial \
--topic-templates "telemetry/#"
Pomocí zástupné #
znaky v šabloně tématu můžete publikovat do libovolného telemetry
tématu v prostoru tématu. Například telemetry/temperature
nebo telemetry/humidity
.
Udělení přístupu k prostoru témat Event Gridu operacím Azure IoT
Pomocí Azure CLI vyhledejte ID objektu zabezpečení pro rozšíření Azure IoT Operations Arc. Příkaz uloží ID objektu zabezpečení do proměnné pro pozdější použití.
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
Poznamenejte si výstupní hodnotu , identity.principalId
což je hodnota GUID s následujícím formátem:
aaaaaaaa-bbbb-cccc-1111-222222222222
Pak pomocí Azure CLI přiřaďte role vydavatele a odběratele k Azure IoT Operations MQTT pro prostor témat, který jste vytvořili.
Přiřaďte roli vydavatele:
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
Přiřaďte roli odběratele:
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
Obor odpovídá id
prostoru tématu, který jste vytvořili az eventgrid namespace topic-space create
v předchozím kroku, a ve výstupu příkazu ho najdete.
Název hostitele zprostředkovatele Event Grid MQTT
Pomocí Azure CLI získejte název hostitele zprostředkovatele Event Grid MQTT.
az eventgrid namespace show \
--resource-group $RESOURCE_GROUP \
--namespace-name $EVENT_GRID_NAMESPACE \
--query topicSpacesConfiguration.hostname \
-o tsv
Poznamenejte si výstupní hodnotu, topicSpacesConfiguration.hostname
která je hodnotou názvu hostitele, která vypadá takto:
example.region-1.ts.eventgrid.azure.net
Vytvoření koncového bodu toku dat Azure Event Gridu
Vytvořte koncový bod toku dat pro Azure Event Grid. Tento koncový bod je cílem toku dat, který odesílá zprávy do služby Azure Event Grid. Nahraďte <EVENT_GRID_HOSTNAME>
názvem hostitele MQTT, který jste získali z předchozího kroku. Uveďte číslo 8883
portu .
Koncové body toku dat a toku dat je možné nasadit ve službě Azure Event Grid jako standardní prostředky Azure, protože mají implementace azure Resource Provider (RPs). Tento soubor šablony Bicep ze souboru Bicep pro MQTT-bridge dataflow Tutorial nasadí nezbytné toky dat a koncové body toku dat.
Stáhněte si soubor do místního prostředí a nezapomeňte nahradit hodnoty pro customLocationName
, aioInstanceName
eventGridHostName
svým.
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'
}
}
}
}
Pak v terminálu spusťte následující příkaz. Nahraďte <FILE>
názvem souboru Bicep, který jste stáhli.
az deployment group create --resource-group <RESOURCE_GROUP> --template-file <FILE>.bicep
V této části je metoda ověřování nastavená tak, aby SystemAssignedManagedIdentity
používala spravovanou identitu rozšíření Azure IoT Operations k ověření pomocí zprostředkovatele Event Grid MQTT. Toto nastavení funguje, protože rozšíření Azure IoT Operations má potřebná oprávnění k publikování a přihlášení k odběru prostoru tématu Event Gridu nakonfigurovaného prostřednictvím rolí Azure RBAC. Všimněte si, že v konfiguraci nejsou potřeba žádné tajné kódy, jako je uživatelské jméno nebo heslo.
Vzhledem k tomu, že zprostředkovatel Event Grid MQTT vyžaduje protokol TLS, tls
je toto nastavení povolené. Není potřeba zadávat důvěryhodný certifikát certifikační autority, protože zprostředkovatel Event Grid MQTT používá široce důvěryhodnou certifikační autoritu.
Vytváření toků dat
Vytvořte dva toky dat s koncovým bodem zprostředkovatele Azure IoT Operations MQTT jako zdrojem a koncovým bodem Azure Event Gridu jako cílem a naopak. Není potřeba konfigurovat transformaci.
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'
}
}
]
}
}
Podobně jako koncový bod toku dat spusťte v terminálu následující příkaz:
az deployment group create --resource-group <RESOURCE_GROUP> --template-file <FILE>.bicep
Oba toky dat společně tvoří most MQTT, kde:
- Použití zprostředkovatele Event Grid MQTT jako vzdáleného zprostředkovatele
- Použití místního zprostředkovatele Azure IoT Operations MQTT jako místního zprostředkovatele
- Použití protokolu TLS pro vzdálené i místní zprostředkovatele
- Použití spravované identity přiřazené systémem pro ověřování pro vzdáleného zprostředkovatele
- Použití účtu služby Kubernetes pro ověřování u místního zprostředkovatele
- Mapování tématu na
tutorial/local
téma na vzdáleném zprostředkovateli pomocí mapy témattelemetry/aio
- Mapování tématu na vzdáleném zprostředkovateli pomocí
telemetry/#
tutorial/cloud
mapy tématu na místním zprostředkovateli
Poznámka:
Operace Azure IoT ve výchozím nastavení nasadí zprostředkovatele MQTT i koncový bod toku dat Zprostředkovatele MQTT. Koncový bod toku dat zprostředkovatele MQTT slouží k připojení ke zprostředkovateli MQTT. Výchozí konfigurace používá k ověřování integrovaný token účtu služby. Koncový bod je pojmenovaný default
a je k dispozici ve stejném oboru názvů jako Operace Azure IoT. Koncový bod se používá jako zdroj pro tok dat vytvořený v tomto kurzu. Další informace o výchozím koncovém bodu toku dat zprostředkovatele MQTT najdete v tématu Azure IoT Operations local MQTT Broker Default Endpoint.
Když publikujete do tutorial/local
tématu na místním zprostředkovateli Azure IoT Operations MQTT, zpráva se přemísní na telemetry/aio
téma na vzdáleném zprostředkovateli Event Grid MQTT. Zpráva se pak přemístí zpět do tutorial/cloud
tématu (protože telemetry/#
toto téma se zástupnými znamény zachytává) v místním zprostředkovateli MQTT operations Azure IoTT. Podobně když publikujete do telemetry/aio
tématu na vzdáleném zprostředkovateli Event Grid MQTT, zpráva se přemísní na tutorial/cloud
téma místního zprostředkovatele Azure IoT Operations MQTT.
Nasazení klienta MQTT
Pokud chcete ověřit, že most MQTT funguje, nasaďte klienta MQTT do stejného oboru názvů jako operace Azure IoT.
V současné době se Bicep nevztahuje na nasazení klienta MQTT.
Zahájit předplatitele
Slouží kubectl exec
ke spuštění prostředí v podu klienta mosquitto.
kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh
V prostředí spusťte odběratele zprostředkovatele operací Azure IoT v tutorial/#
prostoru témat pomocí 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)
Nechte příkaz spuštěný a otevřete nové okno terminálu.
Publikování zpráv MQTT do cloudu prostřednictvím mostu
V novém okně terminálu spusťte v podu klienta mosquitto další prostředí.
kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh
Uvnitř prostředí použijte mosquitto k publikování pěti zpráv do tutorial/local
tématu.
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)
Zobrazení zpráv odběratele
V prostředí pro předplatitele se zobrazí zprávy, které jste publikovali.
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
Tady uvidíte, že se zprávy publikují do místního zprostředkovatele operací Azure IoT do tutorial/local
tématu, přemístit na zprostředkovatele Event Grid MQTT a pak se znovu přemístit na místního zprostředkovatele operací Azure IoT v tomto tutorial/cloud
tématu. Zprávy se pak doručí odběrateli. V tomto příkladu je doba odezvy přibližně 80 ms.
Kontrola metrik Event Gridu a ověření doručení zpráv
Můžete také zkontrolovat metriky Event Gridu a ověřit, že se zprávy doručují do zprostředkovatele Event Grid MQTT. Na webu Azure Portal přejděte do oboru názvů Event Gridu, který jste vytvořili. V části Metriky>MQTT: Úspěšné publikované zprávy Při publikování zpráv do místního zprostředkovatele operací Azure IoT by se měl zobrazit počet publikovaných a doručovaných zpráv.
Tip
Pomocí rozšířeníaz iot ops check --detail-level 2
rozhraní příkazového řádku můžete zkontrolovat konfigurace toků dat, QoS a tras zpráv .
Další kroky
V tomto kurzu jste zjistili, jak nakonfigurovat operace Azure IoT pro obousměrný most MQTT pomocí zprostředkovatele Azure Event Grid MQTT. Při dalších krocích prozkoumejte následující scénáře:
- Pokud chcete použít klienta MQTT k publikování zpráv přímo do zprostředkovatele Event Grid MQTT, přečtěte si téma Publikování zpráv MQTT do zprostředkovatele Event Grid MQTT. Dejte klientovi vazbu oprávnění vydavatele k prostoru tématu, který jste vytvořili, a můžete publikovat zprávy do libovolného tématu pod položkou
telemetry
, liketelemetry/temperature
nebotelemetry/humidity
. Všechny tyto zprávy jsou přemíscené natutorial/cloud
téma místního zprostředkovatele operací Azure IoT. - Pokud chcete nastavit pravidla směrování pro zprostředkovatele Event Grid MQTT, přečtěte si téma Konfigurace pravidel směrování pro zprostředkovatele Event Grid MQTT. Pravidla směrování můžete použít ke směrování zpráv do různých témat na základě názvu tématu nebo k filtrování zpráv na základě obsahu zprávy.