Desenvolva seus próprios módulos 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.

Os módulos do Azure IoT Edge podem se conectar a outros serviços do Azure e contribuir para seu pipeline de dados de nuvem maior. Este artigo descreve como você pode desenvolver módulos para se comunicar com o tempo de execução do IoT Edge e o Hub IoT e, portanto, o restante da nuvem do Azure.

Ambiente de tempo de execução do IoT Edge

O runtime do IoT Edge proporciona a infraestrutura para integrar a funcionalidade de vários módulos do IoT Edge e implementá-los em dispositivos IoT Edge. Qualquer programa pode ser empacotado como um módulo IoT Edge. Para aproveitar ao máximo as funcionalidades de comunicação e gerenciamento do IoT Edge, um programa em execução em um módulo pode usar o SDK do Dispositivo IoT do Azure para se conectar ao hub IoT Edge local.

Empacotando seu programa como um módulo IoT Edge

Para implantar seu programa em um dispositivo IoT Edge, ele deve primeiro ser conteinerizado e executado com um mecanismo compatível com o Docker. O IoT Edge usa o Moby, o projeto de código aberto por trás do Docker, como seu mecanismo compatível com o Docker. Os mesmos parâmetros que você está acostumado com o Docker podem ser passados para seus módulos do IoT Edge. Para obter mais informações, consulte Como configurar opções de criação de contêiner para módulos do IoT Edge.

Usando o hub IoT Edge

O hub IoT Edge fornece duas funcionalidades principais: um proxy para o Hub IoT e comunicações locais.

Conectando-se ao hub IoT Edge a partir de um módulo

A conexão com o hub IoT Edge local a partir de um módulo envolve as mesmas etapas de conexão que para qualquer cliente. Para obter mais informações, consulte Conectando-se ao hub IoT Edge.

Para usar o roteamento do IoT Edge sobre AMQP, você pode usar o ModuleClient do SDK do Azure IoT. Crie uma instância ModuleClient para conectar seu módulo ao hub IoT Edge em execução no dispositivo, semelhante a como as instâncias DeviceClient conectam dispositivos IoT ao Hub IoT. Para obter mais informações sobre a classe ModuleClient e seus métodos de comunicação, consulte a referência de API para sua linguagem SDK preferida: C#, C, Python, Java ou Node.js.

Primitivos do Hub IoT

O Hub IoT vê uma instância de módulo como semelhante a um dispositivo. Uma instância de módulo pode:

  • Enviar mensagens do dispositivo para a nuvem
  • Receber métodos diretos direcionados especificamente à sua identidade
  • Ter um módulo gêmeo que é distinto e isolado do dispositivo gêmeo e os outros módulos gêmeos desse dispositivo

Atualmente, os módulos não podem receber mensagens da nuvem para o dispositivo ou usar o recurso de upload de arquivos.

Ao escrever um módulo, você pode se conectar ao hub IoT Edge e usar primitivos do Hub IoT como faria ao usar o Hub IoT com um aplicativo de dispositivo. A única diferença entre os módulos do IoT Edge e os aplicativos de dispositivo IoT é que, com os módulos, você precisa se referir à identidade do módulo em vez da identidade do dispositivo.

Mensagens do dispositivo para a cloud

Um módulo IoT Edge pode enviar mensagens para a nuvem por meio do hub IoT Edge que atua como um agente local e propaga mensagens para a nuvem. Para permitir o processamento complexo de mensagens de dispositivo para nuvem, um módulo IoT Edge pode intercetar e processar mensagens enviadas por outros módulos ou dispositivos para seu hub IoT Edge local. O módulo IoT Edge enviará novas mensagens com dados processados. Cadeias de módulos IoT Edge podem, portanto, ser criadas para construir pipelines de processamento locais.

Para enviar mensagens de telemetria do dispositivo para a nuvem usando rotas:

  • Use a classe Module Client do SDK do Azure IoT. Cada módulo tem pontos finais de entrada e saída .
  • Use um método de envio de mensagem da classe Module Client para enviar mensagens no ponto de extremidade de saída do módulo.
  • Configure uma rota no módulo edgeHub do seu dispositivo para enviar esse ponto de extremidade de saída para o Hub IoT.

Para processar mensagens usando rotas:

  • Configure uma rota para enviar mensagens provenientes de outro ponto de extremidade (módulo ou dispositivo) para o ponto de extremidade de entrada do seu módulo.
  • Ouça as mensagens no ponto de extremidade de entrada do seu módulo. Cada vez que uma nova mensagem volta, uma função de retorno de chamada é acionada pelo SDK do Azure IoT.
  • Processe sua mensagem com essa função de retorno de chamada e (opcionalmente) envie novas mensagens na fila de pontos finais do módulo.

Nota

Para saber mais sobre como declarar uma rota, consulte Saiba como implantar módulos e estabelecer rotas no IoT Edge

Gêmeos

Os gêmeos são um dos primitivos fornecidos pelo Hub IoT. Há documentos JSON que armazenam informações de estado, incluindo metadados, configurações e condições. Cada módulo ou dispositivo tem seu próprio gêmeo.

  • Para obter um módulo gêmeo com o SDK do Azure IoT, chame o ModuleClient.getTwin método.

  • Para receber um patch gêmeo de módulo com o SDK do Azure IoT, implemente uma função de retorno de chamada e registre-a com o método do SDK do Azure IoT para que sua função de retorno de chamada seja acionada sempre que um patch gêmeo ModuleClient.moduleTwinCallback entrar.

Receba métodos diretos

Para receber um método direto com o SDK do Azure IoT, implemente uma função de retorno de chamada e registre-a com o ModuleClient.methodCallback método do SDK do Azure IoT para que sua função de retorno de chamada seja acionada sempre que um método direto entrar.

Suporte a linguagem e arquitetura

O IoT Edge oferece suporte a vários sistemas operacionais, arquiteturas de dispositivos e linguagens de desenvolvimento para que você possa criar o cenário que atenda às suas necessidades. Use esta seção para entender suas opções de desenvolvimento de módulos personalizados do IoT Edge. Você pode saber mais sobre suporte a ferramentas e requisitos para cada idioma em Prepare your development and test environment for IoT Edge.

Linux

Para todos os idiomas na tabela a seguir, o IoT Edge oferece suporte ao desenvolvimento para AMD64 e a maioria dos contêineres ARM64 Linux. Há suporte para contêineres Debian 11 ARM32 também.

Linguagem de programação Ferramentas de programação
C Visual Studio Code
Visual Studio 2019/2022
C# Visual Studio Code
Visual Studio 2019/2022
Java Visual Studio Code
Node.js Visual Studio Code
Python Visual Studio Code

Nota

Para compilação entre plataformas, como compilar um módulo ARM32 IoT Edge em uma máquina de desenvolvimento AMD64, você precisa configurar a máquina de desenvolvimento para compilar código na arquitetura do dispositivo de destino correspondente ao módulo IoT Edge. Para obter mais informações sobre arquiteturas de dispositivo de destino, consulte Desenvolver módulos do Azure IoT Edge usando o Visual Studio Code.

Windows

Não suportamos mais contêineres do Windows. O IoT Edge para Linux no Windows é a maneira recomendada de executar o IoT Edge em dispositivos Windows.

Segurança do módulo

Você deve desenvolver seus módulos com a segurança em mente. Para saber mais sobre como proteger seus módulos, consulte Segurança do Docker.

Para ajudar a melhorar a segurança do módulo, o IoT Edge desabilita alguns recursos de contêiner por padrão. Você pode substituir os padrões para fornecer recursos privilegiados aos seus módulos, se necessário.

Permitir permissões elevadas do Docker

No arquivo de configuração em um dispositivo IoT Edge, há um parâmetro chamado allow_elevated_docker_permissions. Quando definido como true, esse sinalizador permite que o --privilegedCapAdd sinalizador e quaisquer recursos adicionais que você definir no campo do Docker HostConfig no contêiner criem opções.

Nota

Atualmente, esse sinalizador é verdadeiro por padrão, o que permite que as implantações concedam permissões privilegiadas aos módulos. Recomendamos que você defina esse sinalizador como false para melhorar a segurança do dispositivo.

Ativar CAP_CHOWN e CAP_SETUID

Os recursos do Docker CAP_CHOWN e CAP_SETUID são desabilitados por padrão. Esses recursos podem ser usados para gravar para proteger arquivos no dispositivo host e, potencialmente, obter acesso root.

Se precisar desses recursos, você pode reativá-los manualmente usando CapADD nas opções de criação de contêiner.

Próximos passos

Prepare seu ambiente de desenvolvimento e teste para o IoT Edge

Desenvolver módulos do Azure IoT Edge usando o Visual Studio Code

Depurar módulos do Azure IoT Edge usando o Visual Studio Code

Compreender e utilizar os SDKs do Hub IoT do Azure