Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:
IoT Edge 1.5
Importante
IoT Edge 1.5 LTS é a versão suportada. O IoT Edge 1.4 LTS atingiu o fim de vida útil a 12 de novembro de 2024. Se estiveres a usar uma versão anterior, vê Update IoT Edge.
Este artigo explica como usar o Visual Studio Code para depurar módulos IoT Edge em várias línguas. No seu computador de desenvolvimento, use o Visual Studio Code para anexar e depurar o seu módulo num contentor local ou remoto.
Este artigo inclui passos para duas ferramentas de desenvolvimento IoT Edge.
- Ferramenta de Linha de Comandos Azure IoT Edge Dev Tool (CLI). Esta ferramenta é preferida para o desenvolvimento.
- Extensão de Ferramentas Azure IoT Edge para Visual Studio Code. A extensão está em modo de manutenção.
Selecione a versão da ferramenta usando o botão seletor de ferramentas no início deste artigo.
O Visual Studio Code suporta a escrita de módulos IoT Edge nas seguintes linguagens de programação:
- C# e C# Azure Functions
- C
- Python
- Node.js
- Java
O Azure IoT Edge funciona com as seguintes arquiteturas de dispositivos:
- AMD64
- ARM32v7
- ARM64
Para obter mais informações sobre sistemas operativos, idiomas e arquiteturas suportados, veja Suporte de linguagem e arquitetura.
Ao usar a extensão Visual Studio Code IoT Edge, também pode iniciar e depurar o código do seu módulo no IoT Edge Simulator.
Também pode usar um computador de desenvolvimento Windows e depurar módulos num contentor Linux usando IoT Edge for Linux no Windows (EFLOW). Para mais informações sobre o uso do EFLOW para desenvolver módulos, consulte Tutorial: Desenvolver módulos IoT Edge com contentores Linux usando IoT Edge para Linux no Windows.
Se é novo nas funcionalidades de depuração do Visual Studio Code, veja depuração do Visual Studio Code.
Pré-requisitos
Pode usar um computador ou uma máquina virtual a correr Windows, macOS ou Linux como máquina de desenvolvimento. Em computadores Windows, pode desenvolver módulos Windows ou Linux. Para desenvolver módulos Linux, utilize um computador Windows que cumpra os requisitos para o Docker Desktop.
Para instalar as ferramentas necessárias para desenvolvimento e depuração, complete o tutorial Develop Azure IoT Edge usando Visual Studio Code.
Instala Visual Studio Code.
Adicione estas extensões:
- Azure IoT Edge extensão. As ferramentas Azure IoT Edge para a extensão Visual Studio Code estão em modo manutenção.
- Azure IoT Hub extensão.
Para depurar o seu módulo num dispositivo, você precisará:
- Um IoT Hub ativo com pelo menos um dispositivo IoT Edge.
- Um dispositivo físico IoT Edge ou um dispositivo virtual. Crie um dispositivo virtual em Azure seguindo os passos do quickstart para Linux.
- Um módulo IoT Edge personalizado. Para criar um módulo personalizado, siga os passos do tutorial Develop Azure IoT Edge modules usando Visual Studio Code.
Depure sem um contentor utilizando o simulador do IoT Edge
O IoT Edge Simulator é uma ferramenta que corre no seu computador de desenvolvimento e simula o comportamento de um único dispositivo IoT Edge. Pode usar o IoT Edge Simulator para desenvolver e testar os seus módulos IoT Edge sem um dispositivo físico ou um tempo de execução completo de um dispositivo IoT Edge.
As etapas de depuração a seguir pressupõem que você já tenha criado um módulo personalizado. Se ainda não criaste um módulo personalizado, segue os passos no tutorial Desenvolver Azure IoT Edge módulos usando Visual Studio Code.
Depurar um módulo sem contentor não está disponível ao usar C ou Python.
Depurar em modo anexado usando o simulador IoT Edge
A depuração em modo attachment não está disponível para C ou Python.
Depurar um módulo com o runtime do IoT Edge
Cada pasta de módulo contém vários arquivos Docker para diferentes tipos de contêiner. Use qualquer arquivo que termine com a extensão .debug para criar seu módulo para teste.
Quando depura módulos com este método, os seus módulos estão a correr sobre o runtime do IoT Edge. O dispositivo IoT Edge e o Visual Studio Code podem correr na mesma máquina, mas normalmente, o Visual Studio Code corre na máquina de desenvolvimento enquanto o runtime e os módulos do IoT Edge correm noutra máquina física. Para depurar a partir do Visual Studio Code:
- Configura o teu dispositivo IoT Edge, constrói os teus módulos de IoT Edge com o Dockerfile .debug e depois implementa no dispositivo IoT Edge.
- Atualize
launch.jsonpara que Visual Studio Code possa ligar ao processo num contentor na máquina remota. Você pode encontrar esse arquivo na.vscodepasta em seu espaço de trabalho e ele é atualizado sempre que você adiciona um novo módulo que suporta depuração. - Utilize a depuração remota via SSH para ligar-se ao contentor na máquina remota.
Construa e implemente o seu módulo num dispositivo IoT Edge
No Visual Studio Code, abra o ficheiro de manifestos de implementação deployment.debug.template.json. O manifesto de implementação descreve os módulos a configurar no dispositivo IoT Edge destinado. Antes da implementação, atualize as suas credenciais de Azure Container Registry e as imagens dos módulos com os valores corretos de createOptions. Para mais informações sobre os valores createOption, veja Como configurar opções de criação de contentores para módulos IoT Edge.
Se estiver a usar um Azure Container Registry para armazenar a imagem do seu módulo, adicione as suas credenciais à secção edgeAgent>settings>registryCredentials na secção deployment.debug.template.json. Substitua myacr pelo seu próprio nome de registo em ambos os locais e forneça a sua palavra-passe e endereço do servidor de início de sessão. Por exemplo:
"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" } } } }, ...Adicione ou substitua o seguinte conteúdo no formato de string no valor createOptions para cada sistema (edgeHub e edgeAgent) e módulo personalizado (por exemplo, filtermodule) listado. Altere os valores, se necessário.
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"Por exemplo, a configuração do módulo de filtro deve ser semelhante 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\"}]}}}" }
- Na paleta de comandos do Visual Studio Code, execute o comando Azure IoT Edge: Criar e Enviar solução IoT Edge.
- Selecione o
deployment.debug.template.jsonarquivo para sua solução. - Na secção Azure IoT Hub>Dispositivos da vista do Explorador do Visual Studio Code, clique com o botão direito no nome do dispositivo IoT Edge para a implantação e depois escolha Criar Implantação para Dispositivo Único.
Gorjeta
Para confirmar que o dispositivo que escolheu é um dispositivo IoT Edge, selecione-o para expandir a lista de módulos e verificar a presença de $edgeHub e $edgeAgent. Todos os dispositivos IoT Edge incluem estes dois módulos.
- Navegue até a pasta config da sua solução, selecione o ficheiro
deployment.debug.amd64.json, e de seguida selecione Selecionar Manifesto de Implementação de Edge.
Verifique o status do contêiner a partir do seu dispositivo ou máquina virtual executando o docker ps comando em um terminal. Você deve ver seu contêiner listado depois de executar o comando. Se o Visual Studio Code e o runtime IoT Edge correrem na mesma máquina, verifique o estado na vista Docker do Visual Studio Code.
Importante
Se estiver a usar um registo privado como o Azure Container Registry para as suas imagens, pode ser necessário autenticar para enviar imagens. Use docker login <Azure Container Registry login server> ou az acr login --name <Azure Container Registry name> para autenticar.
Faça login no Docker
Forneça suas credenciais de registro de contêiner ao Docker para que ele possa enviar sua imagem de contêiner para armazenamento no registro.
Inicie sessão no Docker com as credenciais do Azure Container Registry que guardou após criar o registo.
docker login -u <Azure Container Registry username> -p <Azure Container Registry password> <Azure Container Registry login server>Poderá receber um aviso de segurança a recomendar a utilização do
--password-stdin. Embora seja uma prática recomendada para cenários de produção, está fora do escopo deste tutorial. Para obter mais informações, consulte a referência docker login.Iniciar sessão no Azure Container Registry. Pode ser necessário Install Azure CLI para usar o comando
az. Este comando solicita o seu nome de utilizador e palavra-passe encontrados no registo de contentores em Definições>Chaves de acesso.az acr login -n <Azure Container Registry name>
Gorjeta
Se, em algum momento deste tutorial, for desconectado, repita os passos de login do Docker e do Azure Container Registry para continuar.
Imagem Docker do módulo de construção
Use o Dockerfile do módulo para criar a imagem do Docker.
docker build --rm -f "<DockerFilePath>" -t <ImageNameAndTag> "<ContextPath>"
Por exemplo, para construir a imagem para o registo local ou para um Azure Container Registry, use os seguintes 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"
Imagem do Docker do módulo Push
Envie a imagem do módulo para o registro local ou para um registro de contêiner.
docker push <ImageName>
Por exemplo:
# 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
Implante o módulo no dispositivo IoT Edge
Use o comando IoT Edge Azure CLI set-modules para implantar os módulos no Azure IoT Hub. Por exemplo, para implementar os módulos definidos no ficheiro deployment.debug.template.json para IoT Hub my-iot-hub para o dispositivo IoT Edge my-device, use o seguinte 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>"
Gorjeta
Pode encontrar a sua chave de acesso partilhada IoT Hub no portal Azure no seu IoT Hub >Definições de segurança>Políticas de acesso partilhado>iothubowner.
Depurar seu módulo
Para depurar módulos num dispositivo remoto, utilize a funcionalidade de depuração SSH remota no Visual Studio Code.
Habilite o debugging remoto no Visual Studio Code instalando a extensão Remote Development. Para mais informações sobre a depuração remota do Visual Studio Code, veja Visual Studio Code Desenvolvimento Remoto.
Para detalhes sobre o uso da depuração remota de SSH em Visual Studio Code, veja Desenvolvimento Remoto usando SSH.
Na vista Debug do Visual Studio Code, selecione o ficheiro de configuração de debug para o módulo. Por padrão, o Dockerfile .debug , as configurações de contêiner createOptions do módulo e o launch.json arquivo usam localhost.
Selecione Iniciar Depuração ou F5 e, em seguida, selecione o processo ao qual anexar. Na vista de depuração do Visual Studio Code, vês variáveis no painel esquerdo.
Depurar usando SSH remoto do Docker
Os motores Docker e Moby suportam conexões SSH a containers, permitindo que depure usando o Visual Studio Code ligado a um dispositivo remoto. Você precisa atender aos seguintes pré-requisitos antes de poder usar esse recurso.
Os pré-requisitos de depuração SSH remota podem diferir dependendo do idioma usado. As secções seguintes descrevem a configuração para .NET. Para obter informações sobre outros idiomas, consulte Desenvolvimento remoto usando SSH para obter uma visão geral. Detalhes sobre como configurar a depuração remota estão incluídos nas secções de depuração para cada linguagem na documentação do Visual Studio Code.
Configurar o túnel SSH do Docker
Siga as etapas em Túnel SSH do Docker para configurar o túnel SSH em seu computador de desenvolvimento. O túnel SSH requer autenticação de par de chaves pública/privada e um contexto do Docker que define o ponto de extremidade do dispositivo remoto.
A conexão com o Docker requer privilégios de root. Siga as etapas em Gerenciar docker como um usuário não-root para permitir a conexão com o daemon do Docker no dispositivo remoto. Quando terminar a depuração, convém remover o utilizador do grupo Docker.
Em Visual Studio Code, use a Paleta de Comandos (Ctrl+Shift+P) para emitir o comando Docker Context: Use para ativar o contexto Docker que aponta para a máquina remota. Este comando permite que tanto o Visual Studio Code como o Docker CLI usem o contexto remoto da máquina.
Gorjeta
Todos os comandos do Docker usam o contexto atual. Lembre-se de alterar o contexto de volta para padrão quando terminar a depuração.
Para verificar se o contexto do Docker remoto está ativo, liste os contêineres em execução no dispositivo remoto:
docker psA saída lista os contêineres em execução no dispositivo remoto, semelhante à seguinte:
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 edgeAgentNo diretório .vscode, abra launch.json em Visual Studio Code e adicione uma nova configuração. Selecione Adicionar configuração e, em seguida, escolha o modelo de conexão remota correspondente para o módulo. Por exemplo, a seguinte configuração é para .NET Core. Altere o valor do parâmetro -H em PipeArgs para o nome DNS ou endereço IP do 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 },
Depurar remotamente o módulo
Na vista de Depuração do Visual Studio Code, selecione a configuração de depuração Módulo de Depuração Remota IoT Edge (.NET Core).
Selecione Iniciar depuração ou selecione F5. Selecione o processo ao qual anexar.
Na vista Debug do Visual Studio Code, vês as variáveis no painel esquerdo.
No Visual Studio Code, define pontos de interrupção no teu módulo personalizado.
Quando um ponto de interrupção é atingido, pode inspecionar variáveis, avançar através do código e depurar o módulo.
Nota
O exemplo anterior mostra como depurar módulos IoT Edge em contentores remotos. O exemplo adiciona um contexto remoto do Docker e altera os privilégios do Docker no dispositivo remoto. Depois de concluir a depuração dos módulos, defina o contexto do Docker como padrão e remova os privilégios da sua conta de usuário.
Consulte esta entrada de blog do IoT Developer para obter um exemplo usando um dispositivo Raspberry Pi.
Próximos passos
Depois de construíres o teu módulo, aprende a desenvolver módulos Azure IoT Edge.
Para desenvolver módulos para os seus dispositivos IoT Edge, aprenda sobre e use o Azure IoT Hub SDKs.