Desenvolva seus próprios módulos do IoT Edge

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

Importante

A versão com suporte é a IoT Edge 1.4. 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 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ê precisa fazer referência à 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 seu hub local do IoT Edge. O módulo IoT Edge enviará novas mensagens com 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 do dispositivo para a nuvem usando rotas:

  • Use a classe Module Client do SDK do Azure IoT. Cada módulo tem pontos de extremidade 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 mensagens no ponto de extremidade de entrada do seu módulo. Cada vez que uma nova mensagem é retornada, uma função de retorno de chamada é disparada pelo SDK do IoT do Azure.
  • Processe sua mensagem com essa função de retorno de chamada e (opcionalmente) envie novas mensagens na fila de ponto 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 gêmeo de módulo com o SDK do IoT do Azure, chame o ModuleClient.getTwin método.

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

Receber métodos diretos

Para receber um método direto com o SDK do IoT do Azure, 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 à 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 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

Para todos os idiomas na tabela a seguir, o IoT Edge oferece suporte ao desenvolvimento para AMD64 e a maioria dos contêineres Linux ARM64. Há suporte para contêineres Debian 11 ARM32 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 Azure IoT Edge usando o Visual Studio Code.

Windows

Não oferecemos mais suporte a 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 que o --privileged sinalizador e quaisquer recursos adicionais definidos no campo do Docker HostConfig no CapAddcontêiner criem opções.

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