Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:
IoT Edge 1.5
Importante
IoT Edge 1.5 LTS es la versión compatible. IoT Edge 1.4 LTS alcanzó el final del ciclo de vida el 12 de noviembre de 2024. Si usa una versión anterior, consulte Update IoT Edge.
En este artículo se muestra cómo usar Visual Studio 2022 para desarrollar, depurar e implementar módulos de Azure IoT Edge personalizados. Visual Studio 2022 proporciona plantillas para IoT Edge módulos escritos en C y C#. Las arquitecturas de dispositivos admitidas incluyen Windows x64, Linux x64, ARM32 y ARM64 (versión preliminar). Para obtener más información sobre los sistemas operativos, los lenguajes y las arquitecturas compatibles, consulte Compatibilidad de lenguaje y arquitectura.
En este artículo se incluyen los pasos para dos herramientas de desarrollo de IoT Edge:
- Interfaz de línea de comandos (CLI), la herramienta preferida para el desarrollo
- Extensión de herramientas de Azure IoT Edge para Visual Studio (en modo de mantenimiento)
Utiliza el botón del selector de herramientas al principio para elegir tu opción de herramienta para este artículo. Ambas herramientas proporcionan estas ventajas:
- Cree, edite, compile, ejecute y depure soluciones y módulos de IoT Edge en su ordenador de desarrollo local.
- Desarrolle sus módulos de Azure IoT en C o C#, aprovechando las ventajas del entorno de desarrollo de Visual Studio.
- Implemente la solución de IoT Edge en un dispositivo IoT Edge a través de Azure IoT Hub.
Requisitos previos
En este artículo se supone que usa una máquina que ejecuta Windows como máquina de desarrollo.
Instale o modifique Visual Studio 2022 en la máquina de desarrollo. Elija las opciones de carga de trabajo desarrollo de Azure y desarrollo de escritorio con C++.
Descargue e instale Azure IoT Edge Tools desde Visual Studio Marketplace. Use la extensión Azure IoT Edge Tools para crear y compilar la solución de IoT Edge. La herramienta de desarrollo preferida es la herramienta de línea de comandos (CLI) Azure IoT Edge Dev Tool. La extensión incluye las plantillas de proyecto de Azure IoT Edge usadas para crear el proyecto de Visual Studio. Necesita la extensión instalada independientemente de la herramienta de desarrollo que use.
Importante
La extensión Azure IoT Edge Tools para VS 2022 está en modo mantenimiento. La herramienta de desarrollo preferida es la herramienta de línea de comandos (CLI) Azure IoT Edge Dev Tool.
Sugerencia
Si usa Visual Studio 2019, descargue e instale Azure IoT Edge Tools para VS 2019 desde Visual Studio Marketplace.
Instale el administrador de bibliotecas Vcpkg
git clone https://github.com/Microsoft/vcpkg cd vcpkg bootstrap-vcpkg.batInstale el paquete azure-iot-sdk-c para Windows
vcpkg.exe install azure-iot-sdk-c:x64-windows vcpkg.exe --triplet x64-windows integrate installDescargue e instale un sistema de administración de contenedores compatible con Docker en la máquina de desarrollo para implementar y ejecutar las imágenes de los módulos. Por ejemplo, instale Docker Community Edition.
Para desarrollar módulos con contenedores Linux, use un equipo de Windows que cumpla los requirements para Docker Desktop.
Cree un Azure Container Registry o Docker Hub para almacenar las imágenes del módulo.
Sugerencia
Use un registro de Docker local para crear prototipos y pruebas en lugar de un registro en la nube.
Instale el Azure CLI.
Para probar el módulo en un dispositivo, necesita un IoT Hub activo con al menos un dispositivo IoT Edge. Para crear un dispositivo IoT Edge para realizar pruebas, cree uno en el portal de Azure o con la CLI:
La creación de una en el portal Azure es la forma más rápida. En el portal de Azure, vaya al recurso de IoT Hub. Seleccione Dispositivos en el menú Administración de dispositivos y, a continuación, seleccione Agregar dispositivo.
En Crear un dispositivo, asigne un nombre al dispositivo usando ID de dispositivo, active Dispositivo IoT Edge, y luego seleccione Guardar en la parte inferior izquierda.
Confirme que el nuevo dispositivo existe en el IoT Hub desde el menú Administración de dispositivos > Dispositivos. Para obtener más información sobre cómo crear un dispositivo IoT Edge a través del portal de Azure, consulte Crear y aprovisionar un dispositivo IoT Edge en Linux mediante claves simétricas.
Para crear un dispositivo IoT Edge con la CLI, siga los pasos descritos en el inicio rápido de Linux o Windows. En el proceso de registrar un dispositivo IoT Edge, se crea un dispositivo IoT Edge.
Si ejecuta el demonio de IoT Edge en una máquina de desarrollo, es posible que deba detener EdgeHub y EdgeAgent para empezar el desarrollo en Visual Studio.
Creación de un proyecto de Azure IoT Edge
La plantilla de proyecto IoT Edge en Visual Studio crea una solución para implementarla en dispositivos IoT Edge. En primer lugar, cree una solución de Azure IoT Edge. A continuación, creas un módulo en esa solución. Cada solución IoT Edge puede contener más de un módulo.
Advertencia
Faltan las plantillas de proyecto para los módulos de C y C# en la extensión de herramientas de Azure IoT Edge para Visual Studio. Si no puede crear IoT Edge módulos mediante la extensión, use la siguiente solución alternativa.
Descargue los siguientes archivos y colóquelos en el directorio de plantilla de Visual Studio enumerado:
| Archivo de plantilla | Agregar al directorio |
|---|---|
| azureiotedgemodule-v0.0.4.zip | %userprofile%\Documents\Visual Studio 2022\Templates\ProjectTemplates\Visual C# |
| azureiotedgevcmodulevs17-v0.0.9.zip | %userprofile%\Documents\Visual Studio 2022\Templates\ProjectTemplates\Visual C++ Project |
En nuestra solución, vamos a construir tres proyectos. El módulo principal que contiene EdgeAgent y EdgeHub, además del módulo del sensor de temperatura. A continuación, agregará dos módulos más de IoT Edge.
Importante
La estructura del proyecto IoT Edge que Visual Studio crea no es la misma que la de Visual Studio Code.
Actualmente, la CLI de Azure IoT Edge Dev Tool no admite la creación del tipo de proyecto Visual Studio. Use la extensión Visual Studio IoT Edge para crear el proyecto de Visual Studio.
En Visual Studio, cree un nuevo proyecto.
En Crear un nuevo proyecto, busque Azure IoT Edge. Seleccione el proyecto que coincida con la plataforma y la arquitectura del dispositivo IoT Edge y, después, seleccione Next.
En Configurar el nuevo proyecto, escriba un nombre para el proyecto, especifique la ubicación y, a continuación, seleccione Crear.
En Agregar módulo, seleccione el tipo de módulo que quiere desarrollar. Si desea agregar un módulo existente a la implementación, seleccione Módulo existente.
En Nombre del módulo, escriba un nombre para el módulo. Elija un nombre que sea único dentro del registro de contenedor.
En Url del repositorio, proporcione el nombre del repositorio de la imagen del módulo. Visual Studio rellena automáticamente el nombre del módulo con localhost:5000/<su nombre del módulo>. Reemplácelo por su propia información de registro. Utilice localhost si usa un registro de Docker local para realizar pruebas. Si va a usar Azure Container Registry, utilice el servidor de inicio de sesión de la configuración del registro. El servidor de inicio de sesión se parece a nombre del registro.azurecr.io. Reemplace solo la sección localhost:5000 de la cadena para que el resultado final se parezca a nombre del registro.azurecr.io/ nombre del módulo .
Seleccione Agregar para agregar el módulo al proyecto.
Captura de pantalla de cómo agregar aplicación y módulo.
Nota:
Para cambiar la dirección URL del repositorio en un proyecto de IoT Edge existente, abra el archivo module.json. La dirección URL del repositorio está en la propiedad repository del archivo JSON.
Ahora tiene un proyecto de IoT Edge y un módulo IoT Edge en la solución de Visual Studio.
Estructura de proyecto
La solución tiene dos carpetas de nivel de proyecto: una carpeta principal del proyecto y una sola carpeta de módulos. Por ejemplo, podría tener una carpeta de proyecto principal denominada AzureIotEdgeApp1 y una carpeta de módulo denominada IotEdgeModule1. La carpeta principal del proyecto tiene el manifiesto de implementación.
La carpeta del proyecto de módulo tiene un archivo para el código del módulo denominado o , en función del idioma que elija. Esta carpeta también tiene un archivo denominado que describe los metadatos del módulo. Los diferentes archivos de Docker aquí proporcionan la información necesaria para compilar el módulo como un contenedor de Windows o Linux.
Manifiesto de implementación del proyecto
Edite el manifiesto de implementación denominado . Este archivo es una plantilla de un manifiesto de implementación de IoT Edge que define todos los módulos que se ejecutan en un dispositivo y cómo se comunican entre sí. Para más información sobre los manifiestos de implementación, consulte Obtenga información sobre cómo implementar módulos y establecer rutas.
Al abrir esta plantilla de implementación, verá que se incluyen los dos módulos en tiempo de ejecución, edgeAgent y edgeHub, junto con el módulo personalizado que creó en este proyecto de Visual Studio. Un cuarto módulo, denominado SimulatedTemperatureSensor también está incluido. Este módulo predeterminado genera datos simulados que puede usar para probar los módulos o eliminar si no es necesario. Para obtener información sobre cómo funciona el sensor de temperatura simulado, consulte el código fuente SimulatedTemperatureSensor.csproj.
Configurar la versión de ejecución de IoT Edge
La versión más reciente del entorno de ejecución estable es la 1.5. Actualice la versión de tiempo de ejecución de IoT Edge a la versión estable más reciente o a la versión de destino de los dispositivos.
En Solution Explorer, haga clic con el botón derecho en el nombre del proyecto principal y seleccione Set IoT Edge versión en tiempo de ejecución.
Use el menú desplegable para elegir la versión en tiempo de ejecución que ejecutan los dispositivos IoT Edge y, a continuación, seleccione OK para guardar los cambios. Si no se realizó ningún cambio, seleccione Cancelar para salir.
La extensión no incluye una selección para las versiones en tiempo de ejecución más recientes. Para establecer la versión de tiempo de ejecución superior a la 1.2, abra el archivo de manifiesto de implementación deployment.debug.template.json . Cambie la versión en tiempo de ejecución de las imágenes edgeAgent y edgeHub del módulo en tiempo de ejecución del sistema. Por ejemplo, para usar IoT Edge versión 1.5 del entorno de ejecución, cambie las líneas siguientes en el archivo de manifiesto de implementación:
"systemModules": { "edgeAgent": { //... "image": "mcr.microsoft.com/azureiotedge-agent:1.5" //... "edgeHub": { //... "image": "mcr.microsoft.com/azureiotedge-hub:1.5", //...Si ha cambiado la versión, vuelva a generar el manifiesto de implementación haciendo clic con el botón derecho en el nombre del proyecto, seleccione Generar implementación para IoT Edge. Esto genera un manifiesto de implementación basado en la plantilla de implementación y lo coloca en la carpeta config del proyecto de Visual Studio.
Abra el archivo de manifiesto de implementación deployment.debug.template.json. El manifiesto deployment es un documento JSON que describe los módulos que se van a configurar en el dispositivo IoT Edge de destino.
Cambie la versión en tiempo de ejecución de las imágenes edgeAgent y edgeHub del módulo en tiempo de ejecución del sistema. Por ejemplo, para usar IoT Edge versión 1.5 del entorno de ejecución, cambie las líneas siguientes en el archivo de manifiesto de implementación:
"systemModules": { "edgeAgent": { //... "image": "mcr.microsoft.com/azureiotedge-agent:1.5", //... "edgeHub": { //... "image": "mcr.microsoft.com/azureiotedge-hub:1.5", //...
Opciones de infraestructura y desarrollo de módulos
Al agregar un nuevo módulo, este viene con un código predeterminado que está listo para crearse e implementarse en un dispositivo para que pueda empezar a realizar pruebas sin tener que modificar ningún código. El código del módulo se encuentra en la carpeta del módulo en un archivo denominado (para C#) o (para C).
La solución predeterminada se compila para que los datos simulados del módulo SimulatedTemperatureSensor se enruten al módulo, que toma la entrada y, a continuación, los envía a IoT Hub.
Cuando esté listo para personalizar la plantilla de módulo con su propio código, use los SDK de Azure IoT Hub para crear módulos que aborden las necesidades clave de las soluciones de IoT, como seguridad, administración de dispositivos y confiabilidad.
Depuración mediante el simulador
La herramienta de desarrollo Azure IoT EdgeHub proporciona una experiencia de desarrollo y depuración local. La herramienta ayuda a iniciar IoT Edge módulos sin el entorno de ejecución de IoT Edge para poder crear, desarrollar, probar, ejecutar y depurar IoT Edge módulos y soluciones localmente. Para realizar las pruebas, no es necesario insertar imágenes en un registro de contenedor e implementarlas en un dispositivo.
Para obtener más información, consulte Azure IoT EdgeHub Dev Tool.
Para inicializar la herramienta en Visual Studio:
Obtenga la cadena de conexión de su dispositivo IoT Edge (que se encuentra en el IoT Hub) desde el portal Azure o desde Azure CLI.
Si usa la CLI para recuperar el connection string, use este comando, reemplazando "[device_id]" y "[hub_name]" por sus propios valores:
az iot hub device-identity connection-string show --device-id [device_id] --hub-name [hub_name]En el menú Tools de Visual Studio, seleccione Azure IoT Edge Tools>Setup IoT Edge Simulator.
Pegue el connection string y seleccione OK.
Nota:
Debe seguir estos pasos solo una vez en el equipo de desarrollo, ya que los resultados se aplican automáticamente a todas las soluciones de Azure IoT Edge posteriores. Este procedimiento se puede seguir de nuevo si necesita cambiar a otro connection string.
Compilación y depuración de un solo módulo
Normalmente, quiere probar y depurar cada módulo antes de ejecutarlo dentro de una solución completa con varios módulos. La herramienta de simulador de IoT Edge permite ejecutar un único módulo de forma aislada un envío de mensajes a través del puerto 53000.
En Solution Explorer, seleccione y resalte la carpeta del proyecto del módulo (por ejemplo, IotEdgeModule1). Defina el módulo personalizado como el proyecto de inicio. Seleccione ProyectoEstablecer como proyecto de inicio del menú.
Presione F5 o seleccione el botón ejecutar barra de herramientas para iniciar el simulador de IoT Edge para un único módulo. Puede tardar inicialmente entre 10 y 20 segundos.
Captura de pantalla de cómo ejecutar un módulo.
Debería ver que aparece una ventana de aplicación de consola de .NET Core si el módulo se ha inicializado correctamente.
Establezca un punto de interrupción para inspeccionar el módulo.
- Si desarrolla en C#, establezca un punto de interrupción en la función de ModuleBackgroundService.cs.
- Si usa C, establezca un punto de interrupción en la función en main.c.
Haga una prueba al módulo enviando un mensaje. Al depurar un solo módulo, el simulador escucha en el puerto predeterminado 53000 para los mensajes. Para enviar un mensaje al módulo, ejecute el siguiente comando curl desde un shell de comandos como Git Bash o WSL Bash.
curl --header "Content-Type: application/json" --request POST --data '{"inputName": "input1","data":"hello world"}' http://localhost:53000/api/v1/messagesSi recibe el error sin coincidencia de llave o corchete en la dirección URL, en su lugar, pruebe el siguiente comando:
curl --header "Content-Type: application/json" --request POST --data "{\"inputName\": \"input1\", \"data\", \"hello world\"}" http://localhost:53000/api/v1/messagesDebe desencadenarse el punto de ruptura. Puede ver las variables en la ventana Visual Studio Locals, que se encuentra cuando se ejecuta el depurador. Vaya a Debug>Windows>Locals.
En bash o shell, debería ver una confirmación .
En la consola de .NET debería ver:
IoT Hub module client initialized. Received message: 1, Body: [hello world]Presione Ctrl + F5 o seleccione el botón Detener para parar la depuración.
Compilar y depurar múltiples módulos
Después de desarrollar un único módulo, es posible que desee ejecutar y depurar toda una solución con múltiples módulos. La herramienta del simulador de IoT Edge permite ejecutar todos los módulos definidos en el manifiesto de implementación, incluido un edgeHub simulado para el enrutamiento de mensajes. En este ejemplo, ejecutará dos módulos personalizados y el módulo del sensor de temperatura simulado. Los mensajes del módulo del sensor de temperatura simulado son enviados a cada módulo personalizado.
En Solution Explorer, agregue un segundo módulo a la solución haciendo clic con el botón derecho en la carpeta principal del proyecto. En el menú, seleccione Agregar>Nuevo IoT Edge Module.
En la ventana
Add moduleasigne un nombre al nuevo módulo y reemplace la partelocalhost:5000de la dirección URL del repositorio con el servidor de inicio de sesión de Azure Container Registry, como hizo antes.Abra el archivo para ver que el nuevo módulo se ha agregado a la sección modules. También se agregó una nueva ruta a la sección routes de
EdgeHubpara enviar mensajes desde el nuevo módulo a IoT Hub. Para enviar datos desde el sensor de temperatura simulado al nuevo módulo, agregue otra ruta con la línea siguiente de . Reemplace (en dos lugares) por el nombre de su propio módulo."sensorTo<NewModuleName>": "FROM /messages/modules/SimulatedTemperatureSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/<NewModuleName>/inputs/input1\")"Haga clic con el botón derecho en el proyecto principal, (por ejemplo, AzureIotEdgeApp1) y seleccione Establecer como proyecto de inicio. Al establecer el proyecto principal como el de inicio, se ejecutan todos los módulos de la solución. Esto incluye ambos módulos que ha agregado a la solución, el módulo de sensor de temperatura simulado y el centro simulado de Edge.
Pulse F5 o haga clic en el botón ejecutar de la barra de herramientas para ejecutar la solución. Puede tardar inicialmente entre 10 y 20 segundos. Asegúrese de que no tiene otros contenedores de Docker en ejecución que puedan enlazar el puerto que necesita para este proyecto.
Debería ver que dos ventanas de aplicación de consola .NET Core aparecen una para cada módulo.
Establezca un punto de interrupción para inspeccionar el módulo.
- Si desarrolla en C#, establezca un punto de interrupción en la función de ModuleBackgroundService.cs.
- Si usa C, establezca un punto de interrupción en la función en main.c.
Cree puntos de interrupción en cada módulo y luego presione F5 para ejecutar y depurar varios módulos a la vez. Debería ver varias ventanas de aplicación de consola de .NET Core, con cada ventana que representa un módulo diferente.
Presione Ctrl + F5 o seleccione el botón Detener para parar la depuración.
Compilación e inserción de imágenes en el registro
Después de desarrollar y depurar el módulo, compile e inserte la imagen del módulo en el Azure Container Registry. A continuación, implemente el módulo en el dispositivo IoT Edge.
Establezca el proyecto de IoT Edge principal como proyecto de inicio, no uno de los módulos individuales.
Seleccione Depurar o Versión como configuración para compilar las imágenes del módulo.
Nota:
Al elegir Debug, Visual Studio usa
Dockerfile.(amd64|windows-amd64).debugpara compilar imágenes de Docker. Esto incluye el depurador de la línea de comandos de .NET Core VSDBG en la imagen de contenedor. Para los módulos de IoT Edge listos para producción, use la configuración Release, que usaDockerfile.(amd64|windows-amd64)sin VSDBG.Si usa un registro privado como Azure Container Registry (ACR), use el siguiente comando de Docker para iniciar sesión. Obtenga el nombre de usuario y la contraseña de la página Claves de acceso de su registro en el portal de Azure.
docker login <ACR login server>Agregue la información de inicio de sesión del Azure Container Registry a la configuración del entorno de ejecución en el archivo
deployment.debug.template.json. Puede agregar sus credenciales del Registro al archivo (más seguro) o agregarlas directamente al archivo.Agregue las credenciales al archivo :
En Solution Explorer, seleccione el botón de barra de herramientas Show All Files. Aparece el archivo . Agregue el nombre de usuario y la contraseña de Azure Container Registry a su archivo
.env. Busque estas credenciales en la página Access Keys del Azure Container Registry en el portal de Azure.
DEFAULT_RT_IMAGE=1.5 CONTAINER_REGISTRY_USERNAME_myregistry=<my-registry-name> CONTAINER_REGISTRY_PASSWORD_myregistry=<my-registry-password>Adición de credenciales de forma directa a deployment.debug.template.json
Si desea agregar las credenciales directamente a la plantilla de implementación, reemplace los marcadores de posición por el nombre de usuario, la contraseña y el nombre del registro del administrador de ACR.
"settings": { "minDockerVersion": "v1.25", "loggingOptions": "", "registryCredentials": { "registry1": { "username": "<username>", "password": "<password>", "address": "<registry name>.azurecr.io" } } }Nota:
En este artículo se usan credenciales de inicio de sesión de administrador para Azure Container Registry, que son convenientes para escenarios de desarrollo y prueba. Cuando esté listo para escenarios de producción, se recomienda una opción de autenticación con privilegios mínimos, como las entidades de servicio. Para obtener más información, vea Administración del acceso al registro de contenedor.
Si usa un registro local, ejecute un registro local.
Por último, en el Solution Explorer, haga clic con el botón derecho en la carpeta principal del proyecto y seleccione Build and Push IoT Edge Modules para compilar e insertar la imagen de Docker para cada módulo. Esta operación puede tardar un minuto. Cuando vea
Finished Build and Push IoT Edge Modules.en la consola de salida de Visual Studio, ha terminado.
Implementación de la solución
Ahora que ha creado e insertado las imágenes del módulo en la Azure Container Registry, implemente la solución en el dispositivo IoT Edge. Ya tiene una plantilla de manifiesto de implementación en este tutorial. Genere un manifiesto de implementación a partir de él y, a continuación, use un comando Azure CLI para implementar los módulos en el dispositivo IoT Edge en Azure.
Haga clic con el botón derecho en el proyecto principal en Visual Studio Solution Explorer y elija Generar implementación para IoT Edge.
Captura de pantalla de la ubicación del elemento de menú "generate deployment" (generar implementación).
Vaya a la carpeta del proyecto principal de Visual Studio local y busque en la carpeta
config. La ruta de acceso del archivo podría tener el aspecto siguiente: . Aquí encontrará el manifiesto de implementación generado, como .Abra el archivo y confirme que la versión del esquema está establecida en 1.2.
"$edgeHub": { "properties.desired": { "schemaVersion": "1.2", "routes": { "IotEdgeModule2022ToIoTHub": "FROM /messages/modules/IotEdgeModule2022/outputs/* INTO $upstream", "sensorToIotEdgeModule2022": "FROM /messages/modules/SimulatedTemperatureSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/IotEdgeModule2022/inputs/input1\")", "IotEdgeModule2022bToIoTHub": "FROM /messages/modules/IotEdgeModule2022b/outputs/* INTO $upstream" }, "storeAndForwardConfiguration": { "timeToLiveSecs": 7200 } } }Sugerencia
La plantilla de implementación para Visual Studio 2022 requiere la versión de esquema 1.2. Si necesita que sea 1.1 o 1.0, espere hasta que se genere la implementación (no lo cambie en el ). La generación de una implementación crea un esquema 1.2 de forma predeterminada. Sin embargo, puede cambiar manualmente
deployment.amd64.debug.json, el manifiesto generado, si es necesario, antes de implementarlo en Azure.Importante
Una vez implementado el dispositivo IoT Edge, actualmente no se mostrará correctamente en el portal de Azure con la versión de esquema 1.2 (la versión 1.1 está bien). Sin embargo, esto no afectará al dispositivo, ya que todavía está conectado en IoT Hub y se puede comunicar con en cualquier momento mediante el Azure CLI.
Ahora vamos a implementar nuestro manifiesto con un comando Azure CLI. Abra el Símbolo del sistema para desarrolladores de Visual Studio y vaya al directorio config.
cd configImplemente el manifiesto del dispositivo IoT Edge en IoT Hub. El comando configura el dispositivo para usar módulos que se desarrollan en la solución. El manifiesto de implementación se creó en el paso anterior y se almacenó en la carpeta config. En la carpeta config, ejecute el siguiente comando de implementación. Reemplace , y con sus propios valores. Si el identificador de dispositivo IoT Edge no existe en el IoT Hub, debe crearse.
az iot edge set-modules --device-id [device id] --hub-name [hub name] --content [file path]Por ejemplo, el comando podría tener el siguiente aspecto:
az iot edge set-modules --device-id my-device-name --hub-name my-iot-hub-name --content deployment.amd64.debug.jsonDespués de ejecutar el comando, verá una confirmación de que la implementación se ha completado, impresa en formato JSON en su consola de comandos.
Imagen de Docker del módulo de compilación
Después de desarrollar el módulo, compile la imagen del módulo para almacenarla en un registro de contenedor para su implementación en el dispositivo IoT Edge.
Use el archivo Dockerfile del módulo para compilar la imagen de Docker del módulo.
docker build --rm -f "<DockerFilePath>" -t <ImageNameAndTag> "<ContextPath>"
Por ejemplo, si el shell de comandos está en el directorio del proyecto y el nombre del módulo es IotEdgeModule1, use los siguientes comandos para compilar la imagen para el registro local o un registro de contenedor de Azure:
# Build the image for the local registry
docker build --rm -f "./IotEdgeModule1/Dockerfile.amd64.debug" -t localhost:5000/iotedgemodule1:0.0.1-amd64 "./IotEdgeModule1"
# Or build the image for an Azure Container Registry
docker build --rm -f "./IotEdgeModule1/Dockerfile.amd64.debug" -t myacr.azurecr.io/iotedgemodule1:0.0.1-amd64 "./IotEdgeModule1"
Imagen de Docker del módulo de push
Inserte la imagen del módulo en el registro local o en un registro de contenedor.
docker push <ImageName>
Por ejemplo:
# Push the Docker image to the local registry
docker push localhost:5000/iotedgemodule1:0.0.1-amd64
# Or push the Docker image to an Azure Container Registry
az acr login --name myacr
docker push myacr.azurecr.io/iotedgemodule1:0.0.1-amd64
Implemente el módulo en el dispositivo IoT Edge.
En Visual Studio, abra deployment.debug.template.json archivo de manifiesto de implementación en el proyecto principal. El manifiesto deployment es un documento JSON que describe los módulos que se van a configurar en el dispositivo IoT Edge de destino. Antes de la implementación, debe actualizar las credenciales de Azure Container Registry, las imágenes del módulo y los valores de createOptions adecuados. Para obtener más información sobre los valores de opciones de creación, consulte Cómo configurar opciones de creación de contenedores para módulos de IoT Edge.
Si usa un Azure Container Registry para almacenar la imagen del módulo, debe agregar las credenciales a deployment.debug.template.json en la configuración edgeAgent. Por ejemplo,
"modulesContent": { "$edgeAgent": { "properties.desired": { "schemaVersion": "1.1", "runtime": { "type": "docker", "settings": { "minDockerVersion": "v1.25", "loggingOptions": "", "registryCredentials": { "myacr": { "username": "myacr", "password": "<your_acr_password>", "address": "myacr.azurecr.io" } } } }, //...Reemplace el valor de la propiedad image por el nombre de la imagen del módulo que insertó en el registro. Por ejemplo, si insertó una imagen etiquetada para el módulo personalizado IotEdgeModule1, reemplace el valor de propiedad de la imagen por el valor de la etiqueta.
Agregue o reemplace el valor de createOptions por contenido con cadenas para cada sistema y módulo personalizado de la plantilla de implementación.
Por ejemplo, la imagen de IotEdgeModule1 y la configuración createOptions sería similar a la siguiente:
"IotEdgeModule1": { "version": "1.0.0", "type": "docker", "status": "running", "restartPolicy": "always", "settings": { "image": "myacr.azurecr.io/iotedgemodule1:0.0.1-amd64", "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}" }
Use el comando IoT Edge Azure CLI set-modules para implementar los módulos en Azure IoT Hub. Por ejemplo, para implementar los módulos definidos en el archivo deployment.debug.amd64.json en IoT Hub my-iot-hub para el dispositivo IoT Edge my-device, ejecute el siguiente comando:
az iot edge set-modules --hub-name my-iot-hub --device-id my-device --content ./deployment.debug.template.json --login "HostName=my-iot-hub.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=<SharedAccessKey>"
Sugerencia
Busque la cadena de conexión de "IoT Hub" en el portal de Azure, en Azure IoT Hub, >Configuración de seguridad>Políticas de acceso compartido.
Confirmación de la implementación en el dispositivo
Para comprobar que los módulos de IoT Edge se implementaron en Azure, inicie sesión en el dispositivo (o máquina virtual), por ejemplo a través de SSH o Azure Bastion, y ejecute el comando IoT Edge list.
iotedge list
Debería ver una lista de los módulos que se ejecutan en el dispositivo o la máquina virtual.
NAME STATUS DESCRIPTION CONFIG
SimulatedTemperatureSensor running Up a minute mcr.microsoft.com/azureiotedge-simulated-temperature-sensor:1.0
edgeAgent running Up a minute mcr.microsoft.com/azureiotedge-agent:1.5
edgeHub running Up a minute mcr.microsoft.com/azureiotedge-hub:1.5
IotEdgeModule1 running Up a minute myacr.azurecr.io/iotedgemodule1:0.0.1-amd64.debug
myIotEdgeModule2 running Up a minute myacr.azurecr.io/myiotedgemodule2:0.0.1-amd64.debug
Depuración mediante SSH remoto de Docker
Los motores docker y Moby admiten conexiones SSH a contenedores, lo que le permite adjuntar y depurar código en un dispositivo remoto mediante Visual Studio.
Para la conexión remota a Docker se necesitan privilegios a nivel raíz. Siga los pasos descritos en Administración de Docker como usuario no raíz para permitir la conexión con el demonio de Docker en el dispositivo remoto. Cuando haya terminado de depurar, es posible que quiera quitar el usuario del grupo de Docker.
Siga los pasos para usar Visual Studio y adjuntar un proceso que se está ejecutando en un contenedor de Docker en el dispositivo remoto.
En Visual Studio, establezca puntos de interrupción en el módulo personalizado.
Cuando se alcanza un punto de interrupción, puede inspeccionar variables, recorrer el código y depurar el módulo.
Pasos siguientes
Para desarrollar módulos personalizados para los dispositivos IoT Edge, Comprender y usar Azure IoT Hub SDKs.
Para supervisar los mensajes del dispositivo a la nube (D2C) de un dispositivo de IoT Edge específico, revise el Tutorial: Supervisar dispositivos IoT Edge para empezar.