Usar o Visual Studio 2022 para desenvolver e depurar módulos para o Azure IoT Edge

Aplica-se a:Marca de verificação do IoT Edge 1.5 IoT Edge 1.5 Marca de verificação do IoT Edge 1.4 IoT Edge 1.4

Importante

IoT Edge 1.5 LTS e IoT Edge 1.4 LTS são versões suportadas. O IoT Edge 1.4 LTS termina a vida útil em 12 de novembro de 2024. Se tiver uma versão anterior, consulte Atualizar IoT Edge.

Este artigo mostra como usar o Visual Studio 2022 para desenvolver, depurar e implantar módulos personalizados do Azure IoT Edge. O Visual Studio 2022 fornece modelos para módulos IoT Edge escritos em C e C#. As arquiteturas de dispositivos suportadas são Windows x64, Linux x64, ARM32 e ARM64 (visualização). Para obter mais informações sobre sistemas operacionais, idiomas e arquiteturas suportados, consulte Suporte a linguagem e arquitetura.

Este artigo inclui etapas para duas ferramentas de desenvolvimento do IoT Edge.

  • A interface de linha de comando (CLI) é a ferramenta preferida para o desenvolvimento.
  • Ferramentas do Azure IoT Edge para extensão do Visual Studio . A extensão está em modo de manutenção.

Use o botão seletor de ferramentas no início para escolher sua opção de ferramenta para este artigo. Ambas as ferramentas oferecem os seguintes benefícios:

  • Crie, edite, crie, execute e depure soluções e módulos do IoT Edge em seu computador de desenvolvimento local.
  • Codifique seus módulos do Azure IoT em C ou C# com os benefícios do desenvolvimento do Visual Studio.
  • Implante sua solução IoT Edge em um dispositivo IoT Edge por meio do Hub IoT do Azure.

Pré-requisitos

Este artigo pressupõe que você use uma máquina que executa o Windows como sua máquina de desenvolvimento.

  • Instale ou modifique o Visual Studio 2022 em sua máquina de desenvolvimento. Escolha as opções de desenvolvimento do Azure e desenvolvimento de área de trabalho com C++.

  • Transfira e instale as Ferramentas do Azure IoT Edge a partir do Visual Studio Marketplace. Você pode usar a extensão Azure IoT Edge Tools para criar e criar sua solução IoT Edge. A ferramenta de desenvolvimento preferida é a linha de comando (CLI) Azure IoT Edge Dev Tool. A extensão inclui os modelos de projeto do Azure IoT Edge usados para criar o projeto do Visual Studio. Atualmente, você precisa da extensão instalada independentemente da ferramenta de desenvolvimento que você usa.

    Importante

    A extensão Azure IoT Edge Tools for VS 2022 está no modo de manutenção. A ferramenta de desenvolvimento preferida é a linha de comando (CLI) Azure IoT Edge Dev Tool.

    Gorjeta

    Se você estiver usando o Visual Studio 2019, baixe e instale o Azure IoT Edge Tools for VS 2019 do mercado do Visual Studio.

  • Instalar o gerenciador de bibliotecas Vcpkg

    git clone https://github.com/Microsoft/vcpkg
    cd vcpkg
    bootstrap-vcpkg.bat
    

    Instalar o pacote azure-iot-sdk-c para Windows

    vcpkg.exe install azure-iot-sdk-c:x64-windows
    vcpkg.exe --triplet x64-windows integrate install
    
  • Baixe e instale um sistema de gerenciamento de contêineres compatível com Docker em sua máquina de desenvolvimento para criar e executar as imagens do módulo. Por exemplo, instale o Docker Community Edition.

  • Para desenvolver módulos com contêineres Linux, use um computador Windows que atenda aos requisitos do Docker Desktop.

  • Crie um Registro de Contêiner do Azure ou um Hub do Docker para armazenar as imagens do módulo.

    Gorjeta

    Você pode usar um registro Docker local para fins de protótipo e teste em vez de um registro na nuvem.

  • Instale a CLI do Azure.

  • Para testar seu módulo em um dispositivo, você precisa de um Hub IoT ativo com pelo menos um dispositivo IoT Edge. Para criar um dispositivo IoT Edge para teste, você pode criar um no portal do Azure ou com a CLI:

    • Criar um no portal do Azure é o mais rápido. No portal do Azure, vá para seu recurso do Hub IoT. Selecione Dispositivos no menu Gerenciamento de dispositivos e, em seguida, selecione Adicionar dispositivo.

      Em Criar um dispositivo, nomeie seu dispositivo usando a ID do dispositivo, marque Dispositivo IoT Edge e selecione Salvar no canto inferior esquerdo.

      Por fim, confirme se o novo dispositivo existe no Hub IoT, no menu Dispositivos de gerenciamento > de dispositivos. Para obter mais informações sobre como criar um dispositivo IoT Edge por meio do portal do Azure, leia Criar e provisionar um dispositivo IoT Edge no Linux usando chaves simétricas.

    • Para criar um dispositivo IoT Edge com a CLI, siga as etapas no início rápido para Linux ou Windows. No processo de registro de um dispositivo IoT Edge, você cria um dispositivo IoT Edge.

    Se você estiver executando o daemon do IoT Edge em sua máquina de desenvolvimento, talvez seja necessário parar o EdgeHub e o EdgeAgent antes de iniciar o desenvolvimento no Visual Studio.

Criar um projeto do Azure IoT Edge

O modelo de projeto IoT Edge no Visual Studio cria uma solução para implantar em dispositivos IoT Edge. Primeiro, você cria uma solução do Azure IoT Edge. Em seguida, você cria um módulo nessa solução. Cada solução IoT Edge pode conter mais de um módulo.

Na nossa solução, vamos construir três projetos. O módulo principal que contém EdgeAgent e EdgeHub, além do módulo de sensor de temperatura. Em seguida, adicione mais dois módulos do IoT Edge.

Importante

A estrutura do projeto IoT Edge criada pelo Visual Studio não é a mesma do Visual Studio Code.

Atualmente, a CLI da Ferramenta de Desenvolvimento do Azure IoT Edge não oferece suporte à criação do tipo de projeto do Visual Studio. Você precisa usar a extensão do Visual Studio IoT Edge para criar o projeto do Visual Studio.

  1. No Visual Studio, crie um novo projeto.

  2. Em Criar um novo projeto, procure Azure IoT Edge. Selecione o projeto que corresponde à plataforma e à arquitetura do seu dispositivo IoT Edge e selecione Avançar.

  3. Em Configurar seu novo projeto, insira um nome para seu projeto, especifique o local e selecione Criar.

  4. Em Adicionar módulo, selecione o tipo de módulo que deseja desenvolver. Se você tiver um módulo existente que deseja adicionar à sua implantação, selecione Módulo existente.

  5. Em Nome do módulo, insira um nome para o módulo. Escolha um nome exclusivo no seu registro de contêiner.

  6. Em URL do repositório, forneça o nome do repositório de imagens do módulo. O Visual Studio preenche automaticamente o nome do módulo com localhost:5000/<your module name>. Substitua-o por suas próprias informações de registro. Use localhost se você usar um registro Docker local para teste. Se você usar o Registro de Contêiner do Azure, use o servidor de logon nas configurações do Registro. O servidor de login se parece com <o nome> do registro.azurecr.io. Substitua apenas a parte localhost:5000 da cadeia de caracteres para que o resultado final se <pareça com o nome> do registro.azurecr.io/< nome do módulo.>

  7. Selecione Adicionar para adicionar seu módulo ao projeto.

    Captura de tela de como adicionar Aplicativo e Módulo.

    Nota

    Se você tiver um projeto existente do IoT Edge, poderá alterar a URL do repositório abrindo o arquivo module.json . A URL do repositório está localizada na propriedade repository do arquivo JSON.

Agora, você tem um projeto do IoT Edge e um módulo do IoT Edge em sua solução do Visual Studio.

Estrutura do projeto

Em sua solução, há duas pastas de nível de projeto, incluindo uma pasta de projeto principal e uma única pasta de módulo. Por exemplo, você pode ter uma pasta de projeto principal chamada AzureIotEdgeApp1 e uma pasta de módulo chamada IotEdgeModule1. A pasta principal do projeto contém seu manifesto de implantação.

A pasta do projeto do módulo contém um arquivo para o seu módulo com o codinome ou Program.csmain.c dependendo do idioma escolhido. Esta pasta também contém um arquivo chamado module.json que descreve os metadados do seu módulo. Vários arquivos do Docker incluídos aqui fornecem as informações necessárias para construir seu módulo como um contêiner Windows ou Linux.

Manifesto de implantação do seu projeto

O manifesto de implantação editado é chamado deployment.debug.template.json. Esse arquivo é um modelo de um manifesto de implantação do IoT Edge que define todos os módulos executados em um dispositivo, juntamente com a forma como eles se comunicam entre si. Para obter mais informações sobre manifestos de implantação, consulte Saiba como implantar módulos e estabelecer rotas.

Se você abrir esse modelo de implantação, verá que os dois módulos de tempo de execução, edgeAgent e edgeHub estão incluídos, juntamente com o módulo personalizado que você criou neste projeto do Visual Studio. Um quarto módulo chamado SimulatedTemperatureSensor também está incluído. Este módulo padrão gera dados simulados que você pode usar para testar seus módulos ou excluir se não for necessário. Para ver como o sensor de temperatura simulado funciona, veja o código-fonte SimulatedTemperatureSensor.csproj.

Definir a versão do tempo de execução do IoT Edge

Atualmente, a última versão de tempo de execução estável é 1.5. Você deve atualizar a versão de tempo de execução do IoT Edge para a versão estável mais recente ou para a versão que deseja direcionar para seus dispositivos.

  1. No Gerenciador de Soluções, clique com o botão direito do mouse no nome do seu projeto principal e selecione Definir versão do tempo de execução do IoT Edge.

    Captura de tela de como localizar e selecionar o item de menu chamado 'Definir versão do IoT Edge Runtime'.

  2. Use o menu suspenso para escolher a versão de tempo de execução que seus dispositivos IoT Edge estão executando e selecione OK para salvar as alterações. Se nenhuma alteração tiver sido feita, selecione Cancelar para sair.

    Atualmente, a extensão não inclui uma seleção para as versões mais recentes do tempo de execução. Se você quiser definir a versão de tempo de execução superior a 1.2, abra deployment.debug.template.json arquivo de manifesto de implantação. Altere a versão de tempo de execução para as imagens do módulo de tempo de execução do sistema edgeAgent e edgeHub. Por exemplo, se você quiser usar o tempo de execução do IoT Edge versão 1.5, altere as seguintes linhas no arquivo de manifesto de implantação:

    "systemModules": {
       "edgeAgent": {
        //...
          "image": "mcr.microsoft.com/azureiotedge-agent:1.5"
        //...
       "edgeHub": {
       //...
          "image": "mcr.microsoft.com/azureiotedge-hub:1.5",
       //...
    
  3. Se você alterou a versão, regenere seu manifesto de implantação clicando com o botão direito do mouse no nome do seu projeto e selecione Gerar implantação para IoT Edge. Isso gera um manifesto de implantação com base em seu modelo de implantação e aparece na pasta config do seu projeto do Visual Studio.

  1. Abra deployment.debug.template.json arquivo de manifesto de implantação. O manifesto de implantação é um documento JSON que descreve os módulos a serem configurados no dispositivo IoT Edge de destino.

  2. Altere a versão de tempo de execução para as imagens do módulo de tempo de execução do sistema edgeAgent e edgeHub. Por exemplo, se você quiser usar o tempo de execução do IoT Edge versão 1.5, altere as seguintes linhas no arquivo de manifesto de implantação:

    "systemModules": {
        "edgeAgent": {
        //...
            "image": "mcr.microsoft.com/azureiotedge-agent:1.5",
        //...
        "edgeHub": {
        //...
            "image": "mcr.microsoft.com/azureiotedge-hub:1.5",
        //...
    

Infraestrutura do módulo e opções de desenvolvimento

Quando você adiciona um novo módulo, ele vem com um código padrão que está pronto para ser criado e implantado em um dispositivo para que você possa começar a testar sem tocar em nenhum código. O código do módulo está localizado dentro da pasta do módulo em um arquivo chamado Program.cs (para C#) ou main.c (para C).

A solução padrão é criada para que os dados simulados do módulo SimulatedTemperatureSensor sejam roteados para o módulo, que recebe a entrada e a envia para o Hub IoT.

Quando estiver pronto para personalizar o modelo de módulo com seu próprio código, use os SDKs do Hub IoT do Azure para criar módulos que atendam às principais necessidades de soluções de IoT, como segurança, gerenciamento de dispositivos e confiabilidade.

Depurar usando o simulador

A Ferramenta de Desenvolvimento do Azure IoT EdgeHub fornece uma experiência de desenvolvimento e depuração local. A ferramenta ajuda a iniciar módulos do IoT Edge sem o tempo de execução do IoT Edge para que você possa criar, desenvolver, testar, executar e depurar módulos e soluções do IoT Edge localmente. Não é necessário enviar imagens por push para um registro de contêiner e implantá-las em um dispositivo para teste.

Para obter mais informações, consulte Ferramenta de desenvolvimento do Azure IoT EdgeHub.

Para inicializar a ferramenta no Visual Studio:

  1. Recupere a cadeia de conexão do seu dispositivo IoT Edge (encontrado em seu Hub IoT) do portal do Azure ou da CLI do Azure.

    Se estiver usando a CLI para recuperar sua cadeia de conexão, use este comando, substituindo "[device_id]" e "[hub_name]" por seus próprios valores:

    az iot hub device-identity connection-string show --device-id [device_id] --hub-name [hub_name]
    
  2. No menu Ferramentas no Visual Studio, selecione Configuração das Ferramentas do Azure IoT Edge Simulator>.

  3. Cole a cadeia de conexão e selecione OK.

Nota

Você precisa seguir essas etapas apenas uma vez em seu computador de desenvolvimento, pois os resultados são aplicados automaticamente a todas as soluções subsequentes do Azure IoT Edge. Este procedimento pode ser seguido novamente se você precisar alterar para uma cadeia de conexão diferente.

Criar e depurar um único módulo

Normalmente, você deseja testar e depurar cada módulo antes de executá-lo em uma solução inteira com vários módulos. A ferramenta de simulador IoT Edge permite executar um único módulo isoladamente e enviar mensagens pela porta 53000.

  1. No Gerenciador de Soluções, selecione e realce a pasta do projeto do módulo (por exemplo, IotEdgeModule1). Defina o módulo personalizado como o projeto de inicialização. Selecione Project set as StartUp Project (Projeto>definido como projeto de inicialização) no menu.

  2. Pressione F5 ou selecione o botão Executar barra de ferramentas para iniciar o simulador do IoT Edge para um único módulo. Pode demorar 10 a 20 segundos inicialmente.

    Captura de tela de como executar um módulo.

  3. Você verá uma janela do aplicativo de console do .NET Core aparecer se o módulo tiver sido inicializado com êxito.

  4. Defina um ponto de interrupção para inspecionar o módulo.

    • Se estiver desenvolvendo em C#, defina um ponto de interrupção na PipeMessage() função em ModuleBackgroundService.cs.
    • Se estiver usando C, defina um ponto de interrupção na InputQueue1Callback() função em main.c.
  5. Teste o módulo enviando uma mensagem. Quando você está depurando um único módulo, o simulador escuta mensagens na porta padrão 53000. Para enviar uma mensagem para o módulo, execute o seguinte comando curl a partir de um shell de comando como Git Bash ou WSL Bash.

    curl --header "Content-Type: application/json" --request POST --data '{"inputName": "input1","data":"hello world"}' http://localhost:53000/api/v1/messages
    

    Se você receber o erro de chave de fechamento/colchete incomparável no URL, tente o seguinte comando:

    curl --header "Content-Type: application/json" --request POST --data "{\"inputName\": \"input1\", \"data\", \"hello world\"}"  http://localhost:53000/api/v1/messages
    

    Captura de tela do console de saída, projeto do Visual Studio e janela Bash.

    O ponto de interrupção deve ser acionado. Você pode observar variáveis na janela Locais do Visual Studio, encontrada quando o depurador está em execução. Vá para Depurar>Locais do Windows.>

    No seu Bash ou shell, você deve ver uma {"message":"accepted"} confirmação.

    No console .NET, você deve ver:

    IoT Hub module client initialized.
    Received message: 1, Body: [hello world]
    

    Gorjeta

    Você também pode usar o PostMan ou outras ferramentas de API para enviar mensagens em vez de curl.

  6. Pressione Ctrl + F5 ou selecione o botão Parar para parar a depuração.

Compilar e depurar vários módulos

Depois de concluir o desenvolvimento de um único módulo, convém executar e depurar uma solução inteira com vários módulos. A ferramenta de simulador IoT Edge permite executar todos os módulos definidos no manifesto de implantação, incluindo um edgeHub simulado para roteamento de mensagens. Neste exemplo, você executa dois módulos personalizados e o módulo de sensor de temperatura simulado. As mensagens do módulo de sensor de temperatura simulado são encaminhadas para cada módulo personalizado.

  1. No Gerenciador de Soluções, adicione um segundo módulo à solução clicando com o botão direito do mouse na pasta principal do projeto. No menu, selecione Adicionar>Novo Módulo IoT Edge.

    Captura de tela de como adicionar um 'Novo Módulo IoT Edge' no menu.

  2. Add module Na janela, dê um nome ao novo módulo e substitua a localhost:5000 parte da URL do repositório pelo servidor de logon do Registro de Contêiner do Azure, como fazia antes.

  3. Abra o arquivo deployment.debug.template.json para ver se o novo módulo foi adicionado na seção modules . Uma nova rota também foi adicionada à seção EdgeHub de rotas para enviar mensagens do novo módulo para o Hub IoT. Para enviar dados do sensor de temperatura simulado para o novo módulo, adicione outra rota com a seguinte linha de JSON. Substitua <NewModuleName> (em dois lugares) pelo seu próprio nome de módulo.

    "sensorTo<NewModuleName>": "FROM /messages/modules/SimulatedTemperatureSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/<NewModuleName>/inputs/input1\")"
    
  4. Clique com o botão direito do mouse no projeto principal (por exemplo, AzureIotEdgeApp1) e selecione Definir como Projeto de Inicialização. Ao definir o projeto principal como o projeto de inicialização, todos os módulos da solução são executados. Isso inclui os dois módulos que você adicionou à solução, o módulo de sensor de temperatura simulado e o hub Edge simulado.

  5. Pressione F5 ou selecione o botão Executar barra de ferramentas para executar a solução. Inicialmente, pode demorar 10 a 20 segundos. Certifique-se de não ter outros contêineres do Docker em execução que possam vincular a porta necessária para este projeto.

  6. Você verá duas janelas do aplicativo de console do .NET Core aparecerem, uma para cada módulo.

  7. Defina um ponto de interrupção para inspecionar os módulos.

    • Se estiver desenvolvendo em C#, defina um ponto de interrupção na PipeMessage() função em ModuleBackgroundService.cs.
    • Se estiver usando C, defina um ponto de interrupção na InputQueue1Callback() função em main.c.
  8. Crie pontos de interrupção em cada módulo e pressione F5 para executar e depurar vários módulos simultaneamente. Você deve ver várias janelas do aplicativo de console do .NET Core, com cada janela representando um módulo diferente.

    Captura de tela do Visual Studio com dois consoles de saída.

  9. Pressione Ctrl + F5 ou selecione o botão Parar para parar a depuração.

Crie e envie imagens para o registro

Depois de desenvolver e depurar seu módulo, você pode criar e enviar por push a imagem do módulo para o Registro de Contêiner do Azure. Em seguida, você pode implantar o módulo em seu dispositivo IoT Edge.

  1. Defina o projeto principal do IoT Edge como o projeto inicial, não como um dos módulos individuais.

  2. Selecione Debug ou Release como a configuração a ser compilada para as imagens do módulo.

    Nota

    Ao escolher Depurar, o Visual Studio usa Dockerfile.(amd64|windows-amd64).debug para criar imagens do Docker. Isso inclui o depurador de linha de comando .NET Core VSDBG em sua imagem de contêiner durante a criação. Para módulos IoT Edge prontos para produção, recomendamos que você use a configuração Release , que usa Dockerfile.(amd64|windows-amd64) sem VSDBG.

  3. Se você estiver usando um registro privado como o Azure Container Registry (ACR), use o seguinte comando do Docker para entrar nele. Pode obter o nome de utilizador e a palavra-passe a partir da página Chaves de acesso do seu registo no portal do Azure.

    docker login <ACR login server>
    
  4. Vamos adicionar as informações de logon do Registro de Contêiner do Azure às configurações de tempo de execução encontradas no arquivo deployment.debug.template.json. Pode fazê-lo de duas formas. Você pode adicionar suas credenciais de registro ao seu .env arquivo (mais seguro) ou adicioná-las diretamente ao seu deployment.debug.template.json arquivo.

    Adicione credenciais ao seu .env ficheiro:

    No Gerenciador de Soluções, selecione o botão da barra de ferramentas Mostrar Todos os Arquivos . O .env arquivo é exibido. Adicione seu nome de usuário e senha do Registro de Contêiner do Azure ao seu .env arquivo. Essas credenciais podem ser encontradas na página Chaves de Acesso do seu Registro de Contêiner do Azure no portal do Azure.

    Captura de ecrã do botão que mostra todos os ficheiros no Solution Explorer.

        DEFAULT_RT_IMAGE=1.2
        CONTAINER_REGISTRY_USERNAME_myregistry=<my-registry-name>
        CONTAINER_REGISTRY_PASSWORD_myregistry=<my-registry-password>
    

    Adicionar credenciais diretamente ao deployment.debug.template.json

    Se preferir adicionar suas credenciais diretamente ao modelo de implantação, substitua os espaços reservados pelo nome de usuário, senha e nome do Registro do administrador do ACR.

          "settings": {
            "minDockerVersion": "v1.25",
            "loggingOptions": "",
            "registryCredentials": {
              "registry1": {
                "username": "<username>",
                "password": "<password>",
                "address": "<registry name>.azurecr.io"
              }
            }
          }
    

    Nota

    Este artigo usa credenciais de logon de administrador para o Registro de Contêiner do Azure, que são convenientes para cenários de desenvolvimento e teste. Quando estiver pronto para cenários de produção, recomendamos uma opção de autenticação de privilégios mínimos, como entidades de serviço. Para obter mais informações, consulte Gerenciar o acesso ao registro de contêiner.

  5. Se estiver a utilizar um registo local, pode executar um registo local.

  6. Finalmente, no Gerenciador de Soluções, clique com o botão direito do mouse na pasta principal do projeto e selecione Criar e Enviar Módulos de Borda IoT para criar e enviar por push a imagem do Docker para cada módulo. Isto pode demorar um minuto. Quando você vê Finished Build and Push IoT Edge Modules. no console de saída do Visual Studio, você está pronto.

Implementar a solução

Agora que você criou e enviou suas imagens de módulo para o Registro de Contêiner do Azure, pode implantar a solução em seu dispositivo IoT Edge. Você já tem um modelo de manifesto de implantação que tem observado ao longo deste tutorial. Vamos gerar um manifesto de implantação a partir disso e, em seguida, usar um comando da CLI do Azure para implantar seus módulos em seu dispositivo IoT Edge no Azure.

  1. Clique com o botão direito do mouse em seu projeto principal no Gerenciador de Soluções do Visual Studio e escolha Gerar implantação para IoT Edge.

    Captura de tela do local do item de menu 'gerar implantação'.

  2. Vá para a pasta local do projeto principal do Visual Studio e procure na config pasta. O caminho do arquivo pode ter esta aparência: C:\Users\<YOUR-USER-NAME>\source\repos\<YOUR-IOT-EDGE-PROJECT-NAME>\config. Aqui você encontra o manifesto de implantação gerado, como deployment.amd64.debug.json.

  3. Verifique o deployment.amd64.debug.json arquivo para confirmar se a versão do edgeHub esquema está definida como 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
           }
         }
       }
    

    Gorjeta

    O modelo de implantação do Visual Studio 2022 requer a versão do esquema 1.2. Se você precisar que ele seja 1.1 ou 1.0, aguarde até que a implantação seja gerada (não altere-a em deployment.debug.template.json). A geração de uma implantação criará um esquema 1.2 por padrão. No entanto, você pode alterar deployment.amd64.debug.jsonmanualmente o , o manifesto gerado, se necessário, antes de implantá-lo no Azure.

    Importante

    Depois que seu dispositivo IoT Edge for implantado, ele não será exibido corretamente no portal do Azure com o esquema versão 1.2 (a versão 1.1 será boa). Este é um bug conhecido e será corrigido em breve. No entanto, isso não afetará seu dispositivo, pois ele ainda está conectado no Hub IoT e pode ser comunicado a qualquer momento usando a CLI do Azure.

    Captura de ecrã do erro do portal do Azure na página do dispositivo IoT Edge.

  4. Agora vamos implantar nosso manifesto com um comando da CLI do Azure. Abra o prompt de comando do Visual Studio Developer e mude para o diretório config.

        cd config
    
  5. Implante o manifesto para seu dispositivo IoT Edge no Hub IoT. O comando configura o dispositivo para utilizar módulos desenvolvidos na sua solução. O manifesto de implantação foi criado na etapa anterior e armazenado na pasta config . Na pasta config , execute o seguinte comando de implantação. Substitua o [device id], [hub name]e [file path] pelos seus valores. Se o ID do dispositivo IoT Edge não existir no Hub IoT, ele deverá ser criado.

        az iot edge set-modules --device-id [device id] --hub-name [hub name] --content [file path]
    

    Por exemplo, seu comando pode ter esta aparência:

    az iot edge set-modules --device-id my-device-name --hub-name my-iot-hub-name --content deployment.amd64.debug.json
    
  6. Depois de executar o comando, você verá uma confirmação da implantação impressa no JSON prompt de comando.

Imagem do Docker do módulo de compilação

Depois de desenvolver o módulo, você pode criar a imagem do módulo para armazenar em um registro de contêiner para implantação em seu dispositivo IoT Edge.

Use o Dockerfile do módulo para criar a imagem do Docker do módulo.

docker build --rm -f "<DockerFilePath>" -t <ImageNameAndTag> "<ContextPath>" 

Por exemplo, vamos supor que seu shell de comando esteja no diretório do projeto e o nome do módulo seja IotEdgeModule1. Para criar a imagem para o registro local ou um registro de contêiner do Azure, use os seguintes comandos:

# 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"

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/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

Implante o módulo no dispositivo IoT Edge.

No Visual Studio, abra deployment.debug.template.json arquivo de manifesto de implantação no projeto principal. O manifesto de implantação é um documento JSON que descreve os módulos a serem configurados no dispositivo IoT Edge de destino. Antes da implantação, você precisa atualizar suas credenciais do Registro de Contêiner do Azure, suas imagens de módulo e os valores adequados createOptions . Para obter mais informações sobre valores createOption, consulte Como configurar opções de criação de contêiner para módulos IoT Edge.

  1. Se você estiver usando um Registro de Contêiner do Azure para armazenar a imagem do módulo, precisará adicionar suas credenciais ao deployment.debug.template.json nas configurações do edgeAgent . Por exemplo,

    "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"
              }
            }
          }
        },
    //...
    
  2. Substitua o valor da propriedade image pelo nome da imagem do módulo enviado por push para o registro. Por exemplo, se você enviou por push uma imagem marcada myacr.azurecr.io/iotedgemodule1:0.0.1-amd64 para o módulo personalizado IotEdgeModule1, substitua o valor da propriedade image pelo valor da tag.

  3. Adicione ou substitua o valor createOptions por conteúdo stringified para cada sistema e módulo personalizado no modelo de implantação.

    Por exemplo, as configurações de imagem e createOptions do IotEdgeModule1 seriam semelhantes às seguintes:

    "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 o comando IoT Edge Azure CLI set-modules para implantar os módulos no Hub IoT do Azure. Por exemplo, para implantar os módulos definidos no arquivo deployment.debug.amd64.json no Hub IoT my-iot-hub para o dispositivo my device do IoT Edge, 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

Você pode encontrar sua cadeia de conexão do Hub IoT no portal do Azure em Configurações de segurança do Hub >IoT do>Azure Políticas de acesso compartilhado.

Confirmar a implementação no seu dispositivo

Para verificar se seus módulos do IoT Edge foram implantados no Azure, entre em seu dispositivo (ou máquina virtual), por exemplo, por meio de SSH ou Azure Bastion, e execute o comando IoT Edge list.

   iotedge list

Você verá uma lista dos módulos em execução no dispositivo ou na 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.2
   edgeHub                     running          Up a minute      mcr.microsoft.com/azureiotedge-hub:1.2
   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

Depurar usando o SSH remoto do Docker

Os mecanismos Docker e Moby oferecem suporte a conexões SSH para contêineres, permitindo que você anexe e depure código em um dispositivo remoto usando o Visual Studio.

  1. Conectar-se remotamente ao Docker requer privilégios de nível raiz. 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 usuário do grupo do Docker.

  2. Siga as etapas para usar o Visual Studio para anexar a um processo em execução em um contêiner do Docker em seu dispositivo remoto.

  3. No Visual Studio, defina pontos de interrupção em seu módulo personalizado.

  4. Quando um ponto de interrupção é atingido, você pode inspecionar variáveis, percorrer o código e depurar seu módulo.

    Captura de tela do Visual Studio anexado ao contêiner do docker remoto em um dispositivo pausado em um ponto de interrupção.

Próximos passos

  • Para desenvolver módulos personalizados para seus dispositivos IoT Edge, entenda e use os SDKs do Hub IoT do Azure.

  • Para monitorar as mensagens de dispositivo para nuvem (D2C) de um dispositivo IoT Edge específico, consulte o Tutorial: Monitorar dispositivos IoT Edge para começar.