Tutorial: Uso de la CLI de Azure y Azure Portal para configurar el enrutamiento de mensajes de IoT Hub
El enrutamiento de mensajes permite enviar datos de telemetría desde dispositivos de IoT a puntos de conexión integrados compatibles con el centro de eventos o puntos de conexión personalizados como Blob Storage, colas de Service Bus, temas de Service Bus y Event Hubs. Para configurar el enrutamiento de mensajes personalizado, cree consultas de enrutamiento para personalizar la ruta que coincide con una condición determinada. Una vez configurado, los datos entrantes se enrutan automáticamente a los puntos de conexión mediante IoT Hub. Si un mensaje no coincide con ninguna de las consultas de enrutamientos definidas, se enruta al punto de conexión predeterminado.
En este tutorial de dos partes, aprenderá a configurar y usar las consultas de enrutamiento personalizadas con IoT Hub. Enrutará los mensajes desde un dispositivo IoT a uno de los múltiples puntos de conexión, entre los que se incluyen Blob Storage y una cola de Service Bus. Una aplicación lógica recogerá los mensajes que se envían a la cola de Service Bus, que se enviarán por correo electrónico. Los mensajes que no tienen definido el enrutamiento de mensajes personalizado se envían al punto de conexión predeterminado y, a continuación, Azure Stream Analytics los recoge y se muestran en una visualización de Power BI.
Para completar las dos partes de este tutorial, realice las siguientes tareas:
Parte I: Creación de recursos, configuración del enrutamiento de mensajes
- Cree los recursos: una instancia de IoT Hub, una cuenta de almacenamiento, una cola de Service Bus y un dispositivo simulado. Esto puede hacerse mediante Azure Portal, la CLI de Azure, una plantilla de Azure Resource Manager o Azure PowerShell.
- Configure los puntos de conexión y las rutas de los mensajes en IoT Hub para la cuenta de almacenamiento y la cola de Service Bus.
Parte II: Envío de mensajes al centro, visualización de los resultados del enrutamiento
- Crear una aplicación lógica que se desencadena y se envía un correo electrónico cuando se agrega un mensaje a la cola de Service Bus.
- Descargar y ejecutar una aplicación que simule que un dispositivo IoT envía mensajes al centro para las diferentes opciones de enrutamiento.
- Crear una visualización de Power BI para los datos enviados al punto de conexión predeterminado.
- Vea los resultados...
- ... en la cola de Service Bus y en los mensajes de correo electrónico.
- ... en la cuenta de almacenamiento.
- ... en la visualización de Power BI.
Requisitos previos
Para la primera parte de este tutorial:
- Debe tener una suscripción de Azure. Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
Para la segunda parte de este tutorial:
- Debe haber completado la parte I de este tutorial y seguir disponiendo de los recursos.
- Instale Visual Studio.
- Debe tener acceso a una cuenta de Power BI para realizar el análisis del flujo del punto de conexión predeterminado. (pruebe Power BI de manera gratuita).
- Debe tener una cuenta profesional o educativa para enviar notificaciones por correo electrónico.
- Asegúrese de que el puerto 8883 está abierto en el firewall. En el ejemplo de este tutorial se usa el protocolo MQTT, que se comunica mediante el puerto 8883. Este puerto puede estar bloqueado en algunos entornos de red corporativos y educativos. Para más información y para saber cómo solucionar este problema, consulte el artículo sobre la conexión a IoT Hub (MQTT).
Uso de Azure Cloud Shell
En Azure se hospeda Azure Cloud Shell, un entorno de shell interactivo que puede utilizar mediante el explorador. Puede usar Bash o PowerShell con Cloud Shell para trabajar con los servicios de Azure. Puede usar los comandos preinstalados de Cloud Shell para ejecutar el código de este artículo sin tener que instalar nada en su entorno local.
Para iniciar Azure Cloud Shell:
| Opción | Ejemplo o vínculo |
|---|---|
| Seleccione Pruébelo en la esquina superior derecha de un bloque de código. Solo con seleccionar Pruébelo no se copia automáticamente el código en Cloud Shell. | ![]() |
| Vaya a https://shell.azure.com o seleccione el botón Iniciar Cloud Shell para abrir Cloud Shell en el explorador. | ![]() |
| Seleccione el botón Cloud Shell en la barra de menús de la esquina superior derecha de Azure Portal. | ![]() |
Para ejecutar el código de este artículo en Azure Cloud Shell:
Inicie Cloud Shell.
Seleccione el botón Copiar de un bloque de código para copiar el código.
Pegue el código en la sesión de Cloud Shell. Para ello, seleccione Ctrl+Mayús+V en Windows y Linux, o bien seleccione Cmd+Mayús+V en macOS.
Seleccione Entrar para ejecutar el código.
Creación de recursos de base
Antes de configurar el enrutamiento de mensajes, deberá crear una instancia de IoT Hub, una cuenta de almacenamiento y una cola de Service Bus. Estos recursos pueden crearse mediante uno de los cuatro artículos que están disponibles para la parte 1 de este tutorial: Azure Portal, una plantilla de Azure Resource Manager, la CLI de Azure o Azure PowerShell.
Use el mismo grupo de recursos y la misma ubicación para todos los recursos. Al final, puede quitar todos los elementos en un solo paso mediante la eliminación del grupo de recursos.
A continuación se muestra un resumen de los pasos que se deben realizar en las secciones siguientes:
Cree un grupo de recursos.
Creación de una instancia de IoT Hub en el nivel S1. Agregue un grupo de consumidores a la instancia de IoT Hub. El grupo de consumidores lo utiliza Azure Stream Analytics al recuperar datos.
Nota
Debe usar un centro de Iot en un nivel de pago para realizar este tutorial. El nivel gratis solo le permite configurar un punto de conexión, y en este tutorial se necesitan varios.
Cree una cuenta de almacenamiento V1 estándar con replicación Standard_LRS.
Cree un espacio de nombres de Service Bus y una cola.
Cree una identidad de dispositivo para el dispositivo simulado que envíe mensajes al centro. Guarde la clave para la fase de pruebas. (Si crea una plantilla de Resource Manager, esto se realizará después de implementar la plantilla).
Uso de la CLI de Azure para crear recursos de base
En este tutorial se usa la CLI de Azure para crear los recursos de base y, después, Azure Portal, para mostrar cómo se configura el enrutamiento de mensajes y se instala el dispositivo virtual para las pruebas.
Copie y pegue el siguiente script en Cloud Shell y presione Entrar. El script se ejecuta de línea en línea. Con esto creará los recursos de base para este tutorial, incluida la cuenta de almacenamiento, la instancia de IoT Hub, el espacio de nombres de Service Bus y la cola de Service Bus.
Hay varios nombres de recurso que deben ser únicos globalmente, como el nombre de IoT Hub y el nombre de la cuenta de almacenamiento. Para facilitar esta tarea, se anexan los nombres de los recursos con un valor alfanumérico aleatorio denominado randomValue. El valor RandomValue se genera una vez en la parte superior del script y se anexa a los nombres de los recursos según sea necesario en el script. Si no desea que sea aleatorio, puede establecerlo en una cadena vacía o en un valor específico.
Sugerencia
Una sugerencia de depuración: este script usa el símbolo de continuación (la barra diagonal inversa, \) para que el script se lea mejor. Si tiene problemas al ejecutar el script, asegúrese de que la sesión de Cloud Shell esté ejecutando bash y de que no hay ningún espacio después de cualquiera de las barras diagonales inversas.
# This retrieves the subscription id of the account
# in which you're logged in.
# This field is used to set up the routing queries.
subscriptionID=$(az account show --query id)
# Concatenate this number onto the resources that have to be globally unique.
# You can set this to "" or to a specific value if you don't want it to be random.
# This retrieves a random value.
randomValue=$RANDOM
# Set the values for the resource names that
# don't have to be globally unique.
location=westus
resourceGroup=ContosoResources
iotHubConsumerGroup=ContosoConsumers
containerName=contosoresults
# Create the resource group to be used
# for all the resources for this tutorial.
az group create --name $resourceGroup \
--location $location
# The IoT hub name must be globally unique,
# so add a random value to the end.
iotHubName=ContosoTestHub$randomValue
echo "IoT hub name = " $iotHubName
# Create the IoT hub.
az iot hub create --name $iotHubName \
--resource-group $resourceGroup \
--sku S1 --location $location
# Add a consumer group to the IoT hub for the 'events' endpoint.
az iot hub consumer-group create --hub-name $iotHubName \
--name $iotHubConsumerGroup
# The storage account name must be globally unique,
# so add a random value to the end.
storageAccountName=contosostorage$randomValue
echo "Storage account name = " $storageAccountName
# Create the storage account to be used as a routing destination.
az storage account create --name $storageAccountName \
--resource-group $resourceGroup \
--location $location \
--sku Standard_LRS
# Get the primary storage account key.
# You need this to create the container.
storageAccountKey=$(az storage account keys list \
--resource-group $resourceGroup \
--account-name $storageAccountName \
--query "[0].value" | tr -d '"')
# See the value of the storage account key.
echo "storage account key = " $storageAccountKey
# Create the container in the storage account.
az storage container create --name $containerName \
--account-name $storageAccountName \
--account-key $storageAccountKey \
--public-access off
# The Service Bus namespace must be globally unique,
# so add a random value to the end.
sbNamespace=ContosoSBNamespace$randomValue
echo "Service Bus namespace = " $sbNamespace
# Create the Service Bus namespace.
az servicebus namespace create --resource-group $resourceGroup \
--name $sbNamespace \
--location $location
# The Service Bus queue name must be globally unique,
# so add a random value to the end.
sbQueueName=ContosoSBQueue$randomValue
echo "Service Bus queue name = " $sbQueueName
# Create the Service Bus queue to be used as a routing destination.
az servicebus queue create --name $sbQueueName \
--namespace-name $sbNamespace \
--resource-group $resourceGroup
Ahora que los recursos de base están configurados, puede continuar por el enrutamiento de mensajes en Azure Portal.
Configuración del enrutamiento de mensajes
Va a enrutar mensajes a diferentes recursos en función de propiedades que el dispositivo simulado adjunta al mensaje. Los mensajes que no tengan una ruta personalizada se envían al punto de conexión predeterminado (mensajes y eventos). En el siguiente tutorial, enviará mensajes a IoT Hub y verá cómo se enrutan a los distintos destinos.
| Value | Resultado |
|---|---|
| level="storage" | Se escribe en Azure Storage. |
| level="critical" | Es escribe en una cola de Service Bus. Una aplicación lógica recupera el mensaje de la cola y usa Office 365 para enviarlo por correo electrónico. |
| default | Se muestran estos datos con Power BI. |
El primer paso es configurar el punto de conexión al que se enrutarán los datos. El segundo paso es configurar la ruta de mensajes que usa ese punto de conexión. Después de configurar el enrutamiento, puede ver los puntos de conexión y las rutas de mensajes en el portal.
Enrutamiento a una cuenta de almacenamiento
Ahora, configure el enrutamiento de la cuenta de almacenamiento. Vaya al panel de enrutamiento de mensajes y agregue una ruta. Al agregar la ruta, defina un nuevo punto de conexión para la misma. Una vez que el enrutamiento esté configurado, los mensajes en los que la propiedad level esté establecida en storage se escribirán automáticamente en una cuenta de almacenamiento.
Nota
Se pueden escribir datos en Blob Storage con formato Apache Avro, que es el predeterminado, o JSON.
El formato de codificación solo se puede establecer en el momento en que se configura el punto de conexión de Blob Storage. No se puede cambiar el formato de un punto de conexión que ya se ha configurado. Cuando se usa la codificación JSON, debe establecer contentType en JSON y contentEncoding en UTF-8 en las propiedades del sistema de mensajes.
Para obtener más información sobre el uso de un punto de conexión de Blob Storage, consulte la guía sobre el enrutamiento Azure Storage.
Ahora, configure la configuración del enrutamiento de mensajes para Azure Storage.
En Azure Portal, seleccione Grupos de recursos y el grupo de recursos. En este tutorial se usa ContosoResources.
Seleccione la instancia de IoT Hub en la lista de recursos. En este tutorial se usa ContosoTestHub.
Seleccione Enrutamiento de mensajes en la columna central que dice Mensajería*. Seleccione + Agregar** para ver el panel Agregar una ruta. Seleccione +Agregar punto de conexión junto al campo Punto de conexión y, a continuación, seleccione Storage. Verá el panel Agregar un punto de conexión de almacenamiento.

Escriba el nombre del punto de conexión. En este tutorial se usa ContosoStorageEndpoint.

Seleccione Seleccionar un contenedor. Esto le llevará a una lista donde podrá ver las cuentas de almacenamiento. Seleccione la que ha configurado en los pasos de preparación. En este tutorial, se usa contosostorage. Muestra una lista de contenedores en esa cuenta de almacenamiento. Seleccione el contenedor que configuró en los pasos de preparación. En este tutorial se usa contosoresults. A continuación, haga clic en Seleccionar en la parte inferior de la pantalla. Se le dirige a otro panel Agregar un punto de conexión de almacenamiento. Verá la dirección URL del contenedor seleccionado.
Establezca la codificación en JSON o AVRO. Para este tutorial, use los valores predeterminados para el resto de los campos. Este campo se atenuará si la región seleccionada no es compatible con la codificación JSON. Establezca el formato de nombre de archivo.
Nota
Establezca el formato del nombre de blob mediante la opción Formato de nombre de archivo del blob. El valor predeterminado es
{iothub}/{partition}/{YYYY}/{MM}/{DD}/{HH}/{mm}. El formato debe contener {iothub}, {partición}, {AAAA}, {MM}, {DD}, {HH} y {mm} en cualquier orden.Por ejemplo, con el formato de nombre de archivo del blob predeterminado, si el nombre del centro es ContosoTestHub y la fecha y hora es el 30 de octubre de 2018 a las 10:56 a.m., el nombre del blob tendrá este aspecto:
ContosoTestHub/0/2018/10/30/10/56.De manera predeterminada, los blobs se escriben en el formato AVRO.
Seleccione Crear en la parte inferior de la página para crear el punto de conexión de almacenamiento y agregarlo a la ruta. Volverá al panel Agregar una ruta.
Complete el resto de la información de la consulta de enrutamiento. En esta consulta se especifican los criterios para enviar mensajes al contenedor de almacenamiento que acaba de agregar como punto de conexión. Rellene los campos de la pantalla.
Rellene el resto de los campos.
Nombre: escriba el nombre de la ruta. En este tutorial se usa ContosoStorageRoute. A continuación, especifique el punto de conexión para el almacenamiento. En este tutorial se usa ContosoStorageEndpoint.
Especificar Origen de datos: seleccione Mensajes de telemetría del dispositivo en la lista desplegable.
Seleccione Habilitar ruta: asegúrese de que este campo esté establecido en
enabled.Consulta de enrutamiento: escriba
level="storage"como cadena de consulta.

Seleccione Guardar. Al terminar, vuelve al panel Enrutamiento de mensajes, donde podrá ver la nueva consulta de enrutamiento del almacenamiento. Cierre el panel Enrutamiento de mensajes, lo que le devolverá al panel Grupo de recursos.
Ruta a una cola de Service Bus
Ahora, configure el enrutamiento de la cola de Service Bus. Vaya al panel de enrutamiento de mensajes y agregue una ruta. Al agregar la ruta, defina una cola de Service Bus como punto de conexión para la ruta. Después de realizar la configuración de la ruta, los mensajes en los que la propiedad level está establecida en critical se escriben en la cola de Service Bus, lo que desencadena una aplicación lógica, que, posteriormente, envía un correo electrónico con la información.
En la página Grupo de recursos, seleccione IoT Hub y Enrutamiento de mensajes.
En el panel Enrutamiento de mensajes, seleccione + Agregar.
En el panel Agregar una ruta, seleccione + Agregar junto a +Punto de conexión. Seleccione la cola de Service Bus. Verá el panel Add Service Bus Endpoint (Agregar punto de conexión de Service Bus).

Rellene el resto de los campos:
Nombre del punto de conexión: Escriba el nombre del punto de conexión. En este tutorial, se usa ContosoSBQEndpoint.
Espacio de nombres de Service Bus: Use la lista desplegable para seleccionar el espacio de nombres de Service Bus que configuró en los pasos de preparación. En este tutorial se usa ContosoSBNamespace.
Cola de Service Bus: use la lista desplegable para seleccionar la cola de Service Bus. En este tutorial se usa contososbqueue.
Seleccione Crear para agregar el primer punto de conexión de cola de Service Bus. Volverá al panel Agregar una ruta.

Ahora, complete el resto de la información de la consulta de enrutamiento. En esta consulta, se especifican los criterios para enviar mensajes a la cola de Service Bus que acaba de agregar como punto de conexión. Rellene los campos de la pantalla.
Nombre: escriba el nombre de la ruta. En este tutorial se usa ContosoSBQueueRoute.
Punto de conexión: seleccione el punto de conexión que acaba de configurar.
Origen de datos: seleccione Mensajes de telemetría del dispositivo en la lista desplegable.
Habilitar ruta: establezca este campo en
enable.Consulta de enrutamiento: escriba
level="critical"como la consulta de enrutamiento.
Seleccione Guardar. Al regresar al panel Rutas, se ven las dos nuevas rutas.

Para ver los puntos de conexión personalizados que configuró, seleccione la pestaña Puntos de conexión personalizados.

Cierre el panel Enrutamiento de mensajes, lo que le devolverá al panel Grupo de recursos.
Cree un dispositivo simulado:
A continuación, cree una identidad del dispositivo y guarde su clave para su uso posterior. Dicha identidad la usa la aplicación de simulación para enviar mensajes a la instancia de IoT Hub. Esta funcionalidad no está disponible en PowerShell o cuando se usa una plantilla de Azure Resource Manager. Los pasos siguientes indican cómo crear el dispositivo simulado mediante Azure Portal.
Abra Azure Portal e inicie sesión con su cuenta de Azure.
Seleccione Grupos de recursos y, después, elija su grupo de recursos. En este tutorial se usa ContosoResources.
En la lista de recursos, seleccione su centro de IoT. En este tutorial se usa ContosoTestHub. Seleccione Dispositivos IoT en el panel Cuadro.
Seleccione +Agregar dispositivo en el panel Dispositivos IoT. En el panel Agregar dispositivo, rellene el identificador del dispositivo. En este tutorial se usa Contoso-Test-Device. Deje en blanco las claves y marque Generar claves automáticamente. Asegúrese de que Connect device to IoT hub (Conectar dispositivo a IoT Hub) está habilitado. Seleccione Guardar.

Ahora que se ha creado, seleccione el dispositivo para ver las claves generadas. Seleccione el icono Copiar en la clave principal y guárdelo en alguna parte, como el Bloc de notas, para la fase de pruebas de este tutorial.

Pasos siguientes
Ahora que tiene las rutas de mensajes y los recursos configurados, pase al siguiente tutorial para aprender a enviar mensajes a IoT Hub y verlos enrutados a los distintos destinos.


