Tutorial: Configuración del puente MQTT entre Azure IoT MQ Preview y Azure Event Grid
Importante
Operaciones de IoT de Azure, habilitado por Azure Arc, está actualmente en VERSIÓN PRELIMINAR. No se debería usar este software en versión preliminar en entornos de producción.
Consulte Términos de uso complementarios para las versiones preliminares de Microsoft Azure para conocer los términos legales que se aplican a las características de Azure que se encuentran en la versión beta, en versión preliminar o que todavía no se han publicado para que estén disponibles con carácter general.
En este tutorial, aprenderá a configurar IoT MQ para un puente MQTT bidireccional con la PaaS de MQTT broker de Azure Event Grid. Puede usar esta característica para procesar los datos de IoT en el perímetro y en la nube. Por ejemplo, puede usar IoT MQ para procesar datos de telemetría en el perímetro y, luego, conectar los datos a Azure Event Grid para su posterior procesamiento en la nube.
Requisitos previos
Establecimiento de variables de entorno
Inicie sesión con la CLI de Azure:
az login
Establezca variables de entorno para el resto de la configuración. Reemplace los valores de <>
por valores o nombres válidos de su elección. Se crea un nuevo espacio de nombres y un espacio de temas de Azure Event Grid en la suscripción de Azure en función de los nombres que proporcione:
# 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>
Creación de un espacio de nombres de Event Grid con MQTT broker habilitado
Cree un espacio de nombres de Event Grid con la CLI de Azure. La ubicación debe ser la misma que la que usó para implementar Operaciones de IoT de Azure.
az eventgrid namespace create \
--namespace-name $EVENT_GRID_NAMESPACE \
--resource-group $RESOURCE_GROUP \
--location $LOCATION \
--topic-spaces-configuration "{state:Enabled,maximumClientSessionsPerAuthenticationName:3}"
Al establecer topic-spaces-configuration
, este comando crea un espacio de nombres con:
- MQTT broker habilitado
- Número máximo de sesiones de cliente por nombre de autenticación de 3.
La opción de número máximo de sesiones de cliente permite a IoT MQ generar varias instancias y seguir conectando. Para obtener más información, consulte la compatibilidad con varias sesiones.
Creación de un espacio de temas
En el espacio de nombres de Event Grid, cree un espacio de temas denominado tutorial
con una plantilla de tema telemetry/#
.
az eventgrid namespace topic-space create \
--resource-group $RESOURCE_GROUP \
--namespace-name $EVENT_GRID_NAMESPACE \
--name tutorial \
--topic-templates "telemetry/#"
Con el carácter comodín #
de la plantilla de tema, puede publicar en cualquier tema del espacio de temas telemetry
. Por ejemplo, telemetry/temperature
o telemetry/humidity
.
Concesión de acceso a Azure IoT MQ Preview al espacio de temas de Event Grid
Con az k8s-extension show
, busque el id. de entidad de seguridad para la extensión Arc de Azure IoT MQ. El comando almacena el identificador de entidad de seguridad en una variable para su uso posterior.
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
Tome nota del valor de salida de identity.principalId
, que es un valor GUID con el formato siguiente:
d84481ae-9181-xxxx-xxxx-xxxxxxxxxxxx
A continuación, use la CLI de Azure para asignar roles de publicador y suscriptor a IoT MQ para el espacio de temas que creó.
Asignación del rol de publicador:
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
Asignación del rol de suscriptor:
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
Sugerencia
El ámbito coincide con el id
del espacio de temas que creó con az eventgrid namespace topic-space create
en el paso anterior y puede encontrarlo en la salida del comando.
Nombre de host de MQTT broker de Event Grid
Use la CLI de Azure para obtener el nombre de host de MQTT broker de Event Grid.
az eventgrid namespace show \
--resource-group $RESOURCE_GROUP \
--namespace-name $EVENT_GRID_NAMESPACE \
--query topicSpacesConfiguration.hostname \
-o tsv
Tome nota del valor de salida de topicSpacesConfiguration.hostname
, que es un valor de nombre de host similar al siguiente:
example.region-1.ts.eventgrid.azure.net
Creación de un conector de puente MQTT y recursos de asignación de temas
En un nuevo archivo denominado bridge.yaml
, especifique el conector de puente MQTT y la configuración de la asignación de temas. Reemplace el valor del marcador de posición de ejemplo en el remoteBrokerConnectionendpoint
por el nombre de host de MQTT de Event Grid del paso anterior. Incluya el número de puerto 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
El conector del puente MQTT se configura para:
- Usar MQTT broker de Event Grid como agente remoto.
- Usar el agente local de IoT MQ como agente local.
- Usar TLS tanto para los agentes locales como para los remotos.
- Usar la identidad administrada asignada por el sistema para la autenticación en el agente remoto.
- Usar de la cuenta de servicio de Kubernetes para la autenticación en el agente local.
- Usar la asignación de temas para asignar el tema
tutorial/local
al tematelemetry/iot-mq
del agente remoto. - Usar la asignación de temas para asignar el tema
telemetry/#
del agente remoto al tematutorial/cloud
del agente local.
Al publicar en el tema tutorial/local
en el agente local de IoT MQ, el mensaje se conecta al tema telemetry/iot-mq
en MQTT broker remoto de Event Grid. A continuación, el mensaje se vuelve a conectar al tema tutorial/cloud
en el agente local de IoT MQ. De forma similar, al publicar en el tema telemetry/iot-mq
en MQTT broker remoto de Event Grid, el mensaje se conecta al tema tutorial/cloud
en el agente local de IoT MQ.
Aplique el archivo de implementación con kubectl.
kubectl apply -f bridge.yaml
mqttbridgeconnector.mq.iotoperations.azure.com/tutorial-bridge created
mqttbridgetopicmap.mq.iotoperations.azure.com/tutorial-topic-map created
Comprobación de la implementación del puente de MQTT
Use kubectl para comprobar que las dos instancias de puente están listas y en ejecución.
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
Ahora puede publicar en el agente local y suscribirse a MQTT broker de Event Grid y comprobar el flujo de mensajes según lo previsto.
Implementación de un cliente MQTT
Para comprobar que el puente MQTT funciona, implemente un cliente MQTT en el mismo espacio de nombres que IoT MQ. En un nuevo archivo llamado client.yaml
, especifique la implementación del cliente:
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
Aplique el archivo de implementación con kubectl.
kubectl apply -f client.yaml
pod/mqtt-client created
Inicio de un suscriptor
Use kubectl exec
para iniciar un shell en el pod de cliente de mosquitto.
kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh
Dentro del shell, inicie un suscriptor al agente de IoT MQ en el espacio de temas de tutorial/#
con mqttui.
mqttui log "tutorial/#" \
-b mqtts://aio-mq-dmqtt-frontend:8883 \
-u '$sat' \
--password $(cat /var/run/secrets/tokens/mq-sat) \
--insecure
Deje el comando en ejecución y abra una nueva ventana de terminal.
Publicación de mensajes MQTT en la nube a través del puente
En una nueva ventana de terminal, inicie otro shell en el pod de cliente de mosquitto.
kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh
Dentro del shell, use mosquitto para publicar cinco mensajes en el tema 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
Visualización de los mensajes en el suscriptor
En el shell de suscriptor, verá los mensajes publicados.
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!
Aquí verá que los mensajes se publican en el agente local de IoT MQ en el tema tutorial/local
, se conectan a MQTT broker de Event Grid y, luego, vuelven a conectarse al agente local de IoT MQ en el tema tutorial/cloud
. A continuación, los mensajes se entregan al suscriptor. En este ejemplo, el recorrido de ida y vuelta es de aproximadamente 80 ms.
Comprobación de las métricas de Event Grid para comprobar la entrega de mensajes
También puede comprobar las métricas de Event Grid para comprobar que los mensajes se entregan a MQTT broker de Event Grid. En Azure Portal, vaya al espacio de nombres de Event Grid que creó. En Métricas>MQTT: mensajes publicados correctamente. Debería ver el número de mensajes publicados y entregados a medida que publica mensajes en el agente local de IoT MQ.
Sugerencia
Puede comprobar las configuraciones de asignaciones de temas, QoS, rutas de mensajes con la extensión de la CLIaz iot ops check --detail-level 2
.
Pasos siguientes
En este tutorial, ha aprendido a configurar IoT MQ para un puente MQTT bidireccional con MQTT broker de Azure Event Grid. A continuación, explore los escenarios siguientes:
- Para usar un cliente MQTT para publicar mensajes directamente en MQTT broker de Event Grid, consulte Publicación de mensajes MQTT en MQTT broker de Event Grid. Asigne al cliente un enlace de permisos de publicador al espacio de temas que creó y ya puede publicar mensajes en cualquier tema de
telemetry
, comotelemetry/temperature
otelemetry/humidity
. Todos estos mensajes se conectan al tematutorial/cloud
en el agente local de IoT MQ. - Para configurar reglas de enrutamiento para el MQTT broker de Event Grid, consulte Configuración de reglas de enrutamiento para MQTT broker de Event Grid. Puede usar reglas de enrutamiento para enrutar mensajes a distintos temas en función del nombre del tema, o bien para filtrar mensajes en función del contenido de los mensajes.
Contenido relacionado
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de