Tutorial: Desenvolver módulos do IoT Edge com contêineres Linux usando o IoT Edge para Linux no Windows
Aplica-se a: IoT Edge 1.5 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 tutorial orienta você no desenvolvimento, depuração e implantação de seu próprio código em um dispositivo do Azure IoT Edge usando o IoT Edge para Linux no Windows e o Visual Studio 2022. Você aprenderá o cenário de desenvolvedor mais comum para soluções IoT Edge implantando um módulo C# em um dispositivo Linux. Você implantará e depurará um módulo personalizado do IoT Edge em execução em um contêiner Linux no Windows. Mesmo se você planeja usar uma linguagem diferente ou implantar um serviço do Azure, este tutorial ainda é útil para aprender sobre as ferramentas e conceitos de desenvolvimento.
Este tutorial inclui etapas para duas ferramentas de desenvolvimento do IoT Edge:
- A interface de linha de comando (CLI) da CLI da Ferramenta de Desenvolvimento do Azure IoT Edge, que é a ferramenta preferida para desenvolvimento
- A extensão Azure IoT Edge Tools para Visual Studio, que está no modo de manutenção
Use o botão seletor no início deste tutorial para selecionar a versão da ferramenta.
Neste tutorial, irá aprender a:
- Configure sua máquina de desenvolvimento.
- Use as ferramentas de desenvolvimento do IoT Edge para criar um novo projeto.
- Crie seu projeto como um contêiner e armazene-o em um registro de contêiner do Azure.
- Implante seu código em um dispositivo IoT Edge.
Pré-requisitos
Este tutorial pressupõe que você use uma máquina que executa o Windows como sua máquina de desenvolvimento. Em computadores Windows, você pode desenvolver módulos Windows ou Linux. Este tutorial orienta você pelo desenvolvimento de contêineres Linux, usando o IoT Edge para Linux no Windows para criar e implantar os módulos.
Antes de começar:
Instale o IoT Edge para Linux no Windows.
Leia o guia de início rápido Implante seu primeiro módulo IoT Edge em um dispositivo Windows.
Baixe o SDK do .NET Core.
Instale ou modifique o Visual Studio 2022 em sua máquina de desenvolvimento. Escolha as opções de desenvolvimento do Azure e do Desktop com carga de trabalho C++ .
Depois que a instalação do Visual Studio 2022 estiver pronta, baixe e instale as Ferramentas do Azure IoT Edge 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 CLI da Ferramenta de Desenvolvimento do Azure IoT Edge. A extensão inclui os modelos de projeto do Azure IoT Edge que você usa para criar o projeto do Visual Studio. Atualmente, você precisa instalar a extensão independentemente da ferramenta de desenvolvimento que você usa.
Gorjeta
Se estiver a utilizar o Visual Studio 2019, transfira e instale as Ferramentas do Azure IoT Edge para Visual Studio 2019 a partir do Visual Studio Marketplace.
- Instale a CLI do Azure.
- Crie um hub IoT gratuito ou de camada padrão no Azure como um recurso de nuvem.
Se não tiver uma subscrição do Azure, crie uma conta gratuita do Azure antes de começar.
Conceitos-chave
Este tutorial descreve o desenvolvimento de um módulo do IoT Edge. Um módulo IoT Edge é um contêiner que tem código executável. Você pode implantar um ou mais módulos em um dispositivo IoT Edge. Os módulos executam tarefas específicas, como ingerir dados de sensores, limpar e analisar dados ou enviar mensagens para um hub IoT. Para obter mais informações, consulte Compreender os módulos do Azure IoT Edge.
Ao desenvolver módulos do IoT Edge, é importante entender a diferença entre a máquina de desenvolvimento e o dispositivo IoT Edge de destino onde o módulo será eventualmente implantado. O contêiner que você cria para armazenar o código do módulo deve corresponder ao sistema operacional (SO) do dispositivo de destino.
Por exemplo, o cenário mais comum é alguém desenvolvendo um módulo em um computador Windows que pretende atingir um dispositivo Linux executando o IoT Edge. Nesse caso, o sistema operacional do contêiner é Linux.
Ao passar por este tutorial, tenha em mente a diferença entre o sistema operacional da máquina de desenvolvimento e o sistema operacional do contêiner. Para este tutorial, você usará seu host Windows para desenvolvimento e o IoT Edge para Linux na máquina virtual (VM) Windows para criar e implantar os módulos.
Este tutorial destina-se a dispositivos que executam o IoT Edge com contêineres Linux. Você pode usar seu sistema operacional preferido, desde que sua máquina de desenvolvimento execute contêineres Linux. Recomendamos usar o Visual Studio para desenvolver com contêineres Linux, então é isso que este tutorial usa. Você também pode usar o Visual Studio Code, embora haja diferenças no suporte entre as duas ferramentas. Para obter mais informações, consulte Desenvolver módulos do Azure IoT Edge usando o Visual Studio Code.
Configurar a CLI do Docker e o mecanismo do Docker para conexão remota
Os módulos do IoT Edge são empacotados como contêineres, portanto, você precisa de um mecanismo de contêiner em sua máquina de desenvolvimento para criá-los e gerenciá-los.
O IoT Edge para Linux na VM do Windows já contém uma instância do mecanismo Docker. Este tutorial mostra como se conectar remotamente da máquina de desenvolvedor do Windows à instância do IoT Edge para Linux no Docker de VM do Windows. Usando essa conexão remota, você remove a dependência do Docker Desktop para Windows.
Configurar a CLI do Docker
A primeira etapa é configurar a CLI do Docker na máquina de desenvolvimento do Windows para poder se conectar ao mecanismo remoto do Docker:
Faça o download da versão pré-compilada
docker.exe
da CLI do Docker da Chocolatey. Você também pode baixar o projeto cli oficial do GitHub e compilá-lo seguindo as instruções do repositório.Extraia
docker.exe
para um diretório em sua máquina de desenvolvimento, por exemplo,C:\Docker\bin
.Abra Acerca das Informações do Sistema do PC>Configurações>avançadas do sistema.
Selecione Variáveis de ambiente avançadas>. Em Variáveis de usuário, selecione Caminho.
Edite a variável Path e adicione o local do
docker.exe
.Abra uma sessão do PowerShell com privilégios elevados.
Verifique se a CLI do Docker está acessível usando este comando:
docker --version
Se você configurou tudo com êxito, a saída do comando deve mostrar a versão do Docker. Deve ser algo como
Docker version 20.10.12, build e91ed57
.
Configurar o mecanismo do Docker
A segunda etapa é configurar o IoT Edge para Linux no mecanismo Docker de VM do Windows para aceitar conexões externas e adicionar as regras de firewall apropriadas.
Aviso
Expor o mecanismo Docker a conexões externas pode aumentar os riscos de segurança. Você deve usar essa configuração apenas para fins de desenvolvimento. Certifique-se de reverter a configuração para as configurações padrão após a conclusão do desenvolvimento.
Abra uma sessão elevada do PowerShell e execute os seguintes comandos:
# Configure the IoT Edge for Linux on Windows VM Docker engine to accept external connections, and add the appropriate firewall rules. Invoke-EflowVmCommand "sudo iptables -A INPUT -p tcp --dport 2375 -j ACCEPT" # Create a copy of the IoT Edge for Linux on Windows VM _docker.service_ in the system folder. Invoke-EflowVmCommand "sudo cp /lib/systemd/system/docker.service /etc/systemd/system/docker.service" # Replace the service execution line to listen for external connections. Invoke-EflowVmCommand "sudo sed -i 's/-H fd:\/\// -H fd:\/\/ -H tcp:\/\/0.0.0.0:2375/g' /etc/systemd/system/docker.service" # Reload the IoT Edge for Linux on Windows VM services configurations. Invoke-EflowVmCommand "sudo systemctl daemon-reload" # Reload the Docker engine service. Invoke-EflowVmCommand "sudo systemctl restart docker.service" # Check that the Docker engine is listening to external connections. Invoke-EflowVmCommand "sudo netstat -lntp | grep dockerd"
Aqui está o exemplo de saída:
PS C:\> # Configure the IoT Edge for Linux on Windows virtual machine Docker engine to accept external connections, and add the appropriate firewall rules. PS C:\> Invoke-EflowVmCommand "sudo iptables -A INPUT -p tcp --dport 2375 -j ACCEPT" PS C:\> PS C:\> # Create a copy of the IoT Edge for Linux on Windows VM docker.service in the system folder. PS C:\> Invoke-EflowVmCommand "sudo cp /lib/systemd/system/docker.service /etc/systemd/system/docker.service" PS C:\> PS C:\> # Replace the service execution line to listen for external connections. PS C:\> Invoke-EflowVmCommand "sudo sed -i 's/-H fd:\/\// -H fd:\/\/ -H tcp:\/\/0.0.0.0:2375/g' /etc/systemd/system/docker.service" PS C:\> PS C:\> # Reload the IoT Edge for Linux on Windows VM services configurations. PS C:\> Invoke-EflowVmCommand "sudo systemctl daemon-reload" PS C:\> PS C:\> # Reload the Docker engine service. PS C:\> Invoke-EflowVmCommand "sudo systemctl restart docker.service" PS C:\> PS C:\> # Check that the Docker engine is listening to external connections. PS C:\> Invoke-EflowVmCommand "sudo netstat -lntp | grep dockerd" tcp6 0 0 :::2375 :::* LISTEN 2790/dockerd
Testar a ligação
A etapa final de configuração é testar a conexão do Docker com o IoT Edge para Linux no mecanismo Docker de VM do Windows:
Obtenha o endereço IP do IoT Edge para Linux na VM do Windows:
Get-EflowVmAddr
Gorjeta
Se o IoT Edge para Linux na VM do Windows foi implantado sem um IP estático, o endereço IP pode mudar nas reinicializações do sistema operacional host do Windows ou nas alterações de rede. Verifique se você está usando o endereço IP correto para o IoT Edge para Linux na VM do Windows sempre que quiser estabelecer uma conexão remota com o mecanismo do Docker.
Aqui está o exemplo de saída:
PS C:\> Get-EflowVmAddr [03/15/2022 15:22:30] Querying IP and MAC addresses from virtual machine (DESKTOP-J1842A1-EFLOW) - Virtual machine MAC: 00:15:5d:6f:da:78 - Virtual machine IP : 172.31.24.105 retrieved directly from virtual machine 00:15:5d:6f:da:78 172.31.24.105
Conecte-se ao IoT Edge para Linux no mecanismo Docker de VM do Windows e execute o contêiner de
hello-world
exemplo. Substitua<EFLOW-VM-IP>
pelo endereço IP da VM do IoT Edge para Linux no Windows que você obteve na etapa anterior.docker -H tcp://<EFLOW-VM-IP>:2375 run --rm hello-world
Quando o download do contêiner termina, o contêiner é executado e produz esta saída:
PS C:\> docker -H tcp://172.31.24.105:2375 run --rm hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 2db29710123e: Pull complete Digest: sha256:4c5f3db4f8a54eb1e017c385f683a2de6e06f75be442dc32698c9bbe6c861edd Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you're currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/
Criar um projeto do Azure IoT Edge
O modelo de projeto IoT Edge no Visual Studio cria uma solução que você pode implantar em dispositivos IoT Edge. Use as etapas a seguir para criar uma solução do Azure IoT Edge e, em seguida, gerar o primeiro módulo nessa solução. Cada solução IoT Edge pode conter mais de um módulo.
Importante
A estrutura do projeto IoT Edge que o Visual Studio cria 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 Azure IoT Edge Tools para criar o projeto do Visual Studio.
No Visual Studio, crie um novo projeto selecionando Criar um novo projeto na página inicial ou selecionando o botão Novo Projeto na barra de ferramentas.
Na página Criar um novo projeto, procure Azure IoT Edge. Selecione o projeto que corresponde à plataforma (módulo Linux IoT Edge) e à arquitetura do seu dispositivo IoT Edge e, em seguida, selecione Avançar.
Na página Configurar seu novo projeto, insira um nome para seu projeto, especifique o local e selecione Criar.
Na caixa de diálogo Adicionar módulo, selecione o tipo de módulo que deseja desenvolver. Você também pode selecionar Módulo existente para adicionar um módulo IoT Edge existente à sua implantação.
Em Nome do módulo, especifique o nome do módulo.
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/<seu nome> de módulo. 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/< seu nome> do módulo.
Selecione Adicionar para adicionar seu módulo ao projeto.
Nota
Se você tiver um projeto existente do IoT Edge, poderá alterar a URL do repositório abrindo o
module.json
arquivo. A URL do repositório está localizada narepository
propriedade 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
Sua solução tem duas pastas de nível de projeto: uma pasta de projeto principal e uma 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. O manifesto de implantação é um documento JSON que descreve os módulos a serem configurados no dispositivo IoT Edge de destino.
A pasta do módulo contém um arquivo para o código do módulo. Tem o nome de ou Program.cs
main.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 Docker 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 que você edita é 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. O arquivo também define como os módulos se comunicam entre si. Para obter mais informações sobre manifestos de implantação, consulte Saiba como implantar módulos e estabelecer rotas.
O modelo de implantação inclui:
- Os dois módulos
edgeAgent
de tempo de execução eedgeHub
. - O módulo personalizado que você criou neste projeto do Visual Studio.
- Um módulo chamado
SimulatedTemperatureSensor
. 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.4. Atualize 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 você deseja direcionar para seus dispositivos:
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.
Use o menu suspenso para escolher a versão de tempo de execução que seus dispositivos IoT Edge estão executando. Em seguida, selecione OK para salvar as alterações. Se você não fez alterações, selecione Cancelar.
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 o arquivo de manifesto de
deployment.debug.template.json
implantação. Altere a versão de tempo de execução para as imagensedgeAgent
do módulo de tempo de execução do sistema eedgeHub
. Por exemplo, se você quiser usar o tempo de execução do IoT Edge versão 1.4, altere as seguintes linhas no arquivo de manifesto de implantação:"systemModules": { "edgeAgent": { //... "image": "mcr.microsoft.com/azureiotedge-agent:1.4" //... "edgeHub": { //... "image": "mcr.microsoft.com/azureiotedge-hub:1.4", //...
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 selecionando Gerar implantação para IoT Edge. Esta etapa gera um manifesto de implantação com base no seu modelo de implantação. O manifesto
config
aparece na pasta do seu projeto do Visual Studio.
Abra o arquivo de manifesto de
deployment.debug.template.json
implantação.Altere a versão de tempo de execução para as imagens
edgeAgent
do módulo de tempo de execução do sistema eedgeHub
. Por exemplo, se você quiser usar o tempo de execução do IoT Edge versão 1.4, altere as seguintes linhas no arquivo de manifesto de implantação:"systemModules": { "edgeAgent": { //... "image": "mcr.microsoft.com/azureiotedge-agent:1.4", //... "edgeHub": { //... "image": "mcr.microsoft.com/azureiotedge-hub:1.4", //...
Configurar a instância remota do mecanismo Docker do Visual Studio 2022
Configure a extensão Azure IoT Edge Tools para usar o mecanismo Docker remoto que é executado dentro do IoT Edge para Linux em VM Windows:
Selecione Ferramentas>Configurações das ferramentas do Azure IoT Edge Ferramentas> do IoT Edge.
Substitua o valor DOCKER_HOST localhost pelo endereço IP do IoT Edge para Linux na VM Windows. Se você não se lembrar do endereço IP, use o cmdlet
Get-EflowVmAddr
IoT Edge para Linux no Windows PowerShell para obtê-lo. Por exemplo, se o endereço IP da VM do IoT Edge para Linux no Windows for 172.20.1.100, o novo valor deverá ser tcp://172.20.1.100:2375.Selecione OK.
Desenvolva o seu módulo
Quando você adiciona um novo módulo, ele vem com um código padrão 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).
Na solução padrão, os dados simulados do módulo são roteados para o SimulatedTemperatureSensor
módulo. O módulo pega a entrada e a envia para o Hub IoT do Azure.
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 outros módulos que atendam às principais necessidades de soluções de IoT. Essas necessidades podem incluir segurança, gerenciamento de dispositivos e confiabilidade.
Crie e envie 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. Como a solução criará ou depurará usando o mecanismo do Docker em execução dentro do IoT Edge para Linux na VM do Windows, a primeira etapa é criar e publicar o módulo para habilitar a depuração remota:
No Gerenciador de Soluções, selecione a pasta do projeto do módulo (por exemplo,
myIotEdgeModule
).Defina o módulo personalizado como o projeto de inicialização. No menu, selecione Projeto>definido como projeto de inicialização.
Para depurar o módulo C# Linux, você precisa atualizar o
Dockerfile.amd64.debug
arquivo para habilitar o serviço SSH. Atualize oDockerfile.amd64.debug
arquivo para usar o seguinte modelo: Dockerfile for Azure IoT Edge AMD64 C# Module with Remote Debug Support.Nota
Quando você seleciona Depurar, o Visual Studio usa
Dockerfile.(amd64|windows-amd64).debug
para criar imagens do Docker. Esse arquivo inclui o depurador de linha de comando do .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 usaDockerfile.(amd64|windows-amd64)
sem VSDBG.Certifique-se de que, na última linha do modelo,
ENTRYPOINT ["dotnet", "IotEdgeModule1.dll"]
, o nome da DLL corresponde ao nome do seu projeto do módulo IoT Edge.Para estabelecer uma conexão SSH com o módulo Linux, você precisa criar uma chave RSA. Abra uma sessão elevada do PowerShell e execute os seguintes comandos para criar uma nova chave RSA. Salve a chave RSA na mesma pasta do módulo IoT Edge e verifique se o nome da chave é
id_rsa
.ssh-keygen -t RSA -b 4096 -m PEM
Se você estiver usando um registro privado como o Registro de Contêiner do Azure, 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. Se estiver a utilizar um registo local, pode executar um registo local.
docker -H tcp://<EFLOW-VM-IP>:2375 login -u <Container Registry username> -p <Container Registry password> <Container Registry login server>
No Gerenciador de Soluções, clique com o botão direito do mouse na pasta do projeto e selecione Criar e Enviar Módulos IoT Edge. Este comando cria e envia por push a imagem do Docker para cada módulo.
Se você estiver usando um registro privado como o Registro de Contêiner do Azure, precisará adicionar suas informações de logon do Registro às configurações de tempo de execução encontradas no arquivo
deployment.template.json
. Substitua os espaços reservados pelo nome de usuário, senha e nome do Registro de administrador do Contêiner reais."settings": { "minDockerVersion": "v1.25", "loggingOptions": "", "registryCredentials": { "registry1": { "username": "<username>", "password": "<password>", "address": "<registry name>.azurecr.io" } } }
Nota
Este artigo usa credenciais de entrada 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.
É necessário expor a porta 22 para acessar o serviço SSH do módulo. Este tutorial usa 10022 como a porta do host, mas você pode especificar uma porta diferente. A porta especificada será usada como uma porta SSH para se conectar ao módulo Linux C#. Você precisa adicionar as informações da porta SSH para
createOptions
esta configuração do módulo Linux no arquivodeployment.debug.template.json
:"createOptions": { "HostConfig": { "Privileged": true, "PortBindings": { "22/tcp": [ { "HostPort": "10022" } ] } } }
No Gerenciador de Soluções, clique com o botão direito do mouse na pasta do projeto e selecione Gerar Implantação para IoT Edge para criar o novo JSON de implantação do IoT Edge.
Selecione Ver>Cloud Explorer. Verifique se você está conectado ao Visual Studio 2019.
No Cloud Explorer, expanda sua assinatura e localize o Hub IoT do Azure e o dispositivo Azure IoT Edge que você deseja implantar.
Clique com o botão direito do mouse no dispositivo IoT Edge e selecione Criar implantação. Vá para o manifesto de implantação de depuração configurado para sua plataforma. Ele está na
config
pasta em sua solução do Visual Studio, comodeployment.amd64.json
.
Criar a imagem do Docker do módulo
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, suponha que o 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"
Empurre a imagem do Docker do módulo
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
Implantar o módulo no dispositivo IoT Edge
No Visual Studio, abra o arquivo de manifesto de deployment.debug.template.json
implantação no projeto principal.
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 createOption
valores, consulte Como configurar opções de criação de contêiner para módulos do IoT Edge.
Se você estiver usando um registro de contêiner do Azure para armazenar a imagem do
edgeAgent
módulo, adicione suas credenciais nasdeployment.debug.template.json
configurações. 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" } } } }, //...
Substitua o valor da
image
propriedade pelo nome da imagem do módulo que você enviou por push para o registro. Por exemplo, se você enviou uma imagem marcadamyacr.azurecr.io/iotedgemodule1:0.0.1-amd64
para o móduloIotEdgeModule1
personalizado, substitua o valor da propriedade da imagem pelo valor da tag.Adicione ou substitua o
createOptions
valor por conteúdo stringified para cada sistema e módulo personalizado no modelo de implantação.Por exemplo, as
image
configurações ecreateOptions
paraIotEdgeModule1
seriam semelhantes ao exemplo a seguir:"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
deployment.debug.amd64.json
arquivo no hubmy-iot-hub
IoT para o dispositivomy-device
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.
No Cloud Explorer, clique com o botão direito do mouse no dispositivo de borda e atualize para confirmar se o novo módulo está em execução, juntamente com os
$edgeAgent
módulos e$edgeHub
.
Depurar a solução
Em uma sessão elevada do PowerShell, execute os seguintes comandos:
Obtenha o
moduleId
valor, com base no nome do módulo Linux C#. Substitua o espaço reservado<iot-edge-module-name>
pelo nome do módulo.$moduleId = Invoke-EflowVmCommand "sudo docker ps -aqf name=<iot-edge-module-name>"
Verifique se
$moduleId
está correto. Se a variável estiver vazia, certifique-se de que está a utilizar o nome de módulo correto.Inicie o serviço SSH dentro do contêiner Linux:
Invoke-EflowVmCommand "sudo docker exec -it -d $moduleId service ssh start"
Abra a porta SSH do módulo no IoT Edge para Linux na VM do Windows. (Este tutorial usa a porta 10022.)
Invoke-EflowVmCommand "sudo iptables -A INPUT -p tcp --dport 10022 -j ACCEPT"
Aviso
Por motivos de segurança, sempre que o IoT Edge para Linux na VM do Windows é reiniciado, a regra da tabela IP é excluída e volta às configurações originais. Além disso, você tem que iniciar o serviço SSH do módulo novamente manualmente.
Depois de iniciar com êxito o serviço SSH, selecione Depurar>Anexar ao Processo, defina Tipo de Conexão como SSH e defina Destino de conexão para o endereço IP do seu IoT Edge para Linux na VM do Windows. Se você não souber o endereço IP do seu IoT Edge para Linux na VM do Windows, poderá usar o
Get-EflowVmAddr
cmdlet do PowerShell.Digite o IP e, em seguida, selecione a tecla Enter. Na janela pop-up, insira as seguintes configurações:
Campo Value Nome de Anfitrião Endereço IP do IoT Edge para Linux em VM Windows Porta 10022 (ou aquele que você usou em sua configuração de implantação) Nome de utilizador raiz Tipo de autenticação Chave Privada Arquivo de chave privada Caminho completo para o id_rsa
valor que você criou em uma etapa anteriorFrase secreta Senha usada para a chave que você criou em uma etapa anterior Depois de se conectar com êxito ao módulo usando SSH, você pode escolher o processo e selecionar Anexar. Para o módulo C#, você precisa escolher processar dotnet e Anexar ao gerenciado (CoreCLR). Pode levar de 10 a 20 segundos na primeira vez.
Defina um ponto de interrupção para inspecionar o módulo:
- Se você estiver desenvolvendo em C#, defina um ponto de interrupção na
PipeMessage()
função emModuleBackgroundService.cs
. - Se você estiver usando C, defina um ponto de interrupção na
InputQueue1Callback()
função emmain.c
.
- Se você estiver desenvolvendo em C#, defina um ponto de interrupção na
A saída do
SimulatedTemperatureSensor
deve ser redirecionada parainput1
o módulo C# Linux personalizado. O ponto de interrupção deve ser acionado. Você pode observar variáveis na janela Locais do Visual Studio.Para interromper a depuração, selecione Ctrl+F5 ou selecione o botão Parar .
Clean up resources (Limpar recursos)
Se planeia avançar para o próximo artigo recomendado, pode manter os recursos e as configurações que criou e reutilizá-los. Também pode continuar a utilizar o mesmo dispositivo IoT Edge como um dispositivo de teste.
Caso contrário, exclua as configurações locais e os recursos do Azure que você usou neste artigo para evitar cobranças.
Eliminar recursos do Azure
A eliminação de recursos e grupos de recursos do Azure é irreversível. Confirme que não elimina acidentalmente o grupo de recursos ou recursos errados. Se você criou o hub IoT dentro de um grupo de recursos existente que tem recursos que deseja manter, exclua apenas o recurso do hub IoT em si, não o grupo de recursos.
Para eliminar os recursos:
Inicie sessão no Portal do Azure e selecione Grupos de recursos.
Selecione o nome do grupo de recursos que contém os recursos de teste do IoT Edge.
Reveja a lista de recursos que o seu grupo de recursos contém. Se quiser eliminá-los todos, pode selecionar Eliminar grupo de recursos. Se você quiser excluir apenas alguns deles, você pode selecionar cada recurso para excluí-los individualmente.
Próximo passo
Neste tutorial, você configurou o Visual Studio em sua máquina de desenvolvimento e implantou e depurou seu primeiro módulo IoT Edge a partir dele. Agora que você já conhece os conceitos básicos, tente adicionar funcionalidade a um módulo para que ele possa analisar os dados que passam por ele: