Desarrollar sus propios módulos de IoT Edge
Se aplica a: IoT Edge 1.5 IoT Edge 1.4
Importante
IoT Edge 1.5 LTS e IoT Edge 1.4 LTS son versiones compatibles. IoT Edge 1.4 LTS finaliza el ciclo de vida el 12 de noviembre de 2024. 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, Javao 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:
- Envío Mensajes de dispositivo a nube
- Recibir métodos directos dirigidos específicamente a su identidad
- Tener un módulo gemelo distinto y aislado del dispositivo gemelo y los demás módulos gemelos de ese dispositivo
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 punto 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 método
ModuleClient.getTwin
.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 método
ModuleClient.moduleTwinCallback
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 gemelos.
Recepción de métodos directos
Para recibir un método directo con Azure IoT SDK, implemente una función de devolución de llamada y regístrela con el método ModuleClient.methodCallback
desde Azure IoT SDK para que su función de devolución de llamada se active cada vez que llegue un método directo.
Compatibilidad de idiomas y arquitecturas
IoT Edge admite varios sistemas operativos, arquitecturas de dispositivos y lenguajes de desarrollo para poder compilar 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 marca --privileged
y las funcionalidades adicionales que defina en el campo CapAdd
de Docker HostConfig en las opciones de creación de contenedores.
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