Condividi tramite


Sviluppare moduli IoT Edge personalizzati

Applica a:IoT Edge 1.5 segno di spunta IoT Edge 1.5

Importante

IoT Edge 1.5 LTS è la versione supportata. IoT Edge 1,4 LTS ha raggiunto la fine della vita il 12 novembre 2024. Se si usa una versione precedente, vedere Update IoT Edge.

Azure IoT Edge moduli possono connettersi ad altri servizi di Azure e contribuire alla pipeline di dati cloud più grande. Questo articolo descrive come sviluppare moduli per comunicare con il runtime di IoT Edge e IoT Hub e quindi con il resto del cloud Azure.

Ambiente di runtime di IoT Edge

Il runtime di IoT Edge fornisce l'infrastruttura per integrare la funzionalità di più moduli IoT Edge e di distribuirli nei dispositivi IoT Edge. Qualsiasi programma può essere inserito in un pacchetto come modulo di IoT Edge. Per sfruttare al meglio IoT Edge funzionalità di comunicazione e gestione, un programma in esecuzione in un modulo può usare l'SDK per dispositivi Azure IoT per connettersi all'hub IoT Edge locale.

Imballaggio del programma come modulo di IoT Edge

Per distribuire il programma in un dispositivo IoT Edge, è necessario prima di tutto includerlo ed eseguirlo usando un motore compatibile con Docker. IoT Edge usa Moby, il progetto open source dietro Docker, come motore compatibile con Docker. È possibile passare gli stessi parametri usati con Docker ai moduli di IoT Edge. Per altre informazioni, vedere Come configurare le opzioni di creazione del contenitore per i moduli IoT Edge.

Uso dell'hub IoT Edge

Un hub IoT Edge offre due funzionalità principali: un proxy per IoT Hub e comunicazioni locali.

La connessione all'hub IoT Edge a partire da un modulo

La connessione all'hub IoT Edge locale da un modulo prevede gli stessi passaggi di connessione per tutti i client. Per altre informazioni, vedere Connessione all'hub IoT Edge.

Per usare IoT Edge routing su AMQP, è possibile usare il ModuleClient dal Azure IoT SDK. Creare un'istanza di ModuleClient per connettere il modulo all'hub IoT Edge, in esecuzione nel dispositivo, in modo analogo a come le istanze di DeviceClient connettono i dispositivi IoT a IoT Hub. Per altre informazioni sulla classe ModuleClient e sui relativi metodi di comunicazione, vedere le informazioni di riferimento sulle API per il linguaggio SDK preferito: C#, C, Python, Java o Node.js.

IoT Hub primitive

IoT Hub considera un'istanza del modulo simile a un dispositivo. Un'istanza del modulo può:

Attualmente, i moduli non possono ricevere messaggi da cloud a dispositivo o usare la funzionalità di caricamento file.

Quando si scrive un modulo, è possibile connettersi all'hub IoT Edge e usare IoT Hub primitive come si farebbe quando si usa IoT Hub con un'applicazione del dispositivo. L'unica differenza tra i moduli IoT Edge e le applicazioni per dispositivi IoT è che con i moduli è necessario fare riferimento all'identità del modulo anziché all'identità del dispositivo.

Messaggi da dispositivo a cloud

Un modulo IoT Edge può inviare messaggi al cloud tramite l'hub IoT Edge che funge da broker locale e propaga i messaggi al cloud. Per abilitare l'elaborazione complessa dei messaggi da dispositivo a cloud, un modulo IoT Edge può intercettare ed elaborare i messaggi inviati da altri moduli o dispositivi al relativo hub IoT Edge locale. Il modulo IoT Edge invia quindi nuovi messaggi con dati elaborati. In questo modo, è possibile creare catene di moduli di IoT Edge per creare pipeline di elaborazione locali.

Per inviare messaggi di telemetria da dispositivo a cloud tramite route:

  • Usare la classe ModuleClient della Azure IoT SDK. Ogni modulo ha punti di ingresso e uscita.
  • Per inviare messaggi sull'endpoint di output del modulo, usare un metodo di invio del messaggio dalla ModuleClient classe.
  • Per inviare questo endpoint di output a IoT Hub, configurare una route nel modulo edgeHub del dispositivo.

Per elaborare i messaggi usando i percorsi:

  • Configurare una route per inviare messaggi provenienti da un altro endpoint (modulo o dispositivo) all'endpoint di input del modulo.
  • Ascoltare i messaggi nell'endpoint di input del modulo. Ogni volta che viene restituito un nuovo messaggio, il Azure IoT SDK attiva una funzione di callback.
  • Elabora il messaggio usando questa funzione di callback e (facoltativamente) invia nuovi messaggi nella coda dell'endpoint del modulo.

Nota

Per altre informazioni sulla dichiarazione di una route, vedere Informazioni su come distribuire i moduli e stabilire route in IoT Edge.

Gemelli

Twins sono una delle primitive fornite da IoT Hub. I gemelli sono documenti JSON che archiviano informazioni sullo stato, inclusi metadati, configurazione e condizioni. Ogni modulo o dispositivo ha il proprio gemello.

  • Per ottenere un modulo gemello usando il metodo Azure IoT SDK, chiamare il metodo ModuleClient.getTwin.
  • Per ricevere una patch del modulo gemello usando il Azure IoT SDK, implementare una funzione di callback e registrarla usando il metodo ModuleClient.moduleTwinCallback in modo che la funzione di callback venga attivata ogni volta che viene visualizzata una patch gemella.

Ricevere metodi diretti

Per ricevere un metodo diretto usando il metodo Azure IoT SDK, implementare una funzione di callback e registrarla usando il metodo ModuleClient.methodCallback in modo che la funzione di callback venga attivata ogni volta che arriva un metodo diretto.

Supporto del linguaggio e dell'architettura

IoT Edge supporta più sistemi operativi, architetture dei dispositivi e linguaggi di sviluppo, in modo da poter creare lo scenario corrispondente alle proprie esigenze. Usare questa sezione per comprendere le opzioni per lo sviluppo di moduli di IoT Edge personalizzati. Per altre informazioni sul supporto e sui requisiti degli strumenti per ogni linguaggio in Prepare l'ambiente di sviluppo e test per IoT Edge.

Linux

Per tutte le lingue nella tabella seguente, IoT Edge supporta lo sviluppo per AMD64 e la maggior parte dei contenitori Linux ARM64. Supporta anche i contenitori Debian 11 ARM32.

Linguaggio di sviluppo Strumenti di sviluppo
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

Per la compilazione multipiattaforma, ad esempio la compilazione di un modulo ARM32 IoT Edge in un computer di sviluppo AMD64, è necessario configurare il computer di sviluppo per compilare il codice nell'architettura del dispositivo di destinazione corrispondente al modulo IoT Edge. Per altre informazioni sulle architetture dei dispositivi di destinazione, vedere Tutorial: Sviluppare moduli Azure IoT Edge usando Visual Studio Code.

Windows

Microsoft non supporta più i contenitori Windows. IoT Edge per Linux in Windows è il modo consigliato per eseguire IoT Edge nei dispositivi Windows.

Sicurezza dei moduli

Sviluppare i moduli tenendo presente la sicurezza. Per altre informazioni sulla protezione dei moduli, vedere Sicurezza del motore Docker.

Per migliorare la sicurezza dei moduli, IoT Edge disabilita alcune funzionalità del contenitore per impostazione predefinita. È possibile eseguire l'override delle impostazioni predefinite per fornire funzionalità con privilegi ai moduli, se necessario.

Consenti permessi Docker elevati

Nel file di configurazione in un dispositivo IoT Edge un parametro denominato allow_elevated_docker_permissions controlla le autorizzazioni Docker elevate. Se impostato su true, questo flag concede il --privileged flag e tutte le altre funzionalità definite nel campo HostConfig di Docker nelle opzioni di creazione dei contenitori.

Nota

Attualmente, questo flag è impostato su true per impostazione predefinita, il che concede autorizzazioni privilegiate alle distribuzioni. Impostare questo flag su false per migliorare la sicurezza dei dispositivi.

Abilitare CAP_CHOWN e CAP_SETUID

Le funzionalità di Docker CAP_CHOWN e CAP_SETUID sono disabilitate per impostazione predefinita. Queste funzionalità possono scrivere su file protetti nel dispositivo host e potenzialmente ottenere l'accesso root.

Se sono necessarie queste funzionalità, riabilitarle manualmente usando CapADD nelle opzioni di creazione del contenitore.

Passaggi successivi