Esercitazione: Configurare un dispositivo Azure IoT Edge

Si applica a: Icona Sì IoT Edge 1.1

Importante

La data di fine del supporto di IoT Edge 1.1 è stata il 13 dicembre 2022. Controlla il ciclo di vita dei prodotti Microsoft per ottenere informazioni sul modo in cui viene supportato questo prodotto, servizio, tecnologia o API. Per altre informazioni sull'aggiornamento alla versione più recente di IoT Edge, vedere Aggiornare IoT Edge.

In questo articolo viene configurata una macchina virtuale di Azure che esegue Linux come dispositivo Azure IoT Edge che funge da gateway trasparente. La configurazione del gateway trasparente consente ai dispositivi di connettersi all'hub IoT di Azure tramite il gateway senza riconoscerne l'esistenza. Allo stesso tempo, un utente può interagire con i dispositivi nell'hub IoT senza essere a conoscenza del dispositivo gateway intermedio. In definitiva, si aggiungeranno analisi perimetrali al sistema aggiungendo moduli IoT Edge al gateway trasparente.

Nota

I concetti di questa esercitazione si applicano a tutte le versioni di IoT Edge, ma il dispositivo di esempio creato per provare lo scenario esegue IoT Edge versione 1.1.

I passaggi di questo articolo vengono in genere eseguiti da sviluppatori cloud.

In questa sezione dell'esercitazione si apprende come:

  • Creare certificati per consentire al dispositivo gateway di connettersi in modo sicuro ai dispositivi downstream.
  • Creare un dispositivo IoT Edge.
  • Creare una macchina virtuale Windows che simuli il dispositivo IoT Edge.

Prerequisiti

Questo articolo fa parte di una serie di documenti relativi a un'esercitazione sull'uso di Azure Machine Learning in IoT Edge. Ogni articolo della serie si basa sulle attività di quello precedente. Se si è arrivati direttamente a questo articolo, vedere il primo articolo della serie.

Creare i certificati

Affinché un dispositivo funzioni come gateway, deve connettersi in modo sicuro ai dispositivi downstream. Con IoT Edge è possibile usare un'infrastruttura a chiave pubblica (PKI) per configurare connessioni sicure tra i dispositivi. Nel caso illustrato si consente la connessione di un dispositivo IoT downstream a un dispositivo IoT Edge che funge da gateway trasparente. Per mantenere un livello di sicurezza ragionevole, il dispositivo downstream deve confermare l'identità del dispositivo IoT Edge. Per altre informazioni su come vengono usati i certificati dai dispositivi IoT Edge, vedere Dettagli di utilizzo dei certificati di Azure IoT Edge.

In questa sezione vengono creati i certificati autofirmato usando un'immagine Docker che viene quindi compilata ed eseguita. È stato scelto di usare un'immagine Docker per completare questo passaggio perché riduce il numero di passaggi necessari per creare i certificati nel computer di sviluppo Windows. Per comprendere cosa è stato automatizzato con l'immagine Docker, vedere Creare certificati demo per testare le funzionalità dei dispositivi IoT Edge.

  1. Accedere alla macchina virtuale di sviluppo.

  2. Creare una nuova cartella con il percorso e il nome c:\edgeCertificates.

  3. Se non è già in esecuzione, avviare Docker per Windows da Windows menu Start.

  4. Aprire Visual Studio Code.

  5. Selezionare File>Apri cartella e quindi C:\source\IoTEdgeAndMlSample\CreateCertificates.

  6. Nel riquadro Explorer fare clic con il pulsante destro del mouse su dockerfile e scegliere Compila immagine.

  7. Nella finestra di dialogo accettare il valore predefinito per il nome e il tag dell'immagine: createcertificates: latest.

    Screenshot che mostra la creazione di certificati in Visual Studio Code.

  8. Attendere il completamento del processo di compilazione.

    Nota

    Potrebbe essere visualizzato un avviso relativo a una chiave pubblica mancante. È sicuro ignorare questo avviso. Analogamente, verrà visualizzato un avviso di sicurezza che consiglia di controllare o reimpostare le autorizzazioni per l'immagine, che è sicuro da ignorare per questa immagine.

  9. Nella finestra del terminale di Visual Studio Code e seguire il contenitore createcertificates.

    docker run --name createcertificates --rm -v c:\edgeCertificates:/edgeCertificates createcertificates /edgeCertificates
    
  10. Docker richiederà l'accesso all'unità c:\ . Selezionare Share it (Condividila).

  11. Specifica le credenziali quando richiesto.

  12. Al termine dell'esecuzione del contenitore, cercare i file seguenti in c:\edgeCertificates:

    • c:\edgeCertificates\certs\azure-iot-test-only.root.ca.cert.pem
    • c:\edgeCertificates\certs\new-edge-device-full-chain.cert.pem
    • c:\edgeCertificates\certs\new-edge-device.cert.pem
    • c:\edgeCertificates\certs\new-edge-device.cert.pfx
    • c:\edgeCertificates\private\new-edge-device.key.pem

Caricare i certificati in Azure Key Vault

Per archiviare i certificati in modo sicuro e renderli accessibili da più dispositivi, i certificati verranno caricati in Azure Key Vault. Come si può vedere dall'elenco precedente, sono disponibili due tipi di file di certificato: PFX e PEM. Il file PFX verrà trattato come certificati di Key Vault da caricare in Key Vault. I file PEM sono testo normale e li considereremo come segreti di Key Vault. Si userà l'istanza di Key Vault associata all'area di lavoro di Azure Machine Learning creata eseguendo i notebook di Jupyter.

  1. Dal portale di Azure passare all'area di lavoro di Azure Machine Learning.

  2. Nella pagina di panoramica dell'area di lavoro di Machine Learning trovare il nome per Key Vault.

    Screenshot che mostra la copia del nome dell'insieme di credenziali delle chiavi.

  3. Nel computer di sviluppo caricare i certificati in Key Vault. Sostituire <subscriptionId> e <keyvaultname> con le informazioni delle risorse.

    c:\source\IoTEdgeAndMlSample\CreateCertificates\upload-keyvaultcerts.ps1 -SubscriptionId <subscriptionId> -KeyVaultName <keyvaultname>
    
  4. Se richiesto, accedere ad Azure.

  5. Lo script verrà eseguito per alcuni minuti con output che elenca le nuove voci di Key Vault.

    Screenshot che mostra l'output dello script di Key Vault.

Registrare un dispositivo IoT Edge

Per connettere un dispositivo Azure IoT Edge a un hub IoT, registrare prima un dispositivo nell'hub. La stringa di connessione dell'identità del dispositivo nel cloud verrà usata per configurare il runtime nel dispositivo IoT Edge. Dopo che un dispositivo configurato si connette all'hub, è possibile distribuire moduli e inviare messaggi. È anche possibile modificare la configurazione del dispositivo IoT Edge fisico modificando l'identità del dispositivo corrispondente in hub IoT.

Per questa esercitazione si registra la nuova identità del dispositivo usando Visual Studio Code. È anche possibile completare questi passaggi usando il portale di Azure o l'interfaccia della riga di comando di Azure. Indipendentemente dal metodo scelto, assicurarsi di ottenere il dispositivo stringa di connessione del dispositivo IoT Edge. Il dispositivo stringa di connessione è disponibile nella pagina dei dettagli del dispositivo nel portale di Azure.

  1. Nel computer di sviluppo aprire Visual Studio Code.

  2. Espandere il frame hub IoT di Azure dalla visualizzazione Esplora codice di Visual Studio.

  3. Selezionare i puntini di sospensione e selezionare Crea dispositivo IoT Edge.

  4. Assegnare un nome al dispositivo. Per praticità, usiamo il nome aaTurbofanEdgeDevice in modo che venga ordinato all'inizio dei dispositivi elencati.For convenience, we use the name aaTurbofanEdgeDevice so that it sorts to the top of listed devices.

  5. Il nuovo dispositivo viene visualizzato nell'elenco dei dispositivi.

    Screenshot che mostra una visualizzazione del dispositivo in Visual Studio Code Explorer.

Distribuire una macchina virtuale di Azure

Si usa una macchina virtuale Ubuntu 18.04 LTS con il runtime di Azure IoT Edge installato e configurato. La distribuzione usa un modello di Azure Resource Manager gestito nel repository di progetti iotedge-vm-deploy . Effettua il provisioning del dispositivo IoT Edge registrato nel passaggio precedente usando il stringa di connessione fornito nel modello.

È possibile distribuire la macchina virtuale usando il portale di Azure o l'interfaccia della riga di comando di Azure. Verranno illustrati i passaggi portale di Azure. Per altre informazioni, vedere Eseguire Azure IoT Edge in Ubuntu Macchine virtuali.

Eseguire la distribuzione con il pulsante Distribuisci in Azure

  1. Per usare il iotedge-vm-deploy modello arm per distribuire la macchina virtuale Ubuntu 18.04 LTS, fare clic sul pulsante seguente:

    Pulsante Distribuisci in Azure per iotedge-vm-deploy

  2. Nella finestra appena avviata compilare i campi modulo disponibili.

    Campo Descrizione
    Abbonamento Sottoscrizione di Azure attiva in cui distribuire la macchina virtuale.
    Gruppo di risorse Gruppo di risorse esistente o appena creato per contenere la macchina virtuale e le risorse associate.
    Prefisso etichetta DNS Valore obbligatorio della scelta usata per anteporre il nome host della macchina virtuale.
    Nome utente amministratore Nome utente, che verrà fornito privilegi radice per la distribuzione.
    Stringa di connessione del dispositivo Un dispositivo stringa di connessione per un dispositivo creato all'interno del hub IoT previsto.
    Dimensioni macchina virtuale Dimensioni della macchina virtuale da distribuire
    Versione del sistema operativo Ubuntu Versione del sistema operativo Ubuntu da installare nella macchina virtuale di base.
    Location L'area geografica in cui distribuire la macchina virtuale, questo valore viene impostato per impostazione predefinita sulla posizione del gruppo di risorse selezionato.
    Tipo di autenticazione Scegliere sshPublicKey o password a seconda delle preferenze.
    Admin Password or Key (Chiave o password amministratore) Valore della chiave pubblica SSH o del valore della password a seconda della scelta del tipo di autenticazione.
  3. Dopo aver compilato tutti i campi, selezionare la casella di controllo nella parte inferiore della pagina per accettare i termini e selezionare Rivedi e crea e Crea per avviare la distribuzione.

  4. Passare alla macchina virtuale nel portale di Azure. È possibile trovarla tramite il gruppo di risorse o selezionando Macchine virtuali in Servizi di Azure nella pagina di destinazione del portale.

  5. Prendere nota del nome DNS della macchina virtuale. Sarà necessario per accedere alla macchina virtuale.

Stabilire la connessione al dispositivo IoT Edge

  1. Aprire un prompt dei comandi e usare il comando seguente per accedere alla macchina virtuale. Immettere le proprie informazioni per nome utente e nome DNS in base alla sezione precedente.

    ssh <adminUsername>@<DNS_name>
    
  2. Quando viene richiesto di convalidare l'autenticità dell'host, immettere e selezionare INVIO.

  3. Quando richiesto, specificare la password.

  4. Ubuntu visualizza un messaggio di benvenuto e verrà visualizzato un prompt simile <username>@<machinename>:~$a .

Scaricare i certificati di Key Vault

In precedenza in questo articolo sono stati caricati i certificati in Key Vault per renderli disponibili per il dispositivo IoT Edge e il dispositivo downstream. Il dispositivo downstream usa il dispositivo IoT Edge come gateway per comunicare con hub IoT.

Il dispositivo downstream verrà affrontato più avanti nell'esercitazione. In questa sezione scaricare i certificati nel dispositivo IoT Edge.

  1. Nella sessione SSH della macchina virtuale Linux accedere ad Azure con l'interfaccia della riga di comando di Azure.

    az login
    
  2. Verrà richiesto di aprire un browser a una pagina di accesso al dispositivo Microsoft e fornire un codice univoco. Questi passaggi possono essere eseguiti nel computer locale. Dopo aver completato l'autenticazione, chiudere la finestra del browser.

  3. Quando l'autenticazione viene completata correttamente, la VM Linux accede e visualizza l'elenco delle sottoscrizioni di Azure.

  4. Impostare la sottoscrizione di Azure da usare per i comandi dell'interfaccia della riga di comando di Azure.

    az account set --subscription <subscriptionId>
    
  5. Nella VM creare una directory per i certificati.

    sudo mkdir /edgeMlCertificates
    
  6. Scaricare i certificati archiviati nell'insieme di credenziali delle chiavi: new-edge-device-full-chain.cert.pem, new-edge-device.key.pem e azure-iot-test-only.root.ca.cert.pem.

    key_vault_name="<key vault name>"
    sudo az keyvault secret download --vault-name $key_vault_name --name new-edge-device-full-chain-cert-pem -f /edgeMlCertificates/new-edge-device-full-chain.cert.pem
    sudo az keyvault secret download --vault-name $key_vault_name --name new-edge-device-key-pem -f /edgeMlCertificates/new-edge-device.key.pem
    sudo az keyvault secret download --vault-name $key_vault_name --name azure-iot-test-only-root-ca-cert-pem -f /edgeMlCertificates/azure-iot-test-only.root.ca.cert.pem
    

Aggiornare la configurazione del dispositivo IoT Edge

Il runtime IoT Edge usa il file /etc/iotedge/config.yaml per rendere persistente la configurazione. È necessario aggiornare due informazioni in questo file:

  • Certificati: certificati da usare per le connessioni effettuate con dispositivi downstream
  • Hostname: nome di dominio completo (FQDN) del dispositivo IoT Edge della macchina virtuale

Aggiornare i certificati e il nome host modificando direttamente il file config.yaml.

  1. Aprire il file config.yaml.

    sudo nano /etc/iotedge/config.yaml
    
  2. Aggiornare la sezione certificates del file config.yaml rimuovendo il percorso iniziale # e impostando il percorso in modo che il file sia simile all'esempio seguente:

    certificates:
      device_ca_cert: "/edgeMlCertificates/new-edge-device-full-chain.cert.pem"
      device_ca_pk: "/edgeMlCertificates/new-edge-device.key.pem"
      trusted_ca_certs: "/edgeMlCertificates/azure-iot-test-only.root.ca.cert.pem"
    

    Assicurarsi che la riga certificati: la riga non contenga spazi vuoti precedenti e che ogni certificato annidato sia rientrato da due spazi.

    Fare clic con il pulsante destro del mouse su nano per incollare il contenuto degli Appunti nella posizione corrente del cursore. Per sostituire la stringa, usare le frecce della tastiera per passare alla stringa da sostituire, eliminare la stringa e quindi fare clic con il pulsante destro del mouse per incollare dal buffer.

  3. Nella portale di Azure passare alla macchina virtuale. Copiare il nome DNS (FQDN del computer) dalla sezione Panoramica.

  4. Incollare il nome di dominio completo nella sezione nome host del file config.yml. Assicurarsi che il nome sia tutto in minuscolo.

    hostname: '<machinename>.<region>.cloudapp.azure.com'
    
  5. Salvare e chiudere il file selezionando CTRL+X, Y e INVIO.

  6. Riavviare il daemon IoT Edge.

    sudo systemctl restart iotedge
    
  7. Controllare lo stato del daemon IoT Edge. Dopo il comando, immettere :q per uscire.

    systemctl status iotedge
    

Risoluzione dei problemi

Se vengono visualizzati errori (testo colorato preceduto da "[ERROR]") nello stato, esaminare i log del daemon per informazioni dettagliate sull'errore.

journalctl -u iotedge --no-pager --no-full

Per altre informazioni sull'indirizzamento degli errori, vedere la pagina relativa alla risoluzione dei problemi .

Pulire le risorse

Questa esercitazione fa parte di un set in cui ogni articolo si basa sul lavoro svolto nei precedenti. Attendere di pulire tutte le risorse fino a quando non si completa l'esercitazione finale.

Passaggi successivi

È stata completata la configurazione di una macchina virtuale di Azure come gateway trasparente IoT Edge. È stato avviato generando certificati di test caricati in Key Vault. Successivamente, è stato usato uno script e un modello di Resource Manager per distribuire la macchina virtuale con l'immagine di runtime Ubuntu Server 16.04 LTS + Azure IoT Edge da Azure Marketplace. Con la macchina virtuale in esecuzione, è stata stabilita la connessione tramite SSH. È stato quindi eseguito l'accesso ad Azure e sono stati scaricati i certificati da Key Vault. Sono stati apportati diversi aggiornamenti alla configurazione del runtime di IoT Edge aggiornando il file config.yaml.

Continuare con l'articolo successivo per creare i moduli IoT Edge.