Desenvolva seus próprios módulos do IoT Edge

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

Importante

O IoT Edge 1.5 LTS e o IoT Edge 1.4 LTS são versões com suporte. O IoT Edge 1.4 LTS chegará ao fim da vida útil em 12 de novembro de 2024. Se você estiver em uma versão anterior, confira Atualizar o IoT Edge.

Os módulos do Azure IoT Edge podem conectar outros serviços do Azure e contribuir para o pipeline de dados em nuvem maior. Este artigo descreve como é possível desenvolver módulos para comunicação com o runtime do IoT Edge e Hub IoT e, portanto, com o restante da nuvem do Azure.

Ambiente de runtime do IoT Edge

O runtime do IoT Edge fornece a infraestrutura para integrar a funcionalidade de vários módulos do IoT Edge e implantá-los nos dispositivos IoT Edge. Qualquer programa pode ser empacotado como um módulo do IoT Edge. Para aproveitar ao máximo as funcionalidades de gerenciamento e comunicação 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 do IoT Edge local.

Como empacotar o programa como um módulo do IoT Edge

Para implantar o 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 Moby, o projeto de software livre por trás do Docker, como o mecanismo compatível com o Docker. Os mesmos parâmetros com os quais você está acostumado com o Docker podem ser passados para os módulos do IoT Edge. Para obter mais informações, confira Como configurar opções de criação de contêiner para módulos de IoT Edge.

Usar o hub do IoT Edge

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

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

A conexão ao hub do IoT Edge local de um módulo envolve as mesmas etapas de conexão para todos os clientes. Para obter mais informações, confira Conectar-se ao hub do IoT Edge.

Para usar o roteamento do IoT Edge sobre o AMQP, você pode usar o ModuleClient do SDK do IoT do Azure. Crie uma instância ModuleClient para conectar o módulo ao Hub do IoT Edge em execução no dispositivo, de modo semelhante como as instâncias DeviceClient conectam dispositivos ao Hub IoT. Para obter mais informações sobre a classe ModuleClient e seus métodos de comunicação, consulte a referência da API para seu idioma preferencial do SDK: 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:

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

Ao gravar um módulo, você pode se conectar ao hub do 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ê deve consultar a identidade do módulo em vez da identidade do dispositivo.

Mensagens do dispositivo para a nuvem

Um módulo do IoT Edge pode enviar mensagens para a nuvem por meio do hub do 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 do IoT Edge pode interceptar e processar mensagens enviadas por outros módulos ou dispositivos para o hub do IoT Edge local. O módulo do IoT Edge enviará, então, novas mensagens com os dados processados. Portanto, as cadeias de módulos do IoT Edge podem ser criadas para criar pipelines de processamento local.

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

  • Use a classe Module Client do SDK da Internet das Coisas do Azure. Cada módulo tem pontos de extremidade de entrada e saída.
  • Use um método de mensagem de envio 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 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 módulo.
  • Ouça mensagens no ponto de extremidade de entrada do módulo. Cada vez que uma nova mensagem é retornada, uma função de retorno de chamada é disparada pelo SDK do IoT do Azure.
  • Processe a mensagem com essa função de retorno de chamada e (opcionalmente) envie novas mensagens na fila de pontos de extremidade do módulo.

Observação

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. Existem documentos JSON que armazenam informações de estado, como metadados, configurações e condições. Cada módulo ou dispositivo tem o próprio gêmeo.

  • Para obter um módulo com o SDK da Internet das Coisas do Azure, chame o método ModuleClient.getTwin.

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

Receber métodos diretos

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

Suporte à linguagem e à arquitetura

O 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 atenda às suas necessidades. Use esta seção para entender as opções para o desenvolvimento de módulos do IoT Edge personalizados. Você pode aprender mais sobre o suporte às ferramentas e os requisitos para cada linguagem em Prepare o ambiente de desenvolvimento e teste para o IoT Edge.

Linux

Em todas as linguagens na tabela a seguir, o IoT Edge dá suporte ao desenvolvimento para contêineres ARM64 e para a maioria dos contêineres Linux AMD64. Há suporte para contêineres ARM32 do Debian 11 também.

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 entre plataformas, como compilar um módulo arm32 IoT Edge em um computador de desenvolvimento AMD64, você precisa configurar o computador de desenvolvimento para compilar código na arquitetura do dispositivo de destino que corresponde ao módulo IoT Edge. Para obter mais informações sobre arquiteturas de dispositivo de destino, consulte Desenvolver módulos do IoT Azure IoT Edge usando o Visual Studio Code.

Windows

Não há mais suporte para os contêineres do Windows. O IoT Edge para Linux no Windows é a maneira recomendada para executar IoT Edge em dispositivos Windows.

Segurança do módulo

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

Para 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 funcionalidades privilegiadas aos módulos, se necessário.

Permitir permissões elevadas do Docker

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

Observação

Atualmente, esse sinalizador é true por padrão, o que permite que as implantações concedam permissões privilegiadas aos módulos. É recomendável definir esse sinalizador como false para melhorar a segurança do dispositivo.

Habilitar CAP_CHOWN e CAP_SETUID

As funcionalidades do Docker CAP_CHOWNCAP_SETUID estão desabilitadas por padrão. É possível usar essas funções para fazer gravações para proteger arquivos no dispositivo host e, possivelmente, obter acesso à raiz.

Se você precisar dessas funções, poderá reabilitar manualmente usando CapADD nas opções de criação de contêiner.

Próximas etapas

Prepare o 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 por meio do Visual Studio Code

Entender e usar os SDKs de Hub IoT do Azure