Compartir a través de


Flujos de dispositivos IoT Hub (versión preliminar)

Los flujos de dispositivos Azure IoT Hub facilitan la creación de túneles TCP seguros y bidireccionales para varios escenarios de comunicación de la nube al dispositivo. Un IoT Hub punto de conexión de transmisión gestiona los flujos de dispositivos, actuando como un proxy entre su dispositivo y los puntos de conexión de servicio. Esta configuración, que se muestra en el diagrama siguiente, es especialmente útil cuando los dispositivos están detrás de un firewall de red o residen dentro de una red privada. Por tanto, los flujos de dispositivos IoT Hub ayudan a enfrentar la necesidad que tienen los clientes de llegar a los dispositivos IoT de manera compatible con el firewall y sin tener que abrir ampliamente los puertos de entrada y salida del firewall de la red.

Diagrama que muestra información general sobre los flujos de dispositivos de IoT Hub.

Los dispositivos que usan flujos de dispositivo de IoT Hub pueden permanecer seguros y solo necesitan abrir conexiones TCP salientes al punto de conexión de streaming de IoT Hub a través del puerto 443. Una vez que se establece un flujo, cada una de las aplicaciones del lado del servicio y del lado del dispositivo tiene acceso mediante programación a un objeto del cliente de WebSocket para enviar y recibir bytes sin formato entre sí. Las garantías de orden y la confiabilidad que este túnel proporciona son equivalentes a las de TCP.

Ventajas

Los flujos de dispositivos de IoT Hub ofrecen las siguientes ventajas:

  • Conectividad segura apta para firewall: es posible alcanzar los dispositivos de IoT desde los puntos de conexión de servicio sin abrir el puerto de entrada del firewall en los perímetros de la red o el dispositivo (solo se necesita conectividad de salida a IoT Hub a través del puerto 443).

  • Autenticación: tanto el lado del dispositivo como el lado del servicio del túnel se deben autenticar con IoT Hub mediante las credenciales correspondientes.

  • Cifrado: de forma predeterminada, los flujos de dispositivos de IoT Hub utilizan conexiones habilitadas para TLS. Este factor garantiza que el tráfico siempre esté cifrado, independientemente de si la aplicación utiliza o no el cifrado.

  • Simplicidad de conectividad: en muchos casos, el uso de flujos de datos de dispositivos elimina la necesidad de realizar una configuración compleja de redes privadas virtuales para habilitar la conectividad con dispositivos de IoT.

  • Compatibilidad con la pila TCP/IP: los flujos de dispositivos de IoT Hub pueden acomodar el tráfico de aplicaciones TCP/IP. Este enfoque significa que una amplia gama de protocolos propietarios y basados en estándares puede usar esta característica.

  • Facilidad de uso en configuraciones de redes privadas: para comunicarse con un dispositivo, el servicio hace referencia a su identificador de dispositivo en lugar de a su dirección IP. Este hecho resulta útil cuando un dispositivo se encuentra dentro de una red privada y tiene una dirección IP privada, o bien cuando su dirección IP se asigna de manera dinámica y es desconocida para el lado del servicio.

Flujos de trabajo de los flujos de dispositivo

Un flujo de dispositivos se inicia cuando el servicio solicita conectarse a un dispositivo al proporcionar su id. de dispositivo. Este flujo de trabajo en particular se adapta al modelo de comunicación cliente/servidor, lo que incluye a SSH y RDP, donde un usuario intenta conectarse de manera remota al servidor SSH o RDP que se ejecuta en el dispositivo utilizando un programa cliente SSH o RDP.

El proceso de creación de flujo de dispositivos implica una negociación entre el dispositivo, el servicio, el punto de conexión principal y los puntos de conexión de streaming del centro de IoT. Si bien el punto de conexión principal del centro de IoT organiza la creación de un flujo de dispositivos, el punto de conexión de streaming controla el tráfico que fluye entre el servicio y el dispositivo.

Flujo de creación de los flujos de dispositivos

La creación mediante programación de un flujo de dispositivos a través del SDK implica estos pasos, los que también se muestran en la ilustración:

Diagrama que muestra los pasos del proceso de protocolo de enlace para un flujo de dispositivo de IoT Hub.

  1. La aplicación de dispositivo registra una devolución de llamada de antemano para recibir notificaciones cuando se inicie un flujo de dispositivos nuevo al dispositivo. Por lo general, ese paso ocurre cuando el dispositivo se inicia y se conecta a IoT Hub.

  2. El programa del lado del servicio proporciona el id. de dispositivo (no la dirección IP) para iniciar un flujo de dispositivos cuando sea necesario.

  3. Para notificar al programa del lado del dispositivo, el centro de IoT invoca la devolución de llamada registrada en el paso 1. El dispositivo puede aceptar o rechazar la solicitud de iniciación del flujo. Esta lógica puede ser específica para el escenario de la aplicación. Si el dispositivo rechaza la solicitud de transmisión, IoT Hub informa al servicio en consecuencia; de lo contrario, se realizan los siguientes pasos.

  4. El dispositivo crea una conexión TCP de salida segura al punto de conexión de streaming a través del puerto 443 y actualiza la conexión a un WebSocket. IoT Hub proporciona al dispositivo la dirección URL del punto de conexión de streaming y las credenciales usadas para realizar la autenticación, como parte de la solicitud enviada en el paso 3.

  5. El servicio recibe una notificación del resultado cuando el dispositivo acepta el flujo y pasa a crear su propio cliente de WebSocket en el punto de conexión de streaming. De manera similar, recibe la información de autenticación y la dirección URL del punto de conexión de streaming desde IoT Hub.

En el proceso de protocolo de enlace descrito anteriormente:

  • El proceso de intercambio de señales debe completarse dentro de 60 segundos (paso 2 a 5); de lo contrario, la conexión falla por tiempo de espera y el servicio es notificado en consecuencia.

  • Una vez completado el flujo de creación de flujos descrito anteriormente, el punto de conexión de streaming actúa como proxy y transfiere el tráfico entre el servicio y el dispositivo a través de sus respectivos WebSockets.

  • Tanto el dispositivo como el servicio necesitan conectividad de salida al punto de conexión principal de IoT Hub y el punto de conexión de streaming a través del puerto 443. La dirección URL de estos puntos de conexión está disponible en la pestaña Información general del portal de IoT Hub.

  • Las garantías de orden y la confiabilidad de un flujo establecido son equivalentes a las de TCP.

  • Todas las conexiones a IoT Hub y su punto de conexión de streaming usan TLS y se cifran.

Flujo de terminación

Un flujo establecido termina cuando se desconecta cualquiera de las conexiones TCP con la puerta de enlace (ya sea por el servicio o el dispositivo). Esta acción puede ocurrir voluntariamente si se cierra el WebSocket en el programa de dispositivo o en el programa de servicio, o bien de manera involuntaria si se produce un error de proceso o de tiempo de expiración de conectividad de red. Tras la finalización de cualquier conexión de dispositivo o servicio con el punto de conexión de streaming, la otra conexión TCP también finaliza (de manera forzada) y el servicio y el dispositivo son responsables de volver a crear el flujo, en caso de que sea necesario.

Requisitos de conectividad

Tanto el lado del dispositivo como del servicio de un flujo de dispositivos debe ser capaz de establecer conexiones habilitadas para TLS con IoT Hub y su punto de conexión de streaming. Esta situación requiere conectividad de salida a través del puerto 443 con estos puntos de conexión. El nombre de host asociado al punto de conexión de streaming se puede encontrar en el panel de información general del centro de IoT en Azure Portal, como se muestra en la captura de pantalla siguiente.

Captura de pantalla del panel de trabajo de un centro de IoT en Azure Portal, donde se resalta el nombre de host para los puntos de conexión de streaming de dispositivos.

Como alternativa, la información de los puntos de conexión se puede recuperar mediante la CLI de Azure en la sección de propiedades del centro, específicamente, con las teclas property.hostname y property.deviceStreams.

az iot hub devicestream show --name <YourIoTHubName>

El resultado es un objeto JSON de todos los puntos de conexión que el dispositivo y el servicio del centro pueden necesitar para establecer secuencia de dispositivos.

{
  "streamingEndpoints": [
    "https://<YourIoTHubName>.<region-stamp>.streams.azure-devices.net"
  ]
}

Nota:

Asegúrese de instalar la VERSIÓN 2.73.0 o posterior de la CLI de Azure. Puede descargar la versión más reciente desde la página Instalación de la CLI de Azure.

Habilitación de la conectividad saliente para los puntos de conexión de streaming de dispositivo

Como se mencionó al principio de este artículo, el dispositivo crea una conexión de salida al punto de conexión de streaming de IoT Hub durante el proceso de iniciación de los flujos de dispositivos. Los firewalls del dispositivo o de la red deben permitir la conectividad de salida hacia la puerta de enlace de streaming en el puerto 443 (tenga en cuenta que la comunicación se produce mediante una conexión WebSocket cifrada con TLS).

El nombre de host asociado al punto de conexión de streaming se puede encontrar en el panel de información general del centro de IoT en Azure Portal, como se muestra en la captura de pantalla siguiente.

Captura de pantalla del panel de trabajo de un centro de IoT en Azure Portal, donde se resalta el nombre de host para los puntos de conexión de streaming de dispositivos.

Como alternativa, puede encontrar esta información mediante la CLI de Azure, como se muestra en el ejemplo siguiente:

az iot hub devicestream show --name <YourIoTHubName>

Nota:

Asegúrese de instalar la VERSIÓN 2.73.0 o posterior de la CLI de Azure. Puede descargar la versión más reciente desde la página Instalación de la CLI de Azure.

Solución de problemas a través de los registros de recursos de flujos de dispositivos

Puede configurar Azure Monitor para recopilar los registros de recursos para los flujos de dispositivos que emite su instancia de IoT Hub. Este enfoque puede ser útil en escenarios de solución de problemas.

Siga estos pasos para crear una configuración de diagnóstico para enviar registros de recursos de Device Streams para su centro de IoT a los registros de Azure Monitor:

  1. En Azure Portal, navegue a su centro de IoT. En el panel de la izquierda, seleccione Configuración de diagnóstico en Supervisión. Después, seleccione Agregar configuración de diagnóstico.

  2. Proporcione un nombre para la configuración de diagnóstico y seleccione Flujos de dispositivo (versión preliminar) en la lista de registros. A continuación, seleccione Enviar al área de trabajo de Log Analytics. Se le guiará para elegir un área de trabajo de Log Analytics existente o crear una nueva.

    Captura de pantalla que muestra el panel Configuración de diagnóstico en Azure Portal, resaltando la configuración de los registros de recursos de Device Streams.

  3. Después de crear una configuración de diagnóstico para enviar los registros de recursos de Device Streams a un área de trabajo de Log Analytics, puede acceder a los registros seleccionando Registros en Supervisión en el panel izquierdo del centro de IoT en Azure Portal. Los registros de recursos de Device Streams aparecen en la tabla AzureDiagnostics y tienen Category=DeviceStreams. Pueden pasar varios minutos después de una operación para que los registros aparezcan en la tabla.

    Como se muestra aquí, la identidad del dispositivo de destino y el resultado de la operación también están disponibles en los registros.

    Captura de pantalla que muestra los registros de AzureDiagnostic para un centro de IoT, resaltando la identidad, la operación y los resultados de una entrada de registro de recursos de Device Streams.

Para más información sobre el uso de Azure Monitor con IoT Hub, consulte Supervisión de Azure IoT Hub. Para obtener información sobre todos los registros, métricas y tablas de recursos disponibles para IoT Hub, consulte Referencia de datos de supervisión de Azure IoT Hub.

Disponibilidad regional

Durante la versión preliminar pública, los flujos de datos de los dispositivos de IoT Hub estarán disponibles en las regiones Centro de EE. UU., EUAP de Centro de EE. UU., Norte de Europa y Sudeste de Asia. Asegúrese de que crea el centro en una de estas regiones.

Disponibilidad del SDK

Dos lados de cada flujo (en el lado del dispositivo y del servicio) usan el SDK de IoT Hub para establecer el túnel. Durante la versión preliminar pública, los clientes pueden elegir entre estos lenguajes del SDK:

  • Los SDK de C y C# admiten flujos de dispositivo en el lado del dispositivo.

  • Los SDK de Node.js y C# admiten flujos de dispositivo en el lado del servicio.

Pasos siguientes