Desarrollar sus propios módulos de IoT Edge

Se aplica a:IoT Edge 1.4 checkmark IoT Edge 1.4

Importante

IoT Edge 1.4 es la versión admitida. Si está usando una versión anterior, consulte Actualización de IoT Edge.

Los módulos de Azure IoT Edge pueden conectarse con otros servicios de Azure y contribuir a la mayor canalización de datos en la nube. En este artículo se describe cómo puede desarrollar módulos para comunicarse con el entorno de ejecución de IoT Edge e IoT Hub y, por lo tanto, el resto de la nube de Azure.

Entorno de tiempo de ejecución de IoT Edge

El entorno de tiempo de ejecución de IoT Edge proporciona la infraestructura para integrar la funcionalidad de varios módulos de IoT Edge e implementarlos en dispositivos IoT Edge. Todos los programas se pueden empaquetar como un módulo de IoT Edge. Para aprovechar al máximo las funcionalidades de comunicación y administración de IoT Edge, un programa que se ejecute en un módulo puede usar el SDK de dispositivos IoT de Azure para conectarse al centro de IoT Edge local.

Empaquetado del programa como módulo de IoT Edge

Para implementar el programa en un dispositivo IoT Edge, primero debe incluirse en contenedores y ejecutarse con un motor compatible con Docker. IoT Edge usa Moby, el proyecto de código abierto que subyace a Docker, como motor compatible con Docker. Los mismos parámetros que se usan con Docker se pueden pasar a los módulos de IoT Edge. Para más información, consulte Configuración de las opciones de creación de contenedores para módulos de IoT Edge.

Uso del centro de IoT Edge

El centro de IoT Edge proporciona dos funcionalidades principales: un proxy a IoT Hub y las comunicaciones locales.

Conexión al centro de IoT Edge desde un módulo

La conexión al centro de IoT Edge local desde un módulo implica los mismos pasos de conexión que para los clientes. Para obtener más información, consulte Conexión al centro de IoT Edge.

Para usar el enrutamiento de IoT Edge a través de AMQP, puede usar ModuleClient desde el SDK de Azure IoT. Crear una instancia de ModuleClient para conectar el módulo al centro de IoT Edge que se ejecuta en el dispositivo, de forma similar a cómo las instancias de DeviceClient conectan dispositivos IoT a IoT Hub. Para obtener más información sobre la clase ModuleClient y sus métodos de comunicación, consulte la referencia de API para el lenguaje sdk preferido: C#, C, Python, Java o Node.js.

Primitivos de IoT Hub

IoT Hub ve una instancia de módulo como similar a un dispositivo. Una instancia de módulo puede:

Actualmente, los módulos no pueden recibir mensajes de nube a dispositivo ni usar la característica de carga de archivos.

Al escribir un módulo, puede conectarse al centro de IoT Edge y usar los primitivos de IoT Hub como lo haría al usar IoT Hub con una aplicación de dispositivo. La única diferencia entre los módulos de IoT Edge y las aplicaciones de dispositivo IoT es que con los módulos tiene que hacer referencia a la identidad del módulo en lugar de a la identidad del dispositivo.

Mensajes de dispositivo a nube

Un módulo de IoT Edge puede enviar mensajes a la nube a través del centro de IoT Edge que actúa como agente local y propaga los mensajes a la nube. Para habilitar el procesamiento complejo de mensajes de dispositivo a nube, un módulo de IoT Edge puede interceptar y procesar mensajes enviados por otros módulos o dispositivos a su centro de IoT Edge local. Después, el módulo IoT Edge enviará nuevos mensajes con datos procesados. Por tanto, se pueden crear cadenas de módulos de IoT Edge para compilar canalizaciones de procesamiento local.

Para enviar mensajes de telemetría de dispositivo a nube mediante rutas:

  • Use la clase Module Client del SDK de Azure IoT. Cada módulo tiene puntos de conexión de entrada y salida .
  • Use un método de envío de mensajes de la clase Module Client para enviar mensajes en el punto de conexión de salida del módulo.
  • Configure una ruta en el módulo edgeHub del dispositivo para enviar este punto de conexión de salida a IoT Hub.

Para procesar mensajes mediante rutas:

  • Configure una ruta para enviar mensajes procedentes de otro punto de conexión (módulo o dispositivo) al punto de conexión de entrada del módulo.
  • Escuche mensajes en el punto de conexión de entrada del módulo. Cada vez que vuelve un mensaje nuevo, el SDK de Azure IoT desencadena una función de devolución de llamada.
  • Procese el mensaje con esta función de devolución de llamada y envíe nuevos mensajes (opcionalmente) en la cola del punto de conexión del módulo.

Nota:

Para más información sobre cómo declarar una ruta, consulte Implementación de módulos y establecimiento de rutas en IoT Edge.

Gemelos

Los gemelos son uno de los primitivos proporcionados por IoT Hub. Hay documentos JSON que almacenan información acerca del estado, incluidos metadatos, configuraciones y condiciones. Cada módulo o dispositivo tiene su propio gemelo.

  • Para obtener un módulo gemelo con el SDK de Azure IoT, llame al ModuleClient.getTwin método .

  • Para recibir una revisión de módulo gemelo con el SDK de Azure IoT, implemente una función de devolución de llamada y regístrela con el ModuleClient.moduleTwinCallback método del SDK de Azure IoT para que la función de devolución de llamada se desencadene cada vez que se inicie una revisión de gemelo.

Recepción de métodos directos

Para recibir un método directo con el SDK de Azure IoT, implemente una función de devolución de llamada y regístrela con el ModuleClient.methodCallback método del SDK de Azure IoT para que la función de devolución de llamada se desencadene cada vez que entra en marcha un método directo.

Compatibilidad de idiomas y arquitecturas

IoT Edge admite varios sistemas operativos, arquitecturas de dispositivos y lenguajes de desarrollo para poder crear el escenario que se adapte a sus necesidades. Use esta sección para conocer las distintas opciones para desarrollar módulos de IoT Edge personalizados. Puede obtener más información acerca la compatibilidad de las herramientas y de los requisitos de cada lenguaje en Preparación del entorno de desarrollo y prueba para IoT Edge.

Linux

Para todos los lenguajes de la tabla siguiente, IoT Edge admite el desarrollo para contenedores DE LINUX AMD64 y la mayoría de ARM64. También hay compatibilidad con contenedores arm32 de Debian 11.

Lenguaje de desarrollo Herramientas de desarrollo
C Visual Studio Code
Visual Studio 2019/2022
C# Visual Studio Code
Visual Studio 2019/2022
Java Visual Studio Code
Node.js Visual Studio Code
Python Visual Studio Code

Nota:

Para la compilación multiplataforma, como la compilación de un módulo IoT Edge ARM32 en una máquina de desarrollo AMD64, debe configurar la máquina de desarrollo para compilar código en la arquitectura del dispositivo de destino que coincida con el módulo IoT Edge. Para más información sobre las arquitecturas de dispositivos de destino, consulte Desarrollo de módulos de Azure IoT Edge mediante Visual Studio Code.

Windows

Ya no se admiten contenedores de Windows. IoT Edge para Linux en Windows es el método recomendado para ejecutar IoT Edge en dispositivos Windows.

Seguridad del módulo

Debe desarrollar los módulos pensando en la seguridad. Para más información sobre cómo proteger los módulos, consulte Seguridad de Docker.

Para ayudar a mejorar la seguridad de los módulos, IoT Edge deshabilita algunas características de contenedor de forma predeterminada. Puede invalidar los valores predeterminados para proporcionar funcionalidades con privilegios a los módulos si es necesario.

Permitir permisos elevados de Docker

En el archivo de configuración de un dispositivo IoT Edge, hay un parámetro denominado allow_elevated_docker_permissions. Cuando se establece en true, esta marca permite la --privileged marca y las funcionalidades adicionales que defina en el CapAdd campo de Docker HostConfig en las opciones de creación del contenedor.

Nota:

Actualmente, esta marca es true forma predeterminada, lo que permite a las implementaciones conceder permisos con privilegios a los módulos. Se recomienda establecer esta marca en false para mejorar la seguridad del dispositivo.

Habilitación de CAP_CHOWN y CAP_SETUID

Las funcionalidades CAP_CHOWN y CAP_SETUID de Docker están deshabilitadas de forma predeterminada. Estas funcionalidades se pueden usar para escribir en archivos seguros en el dispositivo host y obtener acceso raíz.

Si necesita estas funcionalidades, puede volver a habilitarlas manualmente mediante CapADD en las opciones de creación del contenedor.

Pasos siguientes

Preparación del entorno de desarrollo y prueba para IoT Edge

Desarrollo de módulos de Azure IoT Edge mediante Visual Studio Code

Depurar módulos Azure IoT Edge mediante Visual Studio Code

Información y uso de los SDK de Azure IoT Hub