Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Applica a:
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.
Usare Azure Functions per distribuire codice che esegue la logica di business direttamente nei dispositivi Azure IoT Edge. Questa esercitazione illustra come creare e distribuire una funzione Azure che filtra i dati dei sensori in un dispositivo simulato IoT Edge. Usare il dispositivo simulato IoT Edge creato nelle esercitazioni rapide. In questa esercitazione verranno illustrate le procedure per:
- Usare Visual Studio Code per creare una funzione Azure
- Usare Visual Studio Code e Docker per creare un'immagine Docker e pubblicarla in un registro contenitori
- Distribuire il modulo dal registro contenitori al dispositivo IoT Edge
- Visualizzare i dati filtrati
La funzione Azure creata in questa esercitazione filtra i dati relativi alla temperatura generati dal dispositivo. La funzione invia messaggi upstream solo a Azure IoT Hub quando la temperatura supera una soglia specificata.
Se non si ha un account Azure, creare un account free prima di iniziare.
Prerequisiti
Prima di iniziare questa esercitazione, seguire l'esercitazione per configurare l'ambiente di sviluppo per lo sviluppo di contenitori Linux: Develop Azure IoT Edge moduli usando Visual Studio Code. Al termine, sono disponibili i prerequisiti seguenti:
- Un IoT Hub di livello gratuito o standard in Azure.
- Un dispositivo AMD64 che esegue Azure IoT Edge con contenitori Linux. Usare la guida introduttiva per configurare un dispositivo Linux o un dispositivo Windows.
- Registro contenitori, ad esempio Azure Container Registry.
- Visual Studio Code configurato con le estensioni Azure IoT Edge e Azure IoT Hub. Gli strumenti Azure IoT Edge per l'estensione Visual Studio Code si trovano in modalità maintenance.
- Scaricare e installare un sistema di gestione contenitori compatibile con Docker nel computer di sviluppo. Impostarlo per far funzionare contenitori Linux.
Per sviluppare un modulo IoT Edge con Azure Functions, installare questi prerequisiti aggiuntivi nel computer di sviluppo:
Creare un progetto per le funzioni
Azure IoT Edge per Visual Studio Code offre funzionalità di gestione e modelli di codice. In questa sezione si usa Visual Studio Code per creare una soluzione IoT Edge con una funzione Azure.
Creare un nuovo progetto
Seguire questa procedura per creare un modello di soluzione funzione C# personalizzabile.
Aprire Visual Studio Code nel computer di sviluppo.
Aprire il riquadro comandi Visual Studio Code selezionando View > Command Palette.
Nel riquadro comandi aggiungere ed eseguire il comando Azure IoT Edge: Nuova soluzione IoT Edge. Seguire questi prompt nel riquadro comandi per creare la soluzione:
- Selezionare una cartella: scegliere il percorso sul computer di sviluppo in cui Visual Studio Code creerà i file della soluzione.
- Specificare un nome di soluzione: aggiungere un nome descrittivo per la soluzione, ad esempio FunctionSolution o accettare l'impostazione predefinita.
- Selezionare un modello di modulo: scegliere Azure Functions - C#.
- Specificare un nome modulo: assegnare al modulo il nome CSharpFunction.
- Fornire un repository di immagini Docker per il modulo: un repository di immagini include il nome del registro contenitori e il nome dell'immagine del contenitore. Il portale popola in anticipo l'immagine del contenitore dall'ultimo passaggio. Sostituire localhost:5000 con il valore del server di accesso dal tuo registro contenitori di Azure. È possibile recuperare il server Login dalla pagina Overview del registro contenitori nel portale di Azure. La stringa finale è simile a
<registry name>.azurecr.io/csharpfunction.
Aggiungere le credenziali del registro
Il file di ambiente nella soluzione archivia le credenziali per il registro contenitori e le condivide con il runtime di IoT Edge. Il runtime richiede queste credenziali per eseguire il pull delle immagini private nel dispositivo IoT Edge.
L'estensione IoT Edge in Visual Studio Code tenta di recuperare le credenziali del registro contenitori da Azure e di inserirle nel file di ambiente. Controllare se le credenziali sono già presenti nel file. In caso contrario, aggiungerle:
- In Esplora Visual Studio Code aprire il file .env.
- Aggiornare i campi con i valori username e password copiati dal registro contenitori Azure. Per trovarli di nuovo, passare al registro contenitori in Azure e cercare la pagina Impostazioni > Chiavi di accesso.
- Salvare questo file.
Note
Questa esercitazione usa le credenziali di accesso amministratore per Azure Container Registry, utili per scenari di sviluppo e test. Per l'ambiente di produzione, usare un'opzione di autenticazione con privilegi minimi, ad esempio le entità servizio. Per altre informazioni, vedere Gestire l'accesso al registro contenitori.
Impostare l'architettura di destinazione su AMD64
I moduli di Azure Functions su IoT Edge sono supportati solo nei contenitori basati su Linux AMD64. L'architettura di destinazione predefinita per Visual Studio Code è Linux AMD64, ma è possibile impostarla in modo esplicito su Linux AMD64 qui.
- Aprire il riquadro comandi e cercare Azure IoT Edge: Imposta piattaforma di destinazione predefinita per la soluzione Edge.
- Nel riquadro comandi selezionare l'architettura di destinazione AMD64 nell'elenco di opzioni.
Aggiornare il modulo con il codice personalizzato
Aggiungere codice in modo che il modulo CSharpFunction elabori i messaggi all'edge prima di inoltrarli a IoT Hub.
In l'Esplora di Visual Studio Code, aprire modules > CSharpFunction > CSharpFunction.cs.
Sostituire il contenuto del file CSharpFunction.cs con il codice seguente. Questo codice riceve dati di telemetria sulla temperatura ambientale e della macchina e inoltra il messaggio a IoT Hub solo se la temperatura del computer supera una soglia definita.
using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Threading.Tasks; using Microsoft.Azure.Devices.Client; using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Extensions.EdgeHub; using Microsoft.Azure.WebJobs.Host; using Microsoft.Extensions.Logging; using Newtonsoft.Json; namespace Functions.Samples { public static class CSharpFunction { [FunctionName("CSharpFunction")] public static async Task FilterMessageAndSendMessage( [EdgeHubTrigger("input1")] Message messageReceived, [EdgeHub(OutputName = "output1")] IAsyncCollector<Message> output, ILogger logger) { const int temperatureThreshold = 20; byte[] messageBytes = messageReceived.GetBytes(); var messageString = System.Text.Encoding.UTF8.GetString(messageBytes); if (!string.IsNullOrEmpty(messageString)) { logger.LogInformation("Info: Received one non-empty message"); // Get the body of the message and deserialize it. var messageBody = JsonConvert.DeserializeObject<MessageBody>(messageString); if (messageBody != null && messageBody.machine.temperature > temperatureThreshold) { // Send the message to the output as the temperature value is greater than the threshold. using (var filteredMessage = new Message(messageBytes)) { // Copy the properties of the original message into the new Message object. foreach (KeyValuePair<string, string> prop in messageReceived.Properties) {filteredMessage.Properties.Add(prop.Key, prop.Value);} // Add a new property to the message to indicate it is an alert. filteredMessage.Properties.Add("MessageType", "Alert"); // Send the message. await output.AddAsync(filteredMessage); logger.LogInformation("Info: Received and transferred a message with temperature above the threshold"); } } } } } //Define the expected schema for the body of incoming messages. class MessageBody { public Machine machine {get; set;} public Ambient ambient {get; set;} public string timeCreated {get; set;} } class Machine { public double temperature {get; set;} public double pressure {get; set;} } class Ambient { public double temperature {get; set;} public int humidity {get; set;} } }Salvare il file.
Sviluppare e inviare una soluzione IoT Edge
Nella sezione precedente è stata creata una soluzione IoT Edge e sono state modificate le CSharpFunction per escludere i messaggi con temperature del computer segnalate al di sotto della soglia accettabile. Ora compila la soluzione come immagine container e fai il push al registry dei container.
Aprire il terminale integrato Visual Studio Code. Selezionare Visualizza > terminale.
Accedere a Docker nel terminale. Usa il nome utente, la password e il server di autenticazione del registro dei contenitori di Azure. Ottenere questi valori dalla sezione chiavi Access del Registro di sistema nel portale di Azure.
docker login -u <ACR username> -p <ACR password> <ACR login server>Potrebbe venire visualizzato un avviso di sicurezza in cui si consiglia l'uso di
--password-stdin. Sebbene si tratti di una procedura consigliata per gli scenari di produzione, esula dell'ambito di questa esercitazione. Per ulteriori informazioni, vedere il riferimento docker login.In Esplora Visual Studio Code fare clic con il pulsante destro del mouse sul file deployment.template.json e quindi selezionare Build and Push IoT Edge Solution.
Il comando di creazione e push avvia tre operazioni. Prima di tutto, crea una nuova cartella nella soluzione denominata config con il manifesto di distribuzione completo, compilato dal modello di distribuzione e da altri file di soluzione. In secondo luogo, viene eseguito il comando
docker buildper costruire l'immagine del container in base al Dockerfile appropriato per l'architettura di destinazione. Infine, eseguedocker pushper eseguire il push del repository di immagini nel registro contenitori.Questo processo può richiedere alcuni minuti la prima volta, ma è più veloce la volta successiva che si eseguono i comandi.
Visualizzare l'immagine del contenitore
Visual Studio Code visualizza un messaggio di operazione riuscita quando si effettua il push dell'immagine del contenitore nel registry dei contenitori. Per confermare l'operazione, visualizzare l'immagine nel Registro di sistema.
- Nel portale di Azure, vai al tuo registro dei contenitori di Azure.
- Selezionare Servizi > Repository.
- Nell'elenco viene visualizzato il repository csharpfunction . Selezionare questo repository per visualizzare altri dettagli.
- Nella sezione Tag viene visualizzato il tag 0.0.1-amd64 . Questo tag mostra la versione e la piattaforma dell'immagine compilata. Il filemodule.json nella cartella CSharpFunction imposta questi valori.
Distribuire ed eseguire la soluzione
Usare il portale di Azure per distribuire il modulo delle Funzioni in un dispositivo IoT Edge come nella guida introduttiva. È anche possibile distribuire e monitorare i moduli da Visual Studio Code. Le sezioni seguenti usano le Azure IoT Edge e le IoT Hub per le estensioni Visual Studio Code elencate nei prerequisiti. Installare le estensioni ora, se non è già stato fatto.
Nella sezione Visual Studio Code Explorer, nella sezione Azure IoT Hub espandere Devices per visualizzare l'elenco dei dispositivi IoT.
Fare clic con il pulsante destro del mouse sul nome del dispositivo IoT Edge e quindi scegliere Crea distribuzione per singolo dispositivo.
Passare alla cartella della soluzione con CSharpFunction. Aprire la cartella config, selezionare il file deployment.amd64.json e quindi scegliere Seleziona manifesto distribuzione Edge.
Nel dispositivo espandere Moduli per visualizzare un elenco di moduli distribuiti ed in esecuzione. Selezionare il pulsante Aggiorna. È possibile visualizzare il nuovo CSharpFunction in esecuzione insieme al modulo SimulatedTemperatureSensor , $edgeAgent e $edgeHub.
La visualizzazione dei nuovi moduli può richiedere alcuni istanti. Il dispositivo IoT Edge recupera le nuove informazioni di distribuzione da IoT Hub, avvia i nuovi contenitori e quindi segnala lo stato a IoT Hub.
Visualizzare i dati generati
Visualizzare tutti i messaggi che arrivano all'hub IoT dai dispositivi eseguendo Azure IoT Hub: Start Monitoring Built-in Event Endpoint nel riquadro comandi. Per interrompere il monitoraggio dei messaggi, eseguire Azure IoT Hub: Arresta monitoraggio endpoint eventi predefinito nella palette comandi.
Per filtrare la visualizzazione e visualizzare i messaggi da un dispositivo specifico, fare clic con il pulsante destro del mouse sul dispositivo nella sezione Azure IoT Hub > Dispositivi della finestra di esplorazione Visual Studio Code e selezionare Avvia monitoraggio endpoint eventi predefinito.
Pulire le risorse
Se si prevede di continuare con l'articolo consigliato successivo, mantenere le risorse e le configurazioni create e riutilizzarle. È anche possibile continuare a usare lo stesso dispositivo IoT Edge di un dispositivo di test.
In caso contrario, eliminare la configurazione locale e le risorse Azure create in questo articolo per evitare addebiti.
Eliminare Azure risorse
Non è possibile annullare l'eliminazione di Azure risorse e gruppi di risorse. Assicurarsi di non eliminare accidentalmente il gruppo di risorse sbagliato o le risorse errate. Se è stato creato il IoT Hub all'interno di un gruppo di risorse esistente con risorse da conservare, eliminare solo la risorsa IoT Hub stessa, non il gruppo di risorse.
Per eliminare le risorse:
- Accedere al portale di Azure e quindi selezionare Gruppi di risorse.
- Selezionare il nome del gruppo di risorse che contiene le risorse di test IoT Edge.
- Esaminare l'elenco delle risorse contenute nel gruppo di risorse. Per eliminarli tutti, è possibile selezionare Elimina gruppo di risorse. Se si vogliono eliminare solo alcuni di essi, selezionare ogni risorsa per eliminarle singolarmente.
Passaggi successivi
In questa esercitazione è stato creato un modulo funzione Azure con codice per filtrare i dati non elaborati generati dal dispositivo IoT Edge.
Continuare con le esercitazioni successive per apprendere altri modi in cui Azure IoT Edge può aiutare a trasformare i dati in informazioni dettagliate aziendali all'perimetro.Continue to the next tutorials to learn other ways that Azure IoT Edge can help you turn data into business insights at the edge.