Compartilhar via


Desenvolver seus próprios módulos de IoT Edge

Aplica-se a:IoT Edge 1.5 checkmark IoT Edge 1.5

Importante

IoT Edge 1.5 LTS é a versão suportada. IoT Edge 1.4 LTS atingiu o fim da vida útil em 12 de novembro de 2024. Se você estiver usando uma versão anterior, consulte Update IoT Edge.

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

IoT Edge ambiente de execução

O runtime IoT Edge fornece a infraestrutura para integrar a funcionalidade de vários módulos IoT Edge e implantá-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 de Dispositivo do Azure IoT para se conectar ao hub de IoT Edge local.

Empacotando seu programa como um módulo de IoT Edge

Para implantar seu programa em um dispositivo IoT Edge, primeiro você deve empatibilizá-lo e executá-lo usando um mecanismo compatível com o Docker. IoT Edge usa Moby, o projeto de software livre por trás do Docker, como seu mecanismo compatível com Docker. Você pode passar os mesmos parâmetros aos quais está acostumado com o Docker para seus módulos de IoT Edge. Para obter mais informações, consulte Como configurar as opções de criação de contêineres para módulos IoT Edge.

Usando o hub IoT Edge

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

Conectar ao hub do IoT Edge a partir de um módulo

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

Para usar o roteamento sobre AMQP no IoT Edge, você pode usar o ModuleClient do Azure IoT SDK. Crie uma instância de ModuleClient para conectar seu módulo ao hub IoT Edge em execução no dispositivo, semelhante a como DeviceClient instâncias conectam dispositivos IoT a IoT Hub. 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.

IoT Hub elementos

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

No momento, os módulos não podem receber mensagens de nuvem para dispositivo ou usar o recurso de upload do arquivo.

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

Mensagens do dispositivo para a nuvem

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 habilitar o processamento complexo de mensagens de dispositivo para nuvem, um módulo IoT Edge pode interceptar e processar mensagens enviadas por outros módulos ou dispositivos para seu hub de IoT Edge local. O módulo IoT Edge envia novas mensagens com dados processados. Dessa forma, você pode criar cadeias de módulos IoT Edge para criar pipelines de processamento local.

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

  • Use a classe ModuleClient do Azure IoT SDK. Cada módulo tem pontos de extremidade de entrada e saída.
  • Para enviar mensagens no ponto de extremidade de saída do módulo, use um método de enviar mensagem de sua ModuleClient classe.
  • Para enviar esse ponto de extremidade de saída para IoT Hub, configure uma rota no módulo edgeHub do dispositivo.

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 módulo.
  • Ouça mensagens no endpoint de entrada do módulo. Sempre que uma nova mensagem é retornada, o Azure IoT SDK dispara uma função de retorno de chamada.
  • Processe sua mensagem usando essa função callback e (opcionalmente) envie novas mensagens na fila de ponto de extremidade do módulo.

Observação

Para obter mais informações sobre como declarar uma rota, consulte Aprende como implantar módulos e estabelecer rotas em IoT Edge.

Gêmeos

Twins são uma das primitivas fornecidas pelo IoT Hub. Gêmeos são documentos JSON que armazenam informações de estado, incluindo metadados, configuração e condições. Cada módulo ou dispositivo tem o próprio gêmeo.

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

Obter métodos diretos

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

Suporte à linguagem e à arquitetura

IoT Edge dá suporte a vários sistemas operacionais, arquiteturas de dispositivo e linguagens de desenvolvimento para que você possa criar o cenário que corresponda às suas necessidades. Use esta seção para entender suas opções para desenvolver módulos de IoT Edge personalizados. Você pode saber mais sobre suporte a ferramentas e requisitos para cada idioma em Prepare seu ambiente de desenvolvimento e teste para IoT Edge.

Linux

Para todos os idiomas na tabela a seguir, o IoT Edge suporta desenvolvimento para AMD64 e a maior parte dos contêineres Linux ARM64. Ele também dá suporte a contêineres ARM32 do Debian 11.

Linguagem de desenvolvimento Ferramentas de desenvolvimento
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

Observação

Para compilação multiplataforma, como compilar um módulo arm32 IoT Edge em um computador de desenvolvimento AMD64, você deve configurar o computador de desenvolvimento para compilar código na arquitetura do dispositivo de destino que corresponda ao módulo IoT Edge. Para obter mais informações sobre arquiteturas de dispositivo de destino, consulte Tutorial: desenvolver módulos Azure IoT Edge usando Visual Studio Code.

Windows

A Microsoft não dá mais suporte a contêineres de Windows. IoT Edge para Linux no Windows é a maneira recomendada de executar IoT Edge em dispositivos Windows.

Segurança do módulo

Desenvolva seus módulos com segurança em mente. Para saber mais sobre como proteger seus módulos, consulte a segurança do Mecanismo do Docker.

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

Permitir permissões elevadas do Docker

No arquivo de configuração em um dispositivo IoT Edge, um parâmetro chamado allow_elevated_docker_permissions controla permissões elevadas do Docker. Quando definido como true, essa flag concede a flag e quaisquer outras capacidades que você definir no campo do Docker HostConfig nas opções de criação do contêiner .

Observação

Atualmente, esse sinalizador é verdadeiro por padrão, o que concede permissões privilegiadas para implantações. Defina esse sinalizador como false para melhorar a segurança do dispositivo.

Habilitar CAP_CHOWN e CAP_SETUID

Os recursos do Docker CAP_CHOWN e CAP_SETUID estão desabilitados por padrão. Essas capacidades podem gravar em arquivos seguros no dispositivo host e, potencialmente, obter acesso root.

Se você precisar desses recursos, habilite-os manualmente usando CapADD as opções de criação do contêiner.

Próximas etapas