Tutorial: Uso de una plantilla de Azure Resource Manager 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. Ejemplo de Probarlo para Azure Cloud Shell
Vaya a https://shell.azure.com o seleccione el botón Iniciar Cloud Shell para abrir Cloud Shell en el explorador. Iniciar Cloud Shell en una nueva ventana
Seleccione el botón Cloud Shell en la barra de menús de la esquina superior derecha de Azure Portal. Botón Cloud Shell en Azure Portal

Para ejecutar el código de este artículo en Azure Cloud Shell:

  1. Inicie Cloud Shell.

  2. Seleccione el botón Copiar de un bloque de código para copiar el código.

  3. 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.

  4. 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:

  1. Cree un grupo de recursos.

  2. 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.

  3. Cree una cuenta de almacenamiento V1 estándar con replicación Standard_LRS.

  4. Cree un espacio de nombres de Service Bus y una cola.

  5. 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).

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.

Descarga de la plantilla y el archivo de parámetros

En la segunda parte de este tutorial, descargará y ejecutará una aplicación de Visual Studio para enviar mensajes a IoT Hub. En esa descarga hay una carpeta que contiene la plantilla de Azure Resource Manager y el archivo de parámetros, así como los scripts de la CLI de Azure y PowerShell.

Siga adelante y descargue ya los ejemplos de C# de Azure IoT. Descomprima el archivo main.zip. La plantilla de Resource Manager y el archivo de parámetros están en /iot-hub/Tutorials/Routing/SimulatedDevice/resources/ as template_iothub.json y template_iothub_parameters.json.

Creación de los recursos

Va a usar una plantilla de Azure Resource Manager (RM) para crear todos los recursos. En el caso de los scripts de la CLI de Azure y PowerShell, se pueden ejecutar unas cuantas líneas cada vez. Una plantilla de Resource Manager se implementa en un solo paso. En este artículo se muestran las secciones por separado para ayudarle a entender cada una de ellas. A continuación, se mostrará cómo implementar la plantilla y crear el dispositivo virtual para las pruebas. Después de implementar la plantilla, puede ver la configuración de enrutamiento de mensajes en el portal.

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 la asignación de nombres a los recursos, esos nombres de recursos se configuran para anexar un valor alfanumérico aleatorio generado a partir de la fecha y hora actuales.

Si examina la plantilla, verá dónde están configuradas las variables para estos recursos que toman el parámetro pasado y concatenan randomValue con el parámetro.

En la siguiente sección se explican los parámetros usados.

Parámetros

La mayoría de estos parámetros tiene valores predeterminados. Los que terminan con _in se concatenan con randomValue para que sean globalmente únicos.

randomValue: este valor se genera a partir de la fecha y hora actuales al implementar la plantilla. Este campo no está en el archivo de parámetros, ya que se genera en la propia plantilla.

subscriptionId: este campo se establece en la suscripción en la que se va a implementar la plantilla. Este campo no está en el archivo de parámetros, ya que se establece automáticamente.

IoTHubName_in: este campo es el nombre de IoT Hub base, que se concatena con randomValue para ser globalmente único.

location: este campo es la región de Azure en la que se va a realizar la implementación, por ejemplo, "westus".

consumer_group: este campo es el grupo de consumidores establecido para los mensajes que llegan a través del punto de conexión de enrutamiento. Sirve para filtrar los resultados de Azure Stream Analytics. Por ejemplo, está la secuencia entera donde obtiene todo, o si tiene datos que llegan con consumer_group establecido en Contoso, puede configurar una secuencia de Azure Stream Analytics (y el informe de Power BI) para mostrar solo esas entradas. Este campo se usa en la parte 2 de este tutorial.

sku_name: este campo es la escala de IoT Hub. Este valor debe ser S1 o superior; un nivel gratis no sirve para este tutorial porque no admite varios puntos de conexión.

sku_units: este campo se queda con el valor de sku_name, y es el número de unidades de IoT Hub que se pueden usar.

d2c_partitions: este campo es el número de particiones usadas para la secuencia de eventos.

storageAccountName_in: este campo es el nombre de la cuenta de almacenamiento que se va a crear. Los mensajes se enrutan a un contenedor de la cuenta de almacenamiento. Este campo se concatena con randomValue para que sea globalmente único.

storageContainerName: este campo es el nombre del contenedor en el que se almacenan los mensajes enrutados a la cuenta de almacenamiento.

storage_endpoint: este campo es el nombre del punto de conexión de la cuenta de almacenamiento que usa el enrutamiento de mensajes.

service_bus_namespace_in: este campo es el nombre del espacio de nombres de Service Bus que se va a crear. Este valor se concatena con randomValue para que sea globalmente único.

service_bus_queue_in: este campo es el nombre de la cola de Service Bus que se usa para el enrutamiento de mensajes. Este valor se concatena con randomValue para que sea globalmente único.

AuthRules_sb_queue: este campo son las reglas de autorización de la cola de Service Bus que se usan para recuperar la cadena de conexión de la cola.

variables

Estos valores se usan en la plantilla y se derivan principalmente de los parámetros.

queueAuthorizationRuleResourceId: este campo es el valor de ResourceId de la regla de autorización de la cola de Service Bus. ResourceId se usa a su vez para recuperar la cadena de conexión de la cola.

iotHubName: este campo es el nombre de IoT Hub después de haber concatenado randomValue.

storageAccountName: este campo es el nombre de la cuenta de almacenamiento después de haber concatenado randomValue.

service_bus_namespace: este campo es el espacio de nombres después de haber concatenado randomValue.

service_bus_queue: este campo es el nombre de la cola de Service Bus después de haber concatenado randomValue.

sbVersion: la versión de la API de Service Bus que se usará. En este caso, es "2017-04-01".

Recursos: Cuenta de almacenamiento y contenedor

El primer recurso creado es la cuenta de almacenamiento, junto con el contenedor al que se enrutan los mensajes. El contenedor es un recurso en la cuenta de almacenamiento. Tiene una cláusula dependsOn para la cuenta de almacenamiento, que exige que esta se cree antes que el contenedor.

Este es el aspecto de esta sección:

{
    "type": "Microsoft.Storage/storageAccounts",
    "name": "[variables('storageAccountName')]",
    "apiVersion": "2018-07-01",
    "location": "[parameters('location')]",
    "sku": {
        "name": "Standard_LRS",
        "tier": "Standard"
    },
    "kind": "Storage",
    "properties": {},
    "resources": [
        {
        "type": "blobServices/containers",
        "apiVersion": "2018-07-01",
        "name": "[concat('default/', parameters('storageContainerName'))]",
        "properties": {
            "publicAccess": "None"
            } ,
        "dependsOn": [
            "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
            ]
        }
    ]
}

Recursos: Espacio de nombres y cola de Service Bus

El segundo recurso creado es el espacio de nombres de Service Bus, junto con la cola de Service Bus a la que se enrutan los mensajes. La SKU se establece en estándar. La versión de API se recupera de las variables. También se establece para activar el espacio de nombres de Service Bus cuando se implementa esta sección (status:Active).

{
    "type": "Microsoft.ServiceBus/namespaces",
    "comments": "The Sku should be 'Standard' for this tutorial.",
    "sku": {
        "name": "Standard",
        "tier": "Standard"
    },
    "name": "[variables('service_bus_namespace')]",
    "apiVersion": "[variables('sbVersion')]",
    "location": "[parameters('location')]",
    "properties": {
        "provisioningState": "Succeeded",
        "metricId": "[concat('a4295411-5eff-4f81-b77e-276ab1ccda12:', variables('service_bus_namespace'))]",
        "serviceBusEndpoint": "[concat('https://', variables('service_bus_namespace'),'.servicebus.windows.net:443/')]",
        "status": "Active"
    },
    "dependsOn": []
}

Esta sección crea la cola de Service Bus. Esta parte del script tiene una cláusula dependsOn que garantiza que el espacio de nombres se crea antes que la cola.

{
    "type": "Microsoft.ServiceBus/namespaces/queues",
    "name": "[concat(variables('service_bus_namespace'), '/', variables('service_bus_queue'))]",
    "apiVersion": "[variables('sbVersion')]",
    "location": "[parameters('location')]",
    "scale": null,
    "properties": {},
    "dependsOn": [
        "[resourceId('Microsoft.ServiceBus/namespaces', variables('service_bus_namespace'))]"
    ]
}

Recursos: IoT Hub y enrutamiento de mensajes

Ahora que se han creado la cuenta de almacenamiento y la cola de Service Bus, creará el centro de IoT que enruta los mensajes a ellas. La plantilla de Resource Manager usa cláusulas dependsOn para impedir el intento de crear el centro antes de que se hayan creado los recursos de Service Bus y la cuenta de almacenamiento.

Esta es la primera parte de la sección de IoT Hub. Esta parte de la plantilla configura las dependencias y comienza con las propiedades.

{
    "apiVersion": "2018-04-01",
    "type": "Microsoft.Devices/IotHubs",
    "name": "[variables('IoTHubName')]",
    "location": "[parameters('location')]",
    "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]",
        "[resourceId('Microsoft.ServiceBus/namespaces', variables('service_bus_namespace'))]",
        "[resourceId('Microsoft.ServiceBus/namespaces/queues', variables('service_bus_namespace'), variables('service_bus_queue'))]"
    ],
    "properties": {
        "eventHubEndpoints": {}
            "events": {
                "retentionTimeInDays": 1,
                "partitionCount": "[parameters('d2c_partitions')]"
                }
            },

La siguiente es la sección para la configuración del enrutamiento de mensajes de IoT Hub. Primero está la sección de los puntos de conexión. Esta parte de la plantilla configura los puntos de conexión de enrutamientos para la cola de Service Bus y la cuenta de almacenamiento, incluidas las cadenas de conexión.

Para crear la cadena de conexión para la cola, necesita el valor queueAuthorizationRulesResourcedId, que se recupera alineado. Para crear la cadena de conexión para la cuenta de almacenamiento, recuperará la clave de almacenamiento principal y, luego, la usará en el formato de la cadena de conexión.

En la configuración de los puntos de conexión es donde se establece también el formato de blob en AVRO o JSON.

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.

"routing": {
   "endpoints": {
       "serviceBusQueues": [
       {
           "connectionString": "[Concat('Endpoint=sb://',variables('service_bus_namespace'),'.servicebus.windows.net/;SharedAccessKeyName=',parameters('AuthRules_sb_queue'),';SharedAccessKey=',listkeys(variables('queueAuthorizationRuleResourceId'),variables('sbVersion')).primaryKey,';EntityPath=',variables('service_bus_queue'))]",
           "name": "[parameters('service_bus_queue_endpoint')]",
           "subscriptionId": "[parameters('subscriptionId')]", 
           "resourceGroup": "[resourceGroup().Name]"
       }
       ],
       "serviceBusTopics": [],
       "eventHubs": [],
       "storageContainers": [
           {
               "connectionString": 
               "[Concat('DefaultEndpointsProtocol=https;AccountName=',variables('storageAccountName'),';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), providers('Microsoft.Storage', 'storageAccounts').apiVersions[0]).keys[0].value)]",
               "containerName": "[parameters('storageContainerName')]",
               "fileNameFormat": "{iothub}/{partition}/{YYYY}/{MM}/{DD}/{HH}/{mm}",
               "batchFrequencyInSeconds": 100,
               "maxChunkSizeInBytes": 104857600,
               "encoding": "avro",
               "name": "[parameters('storage_endpoint')]",
               "subscriptionId": "[parameters('subscriptionId')]",
               "resourceGroup": "[resourceGroup().Name]"
           }
       ]
   },

La siguiente sección es para las rutas de mensajes a los puntos de conexión. Hay una configurada para cada punto de conexión, así que hay una para la cola de Service Bus y otra para el contenedor de la cuenta de almacenamiento.

Recuerde que la condición de consulta de los mensajes enrutados al almacenamiento es level="storage", y que la condición de consulta de los mensajes enrutados a la cola de Service Bus es level="critical".

"routes": [
    {
        "name": "contosoStorageRoute",
        "source": "DeviceMessages",
        "condition": "level=\"storage\"",
        "endpointNames": [
            "[parameters('storage_endpoint')]"
            ],
        "isEnabled": true
    },
    {
        "name": "contosoSBQueueRoute",
        "source": "DeviceMessages",
        "condition": "level=\"critical\"",
        "endpointNames": [
            "[parameters('service_bus_queue_endpoint')]"
            ],
        "isEnabled": true
    }
],

Este archivo JSON muestra el resto de la sección de IoT Hub, que contiene información predeterminada y la SKU del centro.

            "fallbackRoute": {
                "name": "$fallback",
                "source": "DeviceMessages",
                "condition": "true",
                "endpointNames": [
                    "events"
                ],
                "isEnabled": true
            }
        },
        "storageEndpoints": {
            "$default": {
                "sasTtlAsIso8601": "PT1H",
                "connectionString": "",
                "containerName": ""
            }
        },
        "messagingEndpoints": {
            "fileNotifications": {
                "lockDurationAsIso8601": "PT1M",
                "ttlAsIso8601": "PT1H",
                "maxDeliveryCount": 10
            }
        },
        "enableFileUploadNotifications": false,
        "cloudToDevice": {
            "maxDeliveryCount": 10,
            "defaultTtlAsIso8601": "PT1H",
            "feedback": {
                "lockDurationAsIso8601": "PT1M",
                "ttlAsIso8601": "PT1H",
                "maxDeliveryCount": 10
            }
        }
    },
    "sku": {
        "name": "[parameters('sku_name')]",
        "capacity": "[parameters('sku_units')]"
    }
}

Recursos: Reglas de autorización de la cola de Service Bus

Las reglas de autorización de la cola de Service Bus se usan para recuperar la cadena de conexión de la cola de Service Bus. Usa una cláusula dependsOn para asegurarse de que no se crea antes que el espacio de nombres y la cola de Service Bus.

{
    "type": "Microsoft.ServiceBus/namespaces/queues/authorizationRules",
    "name": "[concat(variables('service_bus_namespace'), '/', variables('service_bus_queue'), '/', parameters('AuthRules_sb_queue'))]",
    "apiVersion": "[variables('sbVersion')]",
    "location": "[parameters('location')]",
    "scale": null,
    "properties": {
        "rights": [
            "Send"
        ]
    },
    "dependsOn": [
        "[resourceId('Microsoft.ServiceBus/namespaces', variables('service_bus_namespace'))]",
        "[resourceId('Microsoft.ServiceBus/namespaces/queues', variables('service_bus_namespace'), variables('service_bus_queue'))]"
    ]
},

Recursos: Grupo de consumidores

En esta sección, creará un grupo de consumidores para los datos de IoT Hub que se van a usar en Azure Stream Analytics en la segunda parte de este tutorial.

{
    "type": "Microsoft.Devices/IotHubs/eventHubEndpoints/ConsumerGroups",
    "name": "[concat(variables('iotHubName'), '/events/',parameters('consumer_group'))]",
    "apiVersion": "2018-04-01",
    "dependsOn": [
        "[concat('Microsoft.Devices/IotHubs/', variables('iotHubName'))]"
    ]
}

Recursos: Salidas

Si quiere reenviar un valor al script de implementación que se va a mostrar, usará una sección de salida. Esta parte de la plantilla devuelve la cadena de conexión de la cola de Service Bus. No es necesario devolver un valor, se incluye como ejemplo de cómo devolver resultados al script de llamada.

"outputs": {
    "sbq_connectionString": {
      "type": "string",
      "value": "[Concat('Endpoint=sb://',variables('service_bus_namespace'),'.servicebus.windows.net/;SharedAccessKeyName=',parameters('AuthRules_sb_queue'),';SharedAccessKey=',listkeys(variables('queueAuthorizationRuleResourceId'),variables('sbVersion')).primaryKey,';EntityPath=',variables('service_bus_queue'))]"
    }
  }

Implementación de la plantilla de Resource Manager

Para implementar la plantilla en Azure, cargue la plantilla y el archivo de parámetros en Azure Cloud Shell y, a continuación, ejecute un script para implementar la plantilla. Abra Azure Cloud Shell e inicie sesión. En este ejemplo se usa PowerShell.

Para cargar los archivos, seleccione el icono Upload/Download files (Cargar/Descargar archivos) en la barra de menús y, luego, elija Upload (Cargar).

Captura de pantalla que resalta el icono Cargar/Descargar archivos.

Use el Explorador de archivos que aparece para buscar los archivos en el disco local, selecciónelos y elija Open (Abrir).

Una vez cargados los archivos, un cuadro de diálogo de resultados muestra algo similar a la siguiente imagen.

Barra de menús de Cloud Shell con Upload/Download results (Cargar/Descargar resultados) resaltado

Los archivos se cargan en el recurso compartido usado mediante la instancia de Cloud Shell.

Ejecute el script para realizar la implementación. La última línea de este script recupera la variable que se configuró para devolverse: la cadena de conexión de la cola de Service Bus.

El script establece y utiliza estas variables:

$RGName es el nombre del grupo de recursos en el que se va a implementar la plantilla. Este campo se crea antes de implementar la plantilla.

$location es la ubicación de Azure que se usará para la plantilla, por ejemplo, "westus".

deploymentname es un nombre que se asigna a la implementación para recuperar el valor de variable devuelto.

Este es el script de PowerShell. Copie este script de PowerShell, péguelo en la ventana de Cloud Shell y presione Entrar para ejecutarlo.

$RGName="ContosoResources"
$location = "westus"
$deploymentname="contoso-routing"

# Remove the resource group if it already exists. 
#Remove-AzResourceGroup -name $RGName 
# Create the resource group.
New-AzResourceGroup -name $RGName -Location $location 

# Set a path to the parameter file. 
$parameterFile = "$HOME/template_iothub_parameters.json"
$templateFile = "$HOME/template_iothub.json"

# Deploy the template.
New-AzResourceGroupDeployment `
    -Name $deploymentname `
    -ResourceGroupName $RGName `
    -TemplateParameterFile $parameterFile `
    -TemplateFile $templateFile `
    -verbose

# Get the returning value of the connection string.
(Get-AzResourceGroupDeployment -ResourceGroupName $RGName -Name $deploymentname).Outputs.sbq_connectionString.value

Si se producen errores de script, puede editar el script localmente, volver a cargarlo en Cloud Shell y ejecutarlo de nuevo. Cuando el script termine de ejecutarse correctamente, continúe con el paso siguiente.

Creación de 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.

  1. Abra Azure Portal e inicie sesión con su cuenta de Azure.

  2. Seleccione Grupos de recursos y, después, elija su grupo de recursos. En este tutorial se usa ContosoResources.

  3. En la lista de recursos, seleccione su centro de IoT. En este tutorial se usa ContosoTestHub. Seleccione Dispositivos IoT en el panel Cuadro.

  4. 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.

    La pantalla para agregar dispositivos

  5. 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.

    Los detalles del dispositivo, incluidas las claves

Visualización del enrutamiento de mensajes en el portal

Ahora que están configurados los puntos de conexión y las rutas de mensajes, puede ver su configuración en el portal. Inicie sesión en Azure Portal y vaya a Grupos de recursos. A continuación, seleccione el grupo de recursos y, luego, el centro (el nombre del centro comienza con ContosoTestHub en este tutorial). Verá el panel de IoT Hub.

Pantalla de propiedades de IoT Hub

En las opciones del centro de IoT, seleccione Enrutamiento de mensajes. Se muestran las rutas que ha configurado correctamente.

Las rutas configuradas

En la pantalla Enrutamiento de mensajes, seleccione Puntos de conexión personalizados para ver los puntos de conexión que ha definido para las rutas.

Los puntos de conexión configuración para las rutas

Pasos siguientes

Ahora que tiene todos los recursos configurados y las rutas de mensajes están establecidas, pase al siguiente tutorial para saber cómo procesar y mostrar la información sobre los mensajes enrutados.