Partilhar via


Desenvolva os seus próprios módulos IoT Edge

Aplica-se a:IoT Edge 1.5 IoT Edge 1.5

Importante

IoT Edge 1.5 LTS é a versão suportada. O IoT Edge 1.4 LTS atingiu o fim de vida útil a 12 de novembro de 2024. Se estiveres a usar uma versão anterior, vê Update IoT Edge.

Os módulos Azure IoT Edge podem ligar-se a outros serviços Azure e contribuir para o seu pipeline maior de dados na cloud. Este artigo descreve como pode desenvolver módulos para comunicar com o runtime do IoT Edge e o IoT Hub, e portanto com o resto da cloud do Azure.

Ambiente de execução IoT Edge

O runtime do IoT Edge fornece a infraestrutura para integrar a funcionalidade de múltiplos módulos IoT Edge e para os implementar em dispositivos IoT Edge. Qualquer programa pode ser apresentado como um módulo IoT Edge. Para tirar pleno partido das funcionalidades de comunicação e gestão IoT Edge, um programa a correr num módulo pode usar o Azure IoT Device SDK para se ligar ao hub local do IoT Edge.

Embalar o seu programa como um módulo IoT Edge

Para implementar o seu programa num dispositivo IoT Edge, deve primeiro containerizá-lo e executá-lo usando um motor compatível com Docker. IoT Edge utiliza Moby, o projeto open-source por detrás do Docker, como motor compatível com Docker. Podes passar os mesmos parâmetros a que estás habituado com o Docker para os teus módulos IoT Edge. Para mais informações, consulte Como configurar opções de criação de contentores para módulos de IoT Edge.

Utilização do hub IoT Edge

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

Ligação ao hub IoT Edge a partir de um módulo

Ligar ao hub local do IoT Edge a partir de um módulo envolve os mesmos passos de ligação que para qualquer cliente. Para mais informações, consulte Ligação ao hub IoT Edge.

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

Primitivas do IoT Hub

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

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, pode ligar-se ao IoT Edge hub e usar as primitivas do IoT Hub, tal como faria ao usar o IoT Hub com uma aplicação de dispositivo. A única diferença entre módulos IoT Edge e aplicações de dispositivos IoT é que, nos módulos, tem de 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 cloud através do hub IoT Edge que atua como um broker local e propaga mensagens para a cloud. Para permitir o processamento complexo de mensagens dispositivo-para-nuvem, um módulo IoT Edge pode intercetar e processar mensagens enviadas por outros módulos ou dispositivos para o seu hub local do IoT Edge. O módulo IoT Edge envia então novas mensagens com dados processados. Desta forma, pode criar cadeias de módulos IoT Edge para construir pipelines de processamento locais.

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

  • Utilize a classe ModuleClient do Azure IoT SDK. Cada módulo tem pontos finais de entrada e saída .
  • Para enviar mensagens no endpoint de saída do teu módulo, usa um método para enviar mensagens da tua ModuleClient classe.
  • Para enviar este endpoint de saída para IoT Hub, configure uma rota no módulo edgeHub do seu 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 seu módulo.
  • Ouça as mensagens no ponto de extremidade de entrada do seu módulo. Cada vez que uma nova mensagem é recebida, o Azure IoT SDK ativa uma função de retorno de chamada.
  • Processe a sua mensagem usando esta função de callback e (opcionalmente) envie novas mensagens na fila do endpoint do seu módulo.

Nota

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

Gêmeos

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

  • Para obter um gémeo de módulo usando o método Azure IoT SDK, chame o método ModuleClient.getTwin.
  • Para receber um patch duplo de módulo usando o Azure IoT SDK, implemente uma função de callback e registe-o usando o método ModuleClient.moduleTwinCallback para que a sua função de callback seja ativada sempre que um patch duplo seja ativado.

Obtenha métodos diretos

Para receber um método direto usando o método Azure IoT SDK, implemente uma função de callback e registe-a usando o método ModuleClient.methodCallback para que a sua função de callback seja ativada sempre que um método direto entra.

Suporte de linguagem e arquitetura

O IoT Edge suporta múltiplos sistemas operativos, arquiteturas de dispositivos e linguagens de desenvolvimento, para que possa construir o cenário que corresponde às suas necessidades. Use esta secção para compreender as suas opções para desenvolver módulos IoT Edge personalizados. Pode aprender mais sobre suporte de ferramentas e requisitos para cada linguagem em Prepare o seu ambiente de desenvolvimento e teste para IoT Edge.

Linux

Para todas as linguagens na tabela seguinte, IoT Edge suporta desenvolvimento para AMD64 e a maioria dos contentores Linux ARM64. Também suporta containers Debian 11 ARM32.

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 multiplataforma, como compilar um módulo ARM32 IoT Edge numa máquina de desenvolvimento AMD64, deve configurar a máquina de desenvolvimento para compilar código na arquitetura do dispositivo alvo correspondente ao módulo IoT Edge. Para mais informações sobre arquiteturas de dispositivos-alvo, consulte Tutorial: Develop Azure IoT Edge modules usando Visual Studio Code.

Windows

A Microsoft já não suporta contentores do Windows. IoT Edge para Linux em Windows é a forma recomendada de executar IoT Edge em dispositivos Windows.

Segurança do módulo

Desenvolve os teus módulos tendo a segurança em mente. Para saber mais sobre como proteger os seus módulos, consulte a segurança do Docker Engine.

Para ajudar a melhorar a segurança dos módulos, o IoT Edge desativa algumas funcionalidades dos contentores por defeito. Você pode sobrescrever os padrões para fornecer capacidades privilegiadas aos seus módulos, se necessário.

Permitir permissões elevadas do Docker

No ficheiro de configuração de um dispositivo IoT Edge, um parâmetro chamado allow_elevated_docker_permissions controla permissões elevadas do Docker. Quando definido como true, este flag concede o --privileged flag e quaisquer outras funcionalidades que definas no CapAdd campo do Docker HostConfig nas opções de criação de container.

Nota

Atualmente, este indicador é verdadeiro por padrão, o que concede permissões privilegiadas às implementações. Defina este flag como false para melhorar a segurança do dispositivo.

Ativar CAP_CHOWN e CAP_SETUID

As capacidades do Docker CAP_CHOWN e CAP_SETUID estão desativadas por defeito. Estas capacidades podem escrever em ficheiros seguros no dispositivo anfitrião e potencialmente obter acesso root.

Se precisares destas capacidades, reativa-as manualmente usando CapADD as opções de criação de contentores.

Próximos passos