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 explica cómo usar Visual Studio Code para depurar módulos de IoT Edge en varios lenguajes. En el equipo de desarrollo, use Visual Studio Code para adjuntar y depurar el módulo en un contenedor de módulos local o remoto.
En este artículo se incluyen los pasos para dos herramientas de desarrollo de IoT Edge.
- Azure IoT Edge Dev Tool herramienta de línea de comandos (CLI). Para el desarrollo se prefiere esta herramienta.
- Extensión Azure IoT Edge para herramientas de Visual Studio Code. La extensión está en modo de mantenimiento.
Seleccione la versión de la herramienta con el botón selector de herramientas al principio de este artículo.
Visual Studio Code admite la escritura de módulos de IoT Edge en los siguientes lenguajes de programación:
- C# y Azure Functions
- C
- Python
- Node.js.
- Java
Azure IoT Edge funciona con estas arquitecturas de dispositivo:
- AMD64
- ARM32v7
- ARM64
Para obtener más información sobre los sistemas operativos, los lenguajes y las arquitecturas compatibles, consulte Compatibilidad de lenguaje y arquitectura.
Al usar la extensión Visual Studio Code IoT Edge, también puede iniciar y depurar el código del módulo en el simulador de IoT Edge.
También puede usar un equipo de desarrollo de Windows y depurar módulos en un contenedor de Linux mediante IoT Edge para Linux en Windows (EFLOW). Para obtener más información sobre el uso de EFLOW para desarrollar módulos, consulte Tutorial: Desarrollo de módulos de IoT Edge con contenedores de Linux mediante IoT Edge para Linux en Windows.
Si no está familiarizado con las funcionalidades de depuración en Visual Studio Code, consulte depuración en Visual Studio Code.
Requisitos previos
Puede usar un equipo o una máquina virtual que ejecute Windows, macOS o Linux como máquina de desarrollo. En equipos Windows, puede desarrollar módulos para Windows o Linux. Para desarrollar módulos de Linux, use un equipo de Windows que cumpla los requirements para Docker Desktop.
Para instalar las herramientas necesarias para el desarrollo y la depuración, complete el tutorial Desarrollar módulos de Azure IoT Edge mediante Visual Studio Code.
Instale Visual Studio Code.
Agregue estas extensiones:
- extensión Azure IoT Edge. La extensión Azure IoT Edge tools para Visual Studio Code está en modo mantenimiento.
- Azure IoT Hub extensión.
Para depurar el módulo en un dispositivo, necesita:
- Un IoT Hub activo con al menos un dispositivo IoT Edge.
- Un dispositivo físico IoT Edge o un dispositivo virtual. Cree un dispositivo virtual en Azure siguiendo los pasos descritos en quickstart para Linux.
- Un módulo de IoT Edge personalizado. Para crear un módulo personalizado, siga los pasos del tutorial Develop Azure IoT Edge modules using Visual Studio Code tutorial.
Depuración sin un contenedor mediante el simulador de IoT Edge
El simulador de IoT Edge es una herramienta que se ejecuta en el equipo de desarrollo y simula el comportamiento de un único dispositivo IoT Edge. Puede usar el simulador de IoT Edge para desarrollar y probar los módulos de IoT Edge sin un dispositivo físico ni un entorno de ejecución completo de IoT Edge dispositivo.
En los pasos de depuración siguientes se asume que ya ha creado un módulo personalizado. Si no ha creado un módulo personalizado, siga los pasos descritos en el tutorial Develop Azure IoT Edge using Visual Studio Code tutorial.
- C/Python
- C# / Azure Functions
- Java
- Node.js
La depuración de un módulo sin un contenedor no está disponible cuando se usa C o Python.
Depuración en modo de asociación con el simulador de IoT Edge
La depuración en modo de asociación no está disponible para C o Python.
Depurar un módulo con el entorno de ejecución de IoT Edge
Cada carpeta de módulo contiene varios archivos de Docker para distintos tipos de contenedor. Use cualquier archivo que termine con la extensión .debug para compilar el módulo para realizar pruebas.
Al depurar módulos mediante este método, los módulos se ejecutan encima del entorno de ejecución de IoT Edge. El dispositivo IoT Edge y Visual Studio Code se pueden ejecutar en la misma máquina, pero normalmente Visual Studio Code se ejecuta en la máquina de desarrollo mientras el entorno de ejecución y los módulos de IoT Edge se ejecutan en otra máquina física. Para depurar desde Visual Studio Code:
- Configure el dispositivo IoT Edge, compile los módulos de IoT Edge con el .debug Dockerfile y, a continuación, implemente en el dispositivo IoT Edge.
- Actualice
launch.jsonpara que Visual Studio Code pueda asociarse al proceso en un contenedor de la máquina remota. Puede encontrar este archivo en la carpeta del área de trabajo y se actualiza cada vez que agrega un nuevo módulo que admite la depuración. - Use la depuración de SSH remota para conectarse al contenedor en la máquina remota.
Compilación e implementación del módulo en un dispositivo IoT Edge
En Visual Studio Code, abra el archivo de manifiesto de implementación deployment.debug.template.json. El manifiesto deployment describe los módulos que se van a configurar en el dispositivo IoT Edge de destino. Antes de la implementación, actualice las credenciales de Azure Container Registry y las imágenes del módulo con los valores 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, agregue sus credenciales a la sección edgeAgent>settings>registryCredentials en deployment.debug.template.json. Reemplace myacr por su propio nombre del registro en ambos lugares y proporcione la contraseña y la dirección del servidor de inicio de sesión. Por ejemplo:
"modulesContent": { "$edgeAgent": { "properties.desired": { "schemaVersion": "1.1", "runtime": { "type": "docker", "settings": { "minDockerVersion": "v1.25", "loggingOptions": "", "registryCredentials": { "myacr": { "username": "myacr", "password": "<your_azure_container_registry_password>", "address": "myacr.azurecr.io" } } } }, ...Agregue o reemplace el siguiente contenido con cadenas para el valor createOptions en cada sistema (edgeHub y edgeAgent) y módulo personalizado (por ejemplo: filtermodule) que aparece enumerado. Cambie los valores si es necesario.
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"Por ejemplo, la configuración filtermodule debería ser similar a:
"filtermodule": { "version": "1.0", "type": "docker", "status": "running", "restartPolicy": "always", "settings": { "image": "myacr.azurecr.io/filtermodule:0.0.1-amd64", "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}" }
- En la paleta de comandos de Visual Studio Code, ejecute el comando Azure IoT Edge: Compilar y publicar solución de IoT Edge.
- Seleccione el archivo para su solución.
- En la sección Azure IoT Hub>Devices de la vista explorador de Visual Studio Code, haga clic con el botón derecho en el nombre del dispositivo IoT Edge para la implementación y elija Crear implementación para un solo dispositivo.
Sugerencia
Para confirmar que el dispositivo elegido es un dispositivo IoT Edge, selecciónelo para expandir la lista de módulos y comprobar la presencia de $edgeHub y $edgeAgent. Cada dispositivo IoT Edge incluye estos dos módulos.
- Vaya a la carpeta config de la solución, seleccione el archivo y haga clic en Select Edge Deployment Manifest (Seleccionar manifiesto de implementación de Edge).
Compruebe el estado del contenedor desde el dispositivo o la máquina virtual mediante la ejecución del comando en un terminal. Debería ver el contenedor en la lista después de ejecutar el comando. Si Visual Studio Code y el entorno de ejecución de IoT Edge se ejecutan en la misma máquina, compruebe el estado en la vista de Docker de Visual Studio Code.
Importante
Si usa un registro privado como Azure Container Registry para las imágenes, es posible que tenga que autenticarse para insertar imágenes. Use docker login <Azure Container Registry login server> o az acr login --name <Azure Container Registry name> para autenticarse.
Inicio de sesión en Docker
Especifique las credenciales del registro de contenedor a Docker para que pueda insertar la imagen de contenedor para que se almacene en el registro.
Inicie sesión en Docker con las credenciales de Azure Container Registry que guardó después de crear el registro.
docker login -u <Azure Container Registry username> -p <Azure Container Registry password> <Azure Container Registry login server>Podría recibir una advertencia de seguridad en la que se recomiende el uso de . Aunque es un procedimiento recomendado para escenarios de producción, está fuera del ámbito de este tutorial. Para más información, consulte la referencia de docker login.
Inicie sesión en el Azure Container Registry. Es posible que tenga que Instalar Azure CLI para usar el
azcomando. Este comando solicita el nombre de usuario y la contraseña que se encuentran en el registro de contenedor en ConfiguraciónClaves de acceso.az acr login -n <Azure Container Registry name>
Sugerencia
Si cierra la sesión en cualquier momento de este tutorial, repita los pasos de inicio de sesión de Docker y Azure Container Registry para continuar.
Imagen de Docker del módulo de compilación
Use el Dockerfile del módulo para compilar la imagen de Docker.
docker build --rm -f "<DockerFilePath>" -t <ImageNameAndTag> "<ContextPath>"
Por ejemplo, para compilar la imagen para el registro local o un Azure Container Registry, use los siguientes comandos:
# Build the image for the local registry
docker build --rm -f "./modules/filtermodule/Dockerfile.amd64.debug" -t localhost:5000/filtermodule:0.0.1-amd64 "./modules/filtermodule"
# Or build the image for an Azure Container Registry
docker build --rm -f "./modules/filtermodule/Dockerfile.amd64.debug" -t myacr.azurecr.io/filtermodule:0.0.1-amd64 "./modules/filtermodule"
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/filtermodule:0.0.1-amd64
# Or push the Docker image to an Azure Container Registry
az acr login --name myacr
docker push myacr.azurecr.io/filtermodule:0.0.1-amd64
Implementación del módulo en el dispositivo IoT Edge
Use el comando IoT Edge Azure CLI set-modules para implementar los módulos en el Azure IoT Hub. Por ejemplo, para implementar los módulos definidos en el archivo deployment.debug.template.json en IoT Hub my-iot-hub para el dispositivo IoT Edge my-device, use 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
Puede encontrar su clave de acceso compartido de IoT Hub en el portal de Azure en su IoT Hub >Configuración de seguridad>Políticas de acceso compartido>iothubowner.
Depura tu módulo
Para depurar módulos en un dispositivo remoto, use la depuración SSH remota en Visual Studio Code.
Para habilitar la depuración remota en Visual Studio Code, instale la extensión Remote Development. Para obtener más información sobre la depuración remota de Visual Studio Code, consulte Desarrollo remoto de Visual Studio Code.
Para obtener más información sobre el uso de la depuración de SSH remota en Visual Studio Code, consulte Desarrollo Remoto usando SSH.
En la vista de depuración de Visual Studio Code, seleccione el archivo de configuración de depuración del módulo. De forma predeterminada, el archivo Dockerfile .debug, la configuración del contenedor del módulo y el archivo usan localhost.
Seleccione Iniciar depuración o F5 y, a continuación, seleccione el proceso al que se va a asociar. En la vista Depuración de Visual Studio Code, verá las variables en el panel izquierdo.
Depuración mediante SSH remoto de Docker
Los motores Docker y Moby admiten conexiones SSH a contenedores que le permiten realizar la depuración en Visual Studio Code conectado a un dispositivo remoto. Antes de usar esta característica, debe cumplir los siguientes requisitos previos.
Los requisitos previos de depuración de SSH remoto pueden diferir en función del lenguaje que use. En las secciones siguientes se describe la configuración de .NET. Para obtener información sobre otros lenguajes, consulte Desarrollo remoto mediante SSH para obtener información general. Los detalles sobre cómo configurar la depuración remota se incluyen en las secciones de depuración de cada idioma de la documentación de Visual Studio Code.
Configuración de la tunelización SSH de Docker
Siga los pasos descritos en Tunelización ssh de Docker para configurar la tunelización SSH en el equipo de desarrollo. La tunelización SSH requiere autenticación de pares de claves pública y privada y un contexto de Docker que define el punto de conexión del dispositivo remoto.
La conexión a Docker requiere privilegios 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 termine de depurar, es posible que quiera quitar el usuario del grupo de Docker.
En Visual Studio Code, utiliza el Panel de comandos (Ctrl+Mayús+P) para ejecutar el comando Docker Context: Use y activar el contexto de Docker que apunta a la máquina remota. Este comando permite Visual Studio Code y la CLI de Docker usar el contexto de máquina remota.
Sugerencia
Todos los comandos de Docker usan el contexto actual. Recuerde volver a cambiar el contexto al predeterminado una vez que termine de depurar.
Para comprobar que el contexto remoto de Docker está activo, enumere los contenedores en ejecución en el dispositivo remoto:
docker psLa salida enumera los contenedores que se ejecutan en el dispositivo remoto, de forma similar a la siguiente:
PS C:\> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a317b8058786 myacr.azurecr.io/filtermodule:0.0.1-amd64 "dotnet filtermodule…" 24 hours ago Up 6 minutes filtermodule d4d949f8dfb9 mcr.microsoft.com/azureiotedge-hub:1.5 "/bin/sh -c 'echo \"$…" 24 hours ago Up 6 minutes 0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:5671->5671/tcp, :::5671->5671/tcp, 0.0.0.0:8883->8883/tcp, :::8883->8883/tcp, 1883/tcp edgeHub 1f0da9cfe8e8 mcr.microsoft.com/azureiotedge-simulated-temperature-sensor:1.0 "/bin/sh -c 'echo \"$…" 24 hours ago Up 6 minutes tempSensor 66078969d843 mcr.microsoft.com/azureiotedge-agent:1.5 "/bin/sh -c 'exec /a…" 24 hours ago Up 6 minutes edgeAgentEn el directorio .vscode, abra launch.json en Visual Studio Code y agregue una nueva configuración. Seleccione Agregar configuración y, a continuación, elija la plantilla de asociación remota coincidente para el módulo. Por ejemplo, la siguiente configuración es para .NET Core. Cambie el valor del parámetro -H en PipeArgs por el nombre DNS o la dirección IP del dispositivo.
"configurations": [ { "name": "Remote Debug IoT Edge Module (.NET Core)", "type": "coreclr", "request": "attach", "processId": "${command:pickRemoteProcess}", "pipeTransport": { "pipeProgram": "docker", "pipeArgs": [ "-H", "ssh://user@my-device-vm.eastus.cloudapp.azure.com:22", "exec", "-i", "filtermodule", "sh", "-c" ], "debuggerPath": "~/vsdbg/vsdbg", "pipeCwd": "${workspaceFolder}", "quoteArgs": true }, "sourceFileMap": { "/app": "${workspaceFolder}/modules/filtermodule" }, "justMyCode": true },
Depura remotamente tu módulo
En la vista Depurar de Visual Studio Code, seleccione la configuración de depuración Depuración Remota del Módulo IoT Edge (.NET Core).
Seleccione Iniciar depuración o presione F5. Seleccione el proceso al que desea asociarlo.
En la vista de depuración de Visual Studio Code, ves las variables en el panel izquierdo.
En Visual Studio Code, 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.
Nota:
En el ejemplo anterior se muestra cómo depurar módulos de IoT Edge en contenedores remotos. Este ejemplo agrega un contexto remoto de Docker y cambia los privilegios de Docker en el dispositivo remoto. Después de finalizar la depuración de tus módulos, establece el contexto de Docker en el predeterminado y quita los privilegios de la cuenta de usuario.
Consulte esta entrada de blog para desarrolladores de IoT para ver un ejemplo de uso de un dispositivo Raspberry Pi.
Pasos siguientes
Después de compilar el módulo, aprenda a implementar Azure IoT Edge módulos.
Para desarrollar módulos para los dispositivos de IoT Edge, obtenga información sobre Azure IoT Hub SDK.