

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Creazione di demo con AWS IoT Device Client
<a name="iot-tutorials-dc-intro"></a>

I tutorial di questo percorso di apprendimento illustrano i passaggi necessari per sviluppare un software dimostrativo utilizzando Device Client. AWS IoT Il AWS IoT Device Client fornisce un software che funziona sul tuo dispositivo IoT per testare e dimostrare aspetti di una soluzione IoT basata su AWS IoT.

L'obiettivo di questi tutorial è facilitare l'esplorazione e la sperimentazione, in modo che possiate avere la certezza di AWS IoT supportare la vostra soluzione prima di sviluppare il software del dispositivo.

**Cosa imparerai in questi tutorial:**
+ Come preparare un Raspberry Pi da utilizzare come dispositivo IoT con AWS IoT
+ Come dimostrare AWS IoT le funzionalità utilizzando il AWS IoT Device Client sul dispositivo

In questo percorso di apprendimento, installerai il AWS IoT Device Client sul tuo Raspberry Pi e creerai le AWS IoT risorse nel cloud per dimostrare idee di soluzioni IoT. Mentre i tutorial di questo percorso di apprendimento mostrano le caratteristiche utilizzando un Raspberry Pi, spiegano gli obiettivi e le procedure per aiutarvi ad adattarli ad altri dispositivi.

## Prerequisiti per creare demo con Device Client AWS IoT
<a name="iot-dc-tutorial-overview"></a>

Questa sezione descrive di cosa hai bisogno prima di iniziare i tutorial in questo percorso di apprendimento.

**Per completare i tutorial in questo percorso di apprendimento, è necessario:**
+ 

**Un Account AWS**  
Puoi usare quello esistente Account AWS, se ne hai uno, ma potresti dover aggiungere ruoli o autorizzazioni aggiuntivi per utilizzare le AWS IoT funzionalità utilizzate da questi tutorial.

  Se devi crearne uno nuovo Account AWS, vedi. [Configurare Account AWS](setting-up.md)
+ 

**Un dispositivo Raspberry Pi o IoT compatibile**  
Le esercitazioni utilizzano un [Raspberry Pi](https://www.raspberrypi.org/) perché è disponibile in diversi fattori di forma, è onnipresente ed è un dispositivo dimostrativo relativamente economico. Le esercitazioni sono state testate sul [Un Raspberry Pi 3 Modello B\$1](https://www.raspberrypi.com/products/raspberry-pi-3-model-b-plus/), il [Raspberry Pi 4 Modello B](https://www.raspberrypi.com/products/raspberry-pi-4-model-b/) e su un'istanza Amazon EC2 che esegue Ubuntu Server 20.04 LTS (HVM). Per utilizzare AWS CLI ed eseguire i comandi, ti consigliamo di utilizzare la versione più recente del sistema operativo Raspberry Pi (sistema operativo [Raspberry Pi (64 bit)](https://www.raspberrypi.com/software/operating-systems/) o OS Lite). Le versioni precedenti del sistema operativo potrebbero funzionare, ma non le abbiamo testate.
**Nota**  
I tutorial spiegano gli obiettivi di ogni fase per aiutarti ad adattarli all'hardware IoT su cui non li abbiamo provati; tuttavia, non descrivono specificamente come adattarli ad altri dispositivi.
+ 

**Dimestichezza con il sistema operativo del dispositivo IoT**  
I passaggi di questi tutorial presuppongono che tu abbia familiarità con l'uso di comandi e operazioni Linux di base dall'interfaccia della riga di comando supportata da un Raspberry Pi. Se non hai familiarità con queste operazioni, concediti più tempo per completare i tutorial.

  Per completare questi tutorial, dovresti già saper:
  + Eseguire in modo sicuro le operazioni di base del dispositivo come assemblaggio e collegamento di componenti, collegamento del dispositivo alle fonti di alimentazione richieste e installazione e rimozione di schede di memoria.
  + Caricare e scaricare software e file di sistema sul dispositivo. Se il dispositivo non utilizza un dispositivo di archiviazione rimovibile, ad esempio una scheda microSD, dovrai sapere come connetterti al dispositivo e caricare e scaricare software e file di sistema sul dispositivo.
  + Connettere il tuo dispositivo alle reti su cui intendi utilizzarlo.
  + Connetterti al dispositivo da un altro computer utilizzando un terminale SSH o un programma simile.
  + Utilizzare un'interfaccia a riga di comando per creare, copiare, spostare, rinominare e impostare le autorizzazioni di file e directory sul dispositivo.
  + Installare nuovi programmi sul dispositivo.
  + Trasferire file da e verso il tuo dispositivo utilizzando strumenti come FTP o SCP.
+ 

**Ambiente di sviluppo e test per la tua soluzione IoT**  
I tutorial descrivono il software e l'hardware richiesti; tuttavia, i tutorial presuppongono che sarai in grado di eseguire operazioni che potrebbero non essere descritte esplicitamente. Esempi di questo tipo di hardware e operazioni includono:
  + 

**Un computer host locale su cui scaricare e archiviare file**  
Per il Raspberry Pi, di solito si tratta di un personal computer o laptop in grado di leggere e scrivere su schede di memoria microSD. Il computer host locale deve:
    + Essere connesso a Internet.
    + Avere la [AWS CLI](https://aws.amazon.com//cli/) installata e configurata.
    + Disponi di un browser web che supporti la AWS console.
  + 

**Un modo per connettere il computer host locale al dispositivo per comunicare con esso, immettere comandi e trasferire file**  
Sul Raspberry Pi, spesso questo viene fatto utilizzando SSH e SCP dal computer host locale.
  + 

**Connettersi al dispositivo IoT utilizzando un monitor e una tastiera**  
Possono essere utili, ma non sono necessari per completare i tutorial.
  + 

**Un modo in cui il computer host locale e i dispositivi IoT possono connettersi a Internet**  
Potrebbe trattarsi di una connessione di rete cablata o wireless a un router o gateway connesso a Internet. L'host locale deve anche essere in grado di connettersi al Raspberry Pi. Ciò potrebbe richiedere che si trovino sulla stessa rete locale. I tutorial non possono mostrarti come applicare queste impostazioni per la configurazione del tuo dispositivo o dispositivo specifico, ma mostrano come testare questa connettività.
  + 

**Accesso al router della rete locale per visualizzare i dispositivi collegati**  
Per completare i tutorial in questo percorso di apprendimento, dovrai essere in grado di trovare l'indirizzo IP del tuo dispositivo IoT.

    Su una rete locale, questo può essere fatto accedendo all'interfaccia dell'amministratore del router di rete a cui i dispositivi si connettono. Se è possibile assegnare un indirizzo IP fisso per il dispositivo nel router, è possibile semplificare la riconnessione dopo ogni riavvio del dispositivo.

    Se hai una tastiera e un monitor collegati al dispositivo, **ifconfig** può visualizzare l'indirizzo IP del dispositivo.

    Se non puoi applicare nessuna di queste opzioni, dovrai trovare un modo per identificare l'indirizzo IP del dispositivo dopo ogni riavvio. 

Dopo aver ottenuto tutto il materiale, prosegui con [Tutorial: Preparazione dei dispositivi per il AWS IoT Device Client](iot-dc-prepare-device.md). 

**Topics**
+ [Prerequisiti per creare demo con Device Client AWS IoT](#iot-dc-tutorial-overview)
+ [Tutorial: Preparazione dei dispositivi per il AWS IoT Device Client](iot-dc-prepare-device.md)
+ [Tutorial: installazione e configurazione del AWS IoT Device Client](iot-dc-install-dc.md)
+ [Tutorial: Dimostrare la comunicazione dei messaggi MQTT con il AWS IoT Device Client](iot-dc-testconn.md)
+ [Tutorial: Dimostra le azioni (lavori) remote con il AWS IoT Device Client](iot-dc-runjobs.md)
+ [Tutorial: pulizia dopo l'esecuzione dei tutorial AWS IoT Device Client](iot-dc-cleanup.md)

# Tutorial: Preparazione dei dispositivi per il AWS IoT Device Client
<a name="iot-dc-prepare-device"></a>

Questo tutorial ti guida attraverso l'inizializzazione del tuo Raspberry Pi per prepararlo per i tutorial successivi di questo percorso di apprendimento.

L'obiettivo di questo tutorial è installare la versione corrente del sistema operativo del dispositivo e assicurarsi di poter comunicare con il dispositivo nel contesto dell'ambiente di sviluppo.

**Prerequisiti**  
Prima di iniziare questo tutorial, assicurati di avere gli elementi elencati in [Prerequisiti per creare demo con Device Client AWS IoT](iot-tutorials-dc-intro.md#iot-dc-tutorial-overview) disponibili e pronti per l'uso.

Il tutorial dura circa 90 minuti.

**In questo tutorial, apprenderai a:**
+ Installa e aggiorna il sistema operativo del tuo dispositivo.
+ Installa e verifica qualsiasi software aggiuntivo necessario per eseguire i tutorial.
+ Verifica la connettività del tuo dispositivo e installa i certificati richiesti.

Dopo aver completato questo tutorial, il tutorial successivo prepara il dispositivo per le demo che utilizzano AWS IoT Device Client.

**Topics**
+ [Installa e aggiorna il sistema operativo del dispositivo](iot-dc-prepare-device-sys.md)
+ [Installa e verifica il software richiesto sul tuo dispositivo](iot-dc-prepare-device-sw.md)
+ [Testa il tuo dispositivo e salva il certificato Amazon CA](iot-dc-prepare-device-test.md)

# Installa e aggiorna il sistema operativo del dispositivo
<a name="iot-dc-prepare-device-sys"></a>

Le procedure contenute in questa sezione descrivono come inizializzare la scheda microSD utilizzata da Raspberry Pi per l'unità di sistema. La scheda microSD di Raspberry Pi contiene il software del sistema operativo (OS) e lo spazio per l'archiviazione dei file applicativi. Se non utilizzi un Raspberry Pi, segui le istruzioni del dispositivo per installare e aggiornare il software del sistema operativo del dispositivo.

Dopo aver completato questa sezione, dovresti essere in grado di avviare il dispositivo IoT e connetterti al programma terminale sul computer host locale.

**Equipaggiamento necessario:**
+ Ambiente locale di sviluppo e test
+ Un Raspberry Pi o dispositivo IoT, in grado di connettersi a Internet
+ Una scheda di memoria microSD con una capacità di almeno 8 GB o spazio di archiviazione sufficiente per il sistema operativo e il software richiesto.
**Nota**  
Quando si seleziona una scheda microSD per questi esercizi, scegline una che sia abbastanza capiente ma più piccola possibile.  
Con una scheda SD piccola sarà più veloce eseguire il backup e l'aggiornamento. Sul Raspberry Pi, non avrai bisogno di più di una scheda microSD da 8 GB per questi tutorial. Se hai bisogno di più spazio per l'applicazione specifica, i file immagine più piccoli salvati in questi tutorial possono ridimensionare il file system su una scheda più grande per utilizzare tutto lo spazio supportato della scheda scelta.

**Equipaggiamento facoltativo:**
+ Una tastiera USB collegata al Raspberry Pi
+ Monitor HDMI e cavo per connettere il monitor al Raspberry Pi

**Topics**
+ [Caricare il sistema operativo del dispositivo sulla scheda microSD](#iot-dc-prepare-device-sys-step1)
+ [Avvia il tuo dispositivo IoT con il nuovo sistema operativo](#iot-dc-prepare-device-sys-step2)
+ [Collega il dispositivo al computer host locale](#iot-dc-prepare-device-sys-step3)

## Caricare il sistema operativo del dispositivo sulla scheda microSD
<a name="iot-dc-prepare-device-sys-step1"></a>

Questa procedura utilizza il computer host locale per caricare il sistema operativo del dispositivo su una scheda microSD.

**Nota**  
Se il dispositivo non utilizza un supporto di memorizzazione rimovibile per il sistema operativo, installa il sistema operativo utilizzando la procedura per quel dispositivo e prosegui con [Avvia il tuo dispositivo IoT con il nuovo sistema operativo](#iot-dc-prepare-device-sys-step2).

**Per installare il sistema operativo sul tuo Raspberry Pi**

1. Sul computer host locale, scarica e decomprimi l'immagine del sistema operativo Raspberry Pi che si desidera utilizzare. Le versioni più recenti sono disponibili su [ https://www.raspberrypi.com/software/operating-systems/](https://www.raspberrypi.com/software/operating-systems/) 

**Scegliere una versione di Raspberry Pi OS**  
Questo tutorial utilizza la versione **Raspberry Pi OS Lite** perché è la versione più piccola che supporta questi tutorial in questo percorso di apprendimento. Questa versione del sistema operativo Raspberry Pi ha solo un'interfaccia a riga di comando e non dispone di un'interfaccia utente grafica. Una versione dell'ultimo sistema operativo Raspberry Pi con un'interfaccia utente grafica funzionerà anche con questi tutorial; tuttavia, le procedure descritte in questo percorso di apprendimento utilizzano solo l'interfaccia della riga di comando per eseguire operazioni su Raspberry Pi.

1. Inserisci la microSD nel computer host locale.

1. Utilizzando uno strumento di imaging per schede SD, scrivi il file immagine del sistema operativo decompresso sulla scheda microSD.

1. Dopo aver scritto l'immagine del sistema operativo Raspberry Pi sulla microSD:

   1. Apri la partizione BOOT sulla microSD in una finestra della riga di comando o in una finestra Esplora file. 

   1. Nella partizione BOOT della microSD, nella directory principale, creare un file vuoto denominato `ssh` senza estensione di file e senza contenuto. Questo ordina al Raspberry Pi di abilitare le comunicazioni SSH al primo avvio.

1. Estrarre la scheda microSD e rimuoverla in modo sicuro dal computer host locale.

La tua scheda microSD è pronta a [Avvia il tuo dispositivo IoT con il nuovo sistema operativo](#iot-dc-prepare-device-sys-step2).

## Avvia il tuo dispositivo IoT con il nuovo sistema operativo
<a name="iot-dc-prepare-device-sys-step2"></a>

Questa procedura installa la scheda microSD ed esegue il primo avvio del Raspberry Pi utilizzando il sistema operativo scaricato.

**Per avviare il dispositivo IoT con il nuovo sistema operativo**

1. Con l'alimentazione scollegata dal dispositivo, inserire la scheda microSD dal passaggio precedente, [Caricare il sistema operativo del dispositivo sulla scheda microSD](#iot-dc-prepare-device-sys-step1), nel Raspberry Pi.

1. Connetti il dispositivo alla rete cablata.

1. Questi tutorial interagiranno con il tuo Raspberry Pi dal tuo computer host locale utilizzando un terminale SSH.

   Se si desidera interagire direttamente con il dispositivo, è possibile:

   1. Connettere un monitor HDMI per guardare i messaggi della console di Raspberry Pi prima di poter connettere la finestra terminale del computer host locale al tuo Raspberry Pi.

   1. Connettere una tastiera USB ad essa se si desidera interagire direttamente con il Raspberry Pi.

1. Connettere il Raspberry Pi all'alimentazione e attendere circa un minuto prima che si inizializzi.

   Se hai un monitor connesso al tuo Raspberry Pi, puoi guardare il processo di avvio da qui.

1. 

   Scopri l'indirizzo IP del tuo dispositivo:
   + Se è stato connesso un monitor HDMI a Raspberry Pi, l'indirizzo IP viene visualizzato nei messaggi visualizzati sul monitor 
   + Se si ha accesso al router a cui si connette Raspberry Pi, è possibile visualizzarne l'indirizzo nell'interfaccia amministratore del router.

Una volta ottenuto l'indirizzo IP di Raspberry Pi, sei pronto per [Collega il dispositivo al computer host locale](#iot-dc-prepare-device-sys-step3).

## Collega il dispositivo al computer host locale
<a name="iot-dc-prepare-device-sys-step3"></a>

Questa procedura utilizza il programma terminale sul computer host locale per connettersi al Raspberry Pi e modificarne la password predefinita.

**Per connettere il computer host locale al dispositivo**

1. 

   Sul computer host locale, apri il programma del terminale SSH:
   + Windows: `PuTTY`
   + Sistema operativo Linux/mac: `Terminal`
**Nota**  
PuTTY non è installato automaticamente su Windows. Se non è presente nel computer, potrebbe essere necessario scaricarlo e installarlo.

1. Connetti il programma terminale all'indirizzo IP di Raspberry Pi e accedi utilizzando le credenziali di default.

   ```
   username: pi
   password: raspberry
   ```

1. Dopo aver effettuato l'accesso al tuo Raspberry Pi, cambia la password per l'utente `pi`.

   ```
   passwd
   ```

   Segui le istruzioni per modificare la password.

   ```
   Changing password for pi.
   Current password: raspberry
   New password: YourNewPassword
   Retype new password: YourNewPassword
   passwd: password updated successfully
   ```

Dopo aver visualizzato il prompt della riga di comando di Raspberry Pi nella finestra terminale e aver modificato la password, sei pronto a proseguire con [Installa e verifica il software richiesto sul tuo dispositivo](iot-dc-prepare-device-sw.md).

# Installa e verifica il software richiesto sul tuo dispositivo
<a name="iot-dc-prepare-device-sw"></a>

Le procedure in questa sezione continuano dalla [sezione precedente](iot-dc-prepare-device-sys.md) per aggiornare il sistema operativo del Raspberry Pi e installare sul Raspberry Pi il software che verrà utilizzato nella sezione successiva per creare e installare il AWS IoT Device Client.

Dopo aver completato questa sezione, il tuo Raspberry Pi avrà un sistema up-to-date operativo, il software richiesto dai tutorial di questo percorso di apprendimento, e sarà configurato in base alla tua posizione.

**Equipaggiamento necessario:**
+ Il tuo ambiente locale di sviluppo e di test dalla [sezione precedente](iot-dc-prepare-device-sys.md)
+ Il Raspberry Pi che hai utilizzato nella [sezione precedente](iot-dc-prepare-device-sys.md)
+ La scheda di memoria microSD della [sezione precedente](iot-dc-prepare-device-sys.md)

**Nota**  
Raspberry Pi Model 3\$1 e Raspberry Pi Model 4 possono eseguire tutti i comandi descritti in questo percorso di apprendimento. Se il dispositivo IoT non è in grado di compilare o eseguire il software AWS Command Line Interface, potrebbe essere necessario installare i compilatori richiesti sul computer host locale per creare il software e quindi trasferirlo sul dispositivo IoT. Per ulteriori informazioni su come installare e costruire il software per il dispositivo, consulta la documentazione relativa al software del dispositivo.

**Topics**
+ [Aggiorna il software del sistema operativo](#iot-dc-prepare-device-sw-step1)
+ [Installare le applicazioni e le librerie richieste](#iot-dc-prepare-device-sw-step2)
+ [(Facoltativo) Salvare l'immagine della scheda microSD](#iot-dc-prepare-device-sw-step3)

## Aggiorna il software del sistema operativo
<a name="iot-dc-prepare-device-sw-step1"></a>

Questa procedura aggiorna il software del sistema operativo.

**Per aggiornare il software del sistema operativo su Raspberry Pi**

Eseguire questi passaggi nella finestra terminale del computer host locale.

1. Inserisci questi comandi per aggiornare il software di sistema sul Raspberry Pi.

   ```
   sudo apt-get -y update
   sudo apt-get -y upgrade
   sudo apt-get -y autoremove
   ```

1. Aggiornare le impostazioni locali e del fuso orario di Raspberry Pi (facoltativo).

   Inserisci questo comando per aggiornare le impostazioni locali e il fuso orario del dispositivo.

   ```
   sudo raspi-config
   ```

   1. Per impostare le impostazioni locali del dispositivo:

      1. Nella schermata dello **Raspberry Pi Software Configuration Tool (raspi-config) (Strumento di configurazione del software Raspberry Pi (raspi-config))**, seleziona l'opzione **5**.

         **`5 Localisation Options Configure language and regional settings`**

         Utilizzare il tasto Tab per passare a **<Seleziona>,** quindi fai clic su space bar.

      1. Nel menu delle opzioni di localizzazione, seleziona l'opzione **L1**.

         **`L1 Locale Configure language and regional settings`**

         Utilizzare il tasto Tab per passare a **<Seleziona>,** quindi fai clic su space bar.

      1. Nell'elenco delle opzioni locali, seleziona le impostazioni locali che desideri installare sul Raspberry Pi utilizzando i tasti freccia per scorrere e space bar per contrassegnare le opzioni desiderate. 

         Negli Stati Uniti, **`en_US.UTF-8`** è una scelta suggerita.

      1. Dopo aver selezionato le impostazioni locali per il tuo dispositivo, usa il tasto Tab per selezionare **<OK>**, quindi fai clic su space bar per visualizzare la pagina di conferma di **Configuring locales (Configurazione di impostazioni locali)**.

   1. Per impostare il fuso orario del dispositivo:

      1. Nella schermata **raspi-config**, seleziona l'opzione **5**.

         **`5 Localisation Options Configure language and regional settings`**

         Utilizzare il tasto Tab per passare a **<Seleziona>,** quindi fai clic su space bar.

      1. Nel menu delle opzioni di localizzazione, utilizzare il tasto freccia per seleziona l'opzione **L2**:

         **`L2 time zone Configure time zone`**

         Utilizzare il tasto Tab per passare a **<Seleziona>,** quindi fai clic su space bar.

      1. Nel menu di **Configuring tzdata (Configurazione di tzdata)**, seleziona la tua area geografica dall'elenco. 

         Utilizza la chiave Tab per passare a **<OK>**, quindi fai clic su space bar.

      1. Nell'elenco delle città, usa i tasti freccia per seleziona una città nel tuo fuso orario.

         Per impostare il fuso orario, utilizza il tasto Tab per passare a **<OK>**, quindi fai clic su space bar.

   1. Quando hai finito di aggiornare le impostazioni, utilizza il tasto Tab per passare a **<Termina>**, quindi premere space bar per chiudere l'app **raspi-config**.

1. Inserisci questo comando per riavviare il Raspberry Pi.

   ```
   sudo shutdown -r 0
   ```

1. Attendi il riavvio del Raspberry Pi.

1. Dopo il riavvio di Raspberry Pi, riconnetti la finestra terminale sul computer host locale al Raspberry Pi.

Ora il software di sistema Raspberry Pi è configurato e sei pronto a proseguire con [Installare le applicazioni e le librerie richieste](#iot-dc-prepare-device-sw-step2).

## Installare le applicazioni e le librerie richieste
<a name="iot-dc-prepare-device-sw-step2"></a>

Questa procedura installa il software e le librerie dell'applicazione utilizzati dai tutorial successivi.

Se si utilizza un Raspberry Pi o se è possibile compilare il software richiesto sul dispositivo IoT, eseguire questi passaggi nella finestra terminale del computer host locale. Se è necessario compilare software per il dispositivo IoT sul computer host locale, consultare la documentazione software del dispositivo IoT per informazioni su come eseguire questi passaggi sul dispositivo.

**Per installare il software e le librerie dell'applicazione sul Raspberry Pi**

1. Inserisci questo comando per installare il software e le librerie dell'applicazione.

   ```
   sudo apt-get -y install build-essential libssl-dev cmake unzip git python3-pip
   ```

1. Inserisci questi comandi per confermare che è stata installata la versione corretta del software.

   ```
   gcc --version
   cmake --version
   openssl version
   git --version
   ```

1. 

   Verificare che siano installate queste versioni del software applicativo:
   + `gcc`: 9.3.0 o versioni successive
   + `cmake`: 3.10.x o versioni successive
   + `OpenSSL`: 1.1.1 o versioni successive
   + `git`: 2.20.1 o versioni successive

Se il tuo Raspberry Pi ha versioni accettabili del software dell'applicazione richiesto, sei pronto a proseguire con [(Facoltativo) Salvare l'immagine della scheda microSD](#iot-dc-prepare-device-sw-step3).

## (Facoltativo) Salvare l'immagine della scheda microSD
<a name="iot-dc-prepare-device-sw-step3"></a>

Durante i tutorial di questo percorso di apprendimento, verranno eseguite queste procedure per salvare una copia dell'immagine della scheda microSD di Raspberry Pi in un file sul computer host locale. Sebbene siano attività suggerite, non sono obbligatorie. Salvando l'immagine della scheda microSD nel percorso suggerito, è possibile saltare le procedure che precedono il punto di salvataggio in questo percorso di apprendimento; ciò consente di risparmiare tempo nel caso in cui fosse necessario ripetere uno dei passaggi. Se l'immagine della scheda microSD non viene salvata periodicamente, potrebbe essere necessario ricominciare dall'inizio i tutorial nel percorso di apprendimento se la scheda microSD è danneggiata o se si configura accidentalmente un'app o le relative impostazioni in modo errato.

A questo punto, la scheda microSD di Raspberry Pi ha un sistema operativo aggiornato e il software dell'applicazione di base caricato. Puoi riguadagnare il tempo che hai impiegato per completare i passaggi precedenti salvando ora il contenuto della scheda microSD in un file. Avere l'immagine corrente dell'immagine della scheda microSD del dispositivo consente di iniziare da questo punto per continuare o riprovare un tutorial o una procedura senza la necessità di installare e aggiornare il software da zero.

**Per salvare l'immagine della scheda microSD in un file**

1. Inserisci questo comando per chiudere il Raspberry Pi.

   ```
   sudo shutdown -h 0
   ```

1. Dopo che il Raspberry Pi si è spento completamente, scollega l'alimentatore.

1. Rimuovi la scheda microSD dal Raspberry Pi.

1. Sul computer host locale: 

   1. Inserisci la scheda microSD.

   1. Utilizzando lo strumento di creazione di immagini della scheda SD, salva l'immagine della scheda microSD in un file.

   1. Dopo aver salvato l'immagine della scheda microSD, espelli la scheda dal computer host locale.

1. Con l'alimentazione scollegata dal Raspberry Pi, inserisci la scheda microSD nel Raspberry Pi.

1. Collega Raspberry Pi all'alimentazione.

1. Dopo aver atteso circa un minuto, sul computer host locale, riconnettere la finestra terminale sul computer host locale connesso al Raspberry Pi, quindi accedi a Raspberry Pi.

# Testa il tuo dispositivo e salva il certificato Amazon CA
<a name="iot-dc-prepare-device-test"></a>

Le procedure descritte in questa sezione riprendono [quelle della sezione precedente](iot-dc-prepare-device-sw.md) per l'installazione AWS Command Line Interface e il certificato dell'Autorità di certificazione utilizzato per l'autenticazione delle connessioni. AWS IoT Core

Dopo aver completato questa sezione, saprai che il tuo Raspberry Pi dispone del software di sistema necessario per installare il AWS IoT Device Client e che dispone di una connessione Internet funzionante.

**Equipaggiamento necessario:**
+ Il tuo ambiente locale di sviluppo e di test dalla [sezione precedente](iot-dc-prepare-device-sw.md)
+ Il Raspberry Pi che hai utilizzato nella [sezione precedente](iot-dc-prepare-device-sw.md)
+ La scheda di memoria microSD della [sezione precedente](iot-dc-prepare-device-sw.md)

**Topics**
+ [Installa il AWS Command Line Interface](#iot-dc-prepare-device-test-step1)
+ [Configura le tue Account AWS credenziali](#iot-dc-prepare-device-test-step2)
+ [Esegui il download del certificato Amazon Root CA](#iot-dc-prepare-device-test-step3)
+ [(Facoltativo) Salvare l'immagine della scheda microSD](#iot-dc-prepare-device-test-step4)

## Installa il AWS Command Line Interface
<a name="iot-dc-prepare-device-test-step1"></a>

Questa procedura lo installa AWS CLI sul tuo Raspberry Pi.

Se si utilizza un Raspberry Pi o se è possibile compilare software sul dispositivo IoT, esegui questi passaggi nella finestra terminale del computer host locale. Se è necessario compilare software per il dispositivo IoT sul computer host locale, consulta la documentazione software del dispositivo IoT per informazioni sulle librerie necessarie.

**Per installarlo AWS CLI sul tuo Raspberry Pi**

1. Eseguire i seguenti comandi per scaricare e installare AWS CLI.

   ```
   export PATH=$PATH:~/.local/bin # configures the path to include the directory with the AWS CLI
   git clone https://github.com/aws/aws-cli.git # download the AWS CLI code from GitHub
   cd aws-cli && git checkout v2 # go to the directory with the repo and checkout version 2
   pip3 install -r requirements.txt # install the prerequisite software
   ```

1. Esegui questo comando per installare il AWS CLI. Il completamento del processo può richiedere fino a 15 minuti.

   ```
   pip3 install . # install the AWS CLI 
   ```

1. Esegui questo comando per confermare che AWS CLI è stata installata la versione corretta di.

   ```
   aws --version
   ```

   La versione di AWS CLI dovrebbe essere 2.2 o successiva.

Se è AWS CLI visualizzata la versione corrente, sei pronto per continuare[Configura le tue Account AWS credenziali](#iot-dc-prepare-device-test-step2).

## Configura le tue Account AWS credenziali
<a name="iot-dc-prepare-device-test-step2"></a>

In questa procedura, otterrai Account AWS le credenziali e le aggiungerai per utilizzarle sul tuo Raspberry Pi.

**Per aggiungere le Account AWS credenziali al dispositivo**

1. Ottieni un **ID chiave di accesso** e una **chiave di accesso segreta** da te Account AWS per autenticarli AWS CLI sul tuo dispositivo. 

   Se non conosci AWS IAM, [ https://aws.amazon.com/premiumsupport/knowledge-center/create-access-key/](https://aws.amazon.com/premiumsupport/knowledge-center/create-access-key/)descrive il processo da eseguire nella AWS console per creare credenziali AWS IAM da utilizzare sul tuo dispositivo. 

1. Nella finestra terminale del computer host locale connesso al tuo Raspberry Pi. e con le credenziali **ID chiave di accesso** e **Chiave di accesso segreta** per il tuo dispositivo:

   1. Esegui l'app di configurazione con questo comando: AWS 

      ```
      aws configure
      ```

   1. Inserisci le credenziali e le informazioni di configurazione quando richiesto:

      ```
      AWS Access Key ID: your Access Key ID
      AWS Secret Access Key: your Secret Access Key
      Default region name: your Regione AWS code
      Default output format: json
      ```

1. Esegui questo comando per testare l'accesso del tuo dispositivo al tuo Account AWS AWS IoT Core endpoint.

   ```
   aws iot describe-endpoint --endpoint-type iot:Data-ATS
   ```

   Dovrebbe restituire il tuo endpoint Account AWS di AWS IoT dati specifico, come questo esempio:

   ```
   {
       "endpointAddress": "a3EXAMPLEffp-ats.iot.us-west-2.amazonaws.com"
   }
   ```

Se vedi il tuo endpoint di AWS IoT dati Account AWS specifico, il tuo Raspberry Pi dispone della connettività e delle autorizzazioni per continuare a farlo. [Esegui il download del certificato Amazon Root CA](#iot-dc-prepare-device-test-step3) 

**Importante**  
Le tue Account AWS credenziali sono ora memorizzate sulla scheda microSD del tuo Raspberry Pi. Oltre a AWS semplificare le interazioni future con il software che creerai in questi tutorial, queste verranno anche salvate e duplicate in tutte le immagini della scheda microSD che creerai dopo questo passaggio per impostazione predefinita.  
Per proteggere la sicurezza delle tue Account AWS credenziali, prima di salvare altre immagini di schede microSD, valuta la possibilità di cancellare le credenziali `aws configure` eseguendo nuovamente l'operazione e inserendo caratteri casuali per l'ID della chiave di accesso e la **chiave di **accesso segreta** per evitare che le** tue credenziali vengano compromesse. Account AWS   
Se scopri di aver salvato le tue Account AWS credenziali inavvertitamente, puoi disattivarle nella console IAM. AWS 

## Esegui il download del certificato Amazon Root CA
<a name="iot-dc-prepare-device-test-step3"></a>

Questa procedura scarica e salva una copia di un certificato Amazon Root Certification Authority (CA). Il download di questo certificato lo salva per l'uso nei tutorial successivi e verifica anche la connettività del dispositivo con i servizi AWS .

**Per scaricare e salvare il certificato Amazon Root CA**

1. Esegui il seguente comando per creare una directory per il certificato.

   ```
   mkdir ~/certs
   ```

1. Esegui questo comando per scaricare il certificato Amazon Root CA.

   ```
   curl -o ~/certs/AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

1. Esegui questi comandi per impostare l'accesso alla directory del certificato e al relativo file.

   ```
   chmod 745 ~
   chmod 700 ~/certs
   chmod 644 ~/certs/AmazonRootCA1.pem
   ```

1. Esegui questo comando per visualizzare il file del certificato emesso da una CA nella nuova directory.

   ```
   ls -l ~/certs
   ```

   Dovresti vedere una voce come questa. La data e l'ora saranno diverse; tuttavia, le dimensioni del file e tutte le altre informazioni dovrebbero essere le stesse mostrate qui.

   ```
   -rw-r--r-- 1 pi pi 1188 Oct 28 13:02 AmazonRootCA1.pem
   ```

   Se la dimensione del file non è `1188`, controllare i parametri di comando **curl**. Potresti aver scaricato un file errato.

## (Facoltativo) Salvare l'immagine della scheda microSD
<a name="iot-dc-prepare-device-test-step4"></a>

A questo punto, la scheda microSD di Raspberry Pi ha un sistema operativo aggiornato e il software dell'applicazione di base caricato. 

**Per salvare l'immagine della scheda microSD in un file**

1. Nella finestra terminale del computer host locale, cancella le credenziali AWS .

   1. Esegui l'app di AWS configurazione con questo comando:

      ```
      aws configure
      ```

   1. Sostituisci le credenziali quando richiesto. Puoi lasciare il **Nome della regione di default** e il **Formato di output di default** così come sono facendo clic su **Invio**.

      ```
      AWS Access Key ID [****************YT2H]: XYXYXYXYX
      AWS Secret Access Key [****************9plH]: XYXYXYXYX
      Default region name [us-west-2]: 
      Default output format [json]:
      ```

1. Inserisci questo comando per chiudere il Raspberry Pi.

   ```
   sudo shutdown -h 0
   ```

1. Dopo che il Raspberry Pi si spegne completamente, rimuovere l'alimentatore.

1. Rimuovere la scheda microSD dal dispositivo.

1. Sul computer host locale: 

   1. Inserisci la scheda microSD.

   1. Utilizzando lo strumento di creazione di immagini della scheda SD, salva l'immagine della scheda microSD in un file.

   1. Dopo aver salvato l'immagine della scheda microSD, espelli la scheda dal computer host locale.

1. Con l'alimentazione scollegata dal Raspberry Pi, inserisci la scheda microSD nel Raspberry Pi.

1. Applica l'alimentazione al dispositivo.

1. Dopo circa un minuto, sul computer host locale, riavvia la sessione della finestra terminale e accedi al dispositivo.

   **Non reinserire ancora Account AWS le tue credenziali.**

Dopo aver riavviato e effettuato l'accesso al tuo Raspberry Pi, sei pronto a passare a [Tutorial: installazione e configurazione del AWS IoT Device Client](iot-dc-install-dc.md).

# Tutorial: installazione e configurazione del AWS IoT Device Client
<a name="iot-dc-install-dc"></a>

Questo tutorial ti guida attraverso l'installazione e la configurazione del AWS IoT Device Client e la creazione di AWS IoT risorse che utilizzerai in questa e in altre demo.

**Per iniziare il tutorial:**
+ Prepara il tuo computer host locale e Raspberry Pi seguendo il [il tutorial precedente](iot-dc-prepare-device.md).

Questo tutorial dura circa 90 minuti.

**Al termine di questo argomento:**
+ Il tuo dispositivo IoT sarà pronto per l'uso in altre demo di AWS IoT Device Client.
+ Avrai effettuato il provisioning del tuo dispositivo IoT. AWS IoT Core
+ Avrai scaricato e installato il AWS IoT Device Client sul tuo dispositivo.
+ Avrai salvato un'immagine della scheda microSD del tuo dispositivo che può essere utilizzata nei tutorial successivi.

**Equipaggiamento necessario:**
+ Il tuo ambiente locale di sviluppo e di test dalla [sezione precedente](iot-dc-prepare-device-test.md)
+ Il Raspberry Pi che hai utilizzato nella [sezione precedente](iot-dc-prepare-device-test.md)
+ La scheda di memoria microSD del Raspberry Pi utilizzata nella [sezione precedente](iot-dc-prepare-device-test.md)

**Topics**
+ [Scarica e salva il AWS IoT Device Client](iot-dc-install-download.md)
+ [Esegui il provisioning del tuo Raspberry Pi in AWS IoT](iot-dc-install-provision.md)
+ [Configura il AWS IoT Device Client per testare la connettività](iot-dc-install-configure.md)

# Scarica e salva il AWS IoT Device Client
<a name="iot-dc-install-download"></a>

Le procedure descritte in questa sezione scaricano il AWS IoT Device Client, lo compilano e lo installano sul tuo Raspberry Pi. Dopo aver testato l'installazione, è possibile salvare l'immagine della scheda microSD di Raspberry Pi da utilizzare in seguito quando si desidera riprovare i tutorial.

**Topics**
+ [Scarica e crea il Device Client AWS IoT](#iot-dc-install-dc-download)
+ [Crea le directory utilizzate dal tutorial](#iot-dc-install-dc-files)
+ [(Facoltativo) Salvare l'immagine della scheda microSD](#iot-dc-install-dc-save)

## Scarica e crea il Device Client AWS IoT
<a name="iot-dc-install-dc-download"></a>

Questa procedura installa il AWS IoT Device Client sul tuo Raspberry Pi.

Esegui questi comandi nella finestra terminale del computer host locale connesso al Raspberry Pi.

**Per installare il AWS IoT Device Client sul tuo Raspberry Pi**

1. Inserisci questi comandi per scaricare e creare il AWS IoT Device Client sul tuo Raspberry Pi.

   ```
   cd ~
   git clone https://github.com/awslabs/aws-iot-device-client aws-iot-device-client
   mkdir ~/aws-iot-device-client/build && cd ~/aws-iot-device-client/build
   cmake ../
   ```

1. Esegui questo comando per creare il AWS IoT Device Client. Il completamento del processo può richiedere fino a 15 minuti.

   ```
   cmake --build . --target aws-iot-device-client
   ```

   I messaggi di avviso visualizzati durante la compilazione del AWS IoT Device Client possono essere ignorati.

   Questi tutorial sono stati testati con il AWS IoT Device Client integrato**gcc**, versione (Raspbian 10.2.1-6\$1rpi1) 10.2.1 20210110 sulla versione del sistema operativo Raspberry Pi (bullseye) del 30 ottobre 2021**gcc**, versione (Raspbian 8.3.0-6\$1rpi1) 8.3.0 sulla versione del sistema operativo Raspberry Pi (buster) del 7 maggio 2021.

1. Dopo che il AWS IoT Device Client ha terminato la creazione, testalo eseguendo questo comando.

   ```
   ./aws-iot-device-client --help
   ```

Se vedi la guida della riga di comando per AWS IoT Device Client, significa che il AWS IoT Device Client è stato creato correttamente ed è pronto per l'uso.

## Crea le directory utilizzate dal tutorial
<a name="iot-dc-install-dc-files"></a>

Questa procedura crea le directory sul Raspberry Pi che verranno utilizzate per memorizzare i file utilizzati dai tutorial in questo percorso di apprendimento.

**Per creare le directory utilizzate dai tutorial in questo percorso di apprendimento:**

1. Esegui questi comandi per creare le directory richieste.

   ```
   mkdir ~/dc-configs
   mkdir ~/policies
   mkdir ~/messages
   mkdir ~/certs/testconn
   mkdir ~/certs/pubsub
   mkdir ~/certs/jobs
   ```

1. Esegui questi comandi per impostare le autorizzazioni sulle nuove directory.

   ```
   chmod 745 ~
   chmod 700 ~/certs/testconn
   chmod 700 ~/certs/pubsub
   chmod 700 ~/certs/jobs
   ```

Dopo aver creato queste directory e impostato l'autorizzazione, prosegui con [(Facoltativo) Salvare l'immagine della scheda microSD](#iot-dc-install-dc-save).

## (Facoltativo) Salvare l'immagine della scheda microSD
<a name="iot-dc-install-dc-save"></a>

A questo punto, la scheda microSD del Raspberry Pi ha un sistema operativo aggiornato, il software applicativo di base e il Device Client. AWS IoT 

Se vuoi tornare a provare nuovamente questi esercizi e tutorial, puoi saltare le procedure precedenti scrivendo l'immagine della scheda microSD salvata con questa procedura su una nuova scheda microSD e continuare i tutorial da [Esegui il provisioning del tuo Raspberry Pi in AWS IoT](iot-dc-install-provision.md).

**Per salvare l'immagine della scheda microSD in un file:**

Nella finestra terminale del computer host locale connesso al Raspberry Pi:

1. Conferma che le tue Account AWS credenziali non sono state archiviate.

   1. Esegui l'app di AWS configurazione con questo comando:

      ```
      aws configure
      ```

   1. Se le credenziali sono state archiviate (se sono visualizzate nel prompt), inserisci la stringa **XYXYXYXYX** quando viene richiesto come illustrato qui. Lascia vuoti i campi **Nome della regione di default** e **Formato di output di default**.

      ```
      AWS Access Key ID [****************YXYX]: XYXYXYXYX
      AWS Secret Access Key [****************YXYX]: XYXYXYXYX
      Default region name: 
      Default output format:
      ```

1. Inserisci questo comando per arrestare il Raspberry Pi.

   ```
   sudo shutdown -h 0
   ```

1. Dopo che il Raspberry Pi si spegne completamente, rimuovere l'alimentatore.

1. Rimuovere la scheda microSD dal dispositivo.

1. Sul computer host locale: 

   1. Inserisci la scheda microSD.

   1. Utilizzando lo strumento di creazione di immagini della scheda SD, salva l'immagine della scheda microSD in un file.

   1. Dopo aver salvato l'immagine della scheda microSD, espelli la scheda dal computer host locale.

Puoi continuare con questa scheda microSD in [Esegui il provisioning del tuo Raspberry Pi in AWS IoT](iot-dc-install-provision.md).

# Esegui il provisioning del tuo Raspberry Pi in AWS IoT
<a name="iot-dc-install-provision"></a>

Le procedure in questa sezione iniziano con l'immagine microSD salvata su cui è installato AWS CLI il Device Client AWS IoT e creano le risorse e i certificati del dispositivo che forniscono AWS IoT il tuo Raspberry Pi. AWS IoT

## Installa la scheda microSD nel Raspberry Pi
<a name="iot-dc-install-dc-restore"></a>

Questa procedura installa la scheda microSD con il software necessario caricato e configurato nel Raspberry Pi e la configura in modo da poter continuare con Account AWS i tutorial di questo percorso di apprendimento.

Utilizzare una scheda microSD da [(Facoltativo) Salvare l'immagine della scheda microSD](iot-dc-install-download.md#iot-dc-install-dc-save) che dispone del software necessario per gli esercizi e le esercitazioni in questo percorso di apprendimento.

**Per installare la scheda microSD nel Raspberry Pi**

1. Con l'alimentazione scollegata dal Raspberry Pi, inserisci la scheda microSD nel Raspberry Pi.

1. Collega Raspberry Pi all'alimentazione.

1. Dopo circa un minuto, sul computer host locale, riavvia la sessione della finestra terminale e accedi al Raspberry Pi.

1. Sul computer host locale, nella finestra terminale e con le credenziali **ID chiave di accesso** e **Chiave di accesso segreta** per il Raspberry Pi:

   1. Esegui l'app di configurazione con questo comando: AWS 

      ```
      aws configure
      ```

   1. Inserisci Account AWS le tue credenziali e le informazioni di configurazione quando richiesto:

      ```
      AWS Access Key ID [****************YXYX]: your Access Key ID
      AWS Secret Access Key [****************YXYX]: your Secret Access Key
      Default region name [us-west-2]: your Regione AWS code
      Default output format [json]: json
      ```

Dopo aver ripristinato Account AWS le credenziali, sei pronto per continuare. [Effettua il provisioning del dispositivo in AWS IoT Core](#iot-dc-install-dc-provision)

## Effettua il provisioning del dispositivo in AWS IoT Core
<a name="iot-dc-install-dc-provision"></a>

Le procedure descritte in questa sezione creano AWS IoT le risorse per il rifornimento del tuo Raspberry Pi. AWS IoT Man mano che crei queste risorse, ti verrà chiesto di registrare varie informazioni. Queste informazioni vengono utilizzate dalla configurazione del AWS IoT Device Client nella procedura successiva.

Affinché il tuo Raspberry Pi funzioni AWS IoT, deve essere fornito. Il provisioning è il processo di creazione e configurazione AWS IoT delle risorse necessarie per supportare il tuo Raspberry Pi come dispositivo IoT.

Con il Raspberry Pi acceso e riavviato, connetti la finestra terminale del computer host locale al Raspberry Pi e completa queste procedure.

**Topics**
+ [Creare e scaricare i file di certificato del dispositivo](#iot-dc-install-dc-provision-certs)
+ [Crea risorse AWS IoT](#iot-dc-install-dc-provision-resources)

### Creare e scaricare i file di certificato del dispositivo
<a name="iot-dc-install-dc-provision-certs"></a>

Questa procedura crea i file di certificato del dispositivo per questa demo.

**Per creare e scaricare i file di certificato del dispositivo per il tuo Raspberry Pi**

1. Nella finestra terminale del computer host locale, immettere questi comandi per creare i file di certificato del dispositivo per il dispositivo.

   ```
   mkdir ~/certs/testconn
   aws iot create-keys-and-certificate \
   --set-as-active \
   --certificate-pem-outfile "~/certs/testconn/device.pem.crt" \
   --public-key-outfile "~/certs/testconn/public.pem.key" \
   --private-key-outfile "~/certs/testconn/private.pem.key"
   ```

   Questo comando restituisce una risposta simile alla seguente. Registra il valore `certificateArn` per utilizzarlo in seguito.

   ```
   {
       "certificateArn": "arn:aws:iot:us-west-2:57EXAMPLE833:cert/76e7e4edb3e52f52334be2f387a06145b2aa4c7fcd810f3aea2d92abc227d269",
       "certificateId": "76e7e4edb3e52f5233EXAMPLE7a06145b2aa4c7fcd810f3aea2d92abc227d269",
       "certificatePem": "-----BEGIN CERTIFICATE-----\nMIIDWTCCAkGgAwIBAgI_SHORTENED_FOR_EXAMPLE_Lgn4jfgtS\n-----END CERTIFICATE-----\n",
       "keyPair": {
           "PublicKey": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BA_SHORTENED_FOR_EXAMPLE_ImwIDAQAB\n-----END PUBLIC KEY-----\n",
           "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQE_SHORTENED_FOR_EXAMPLE_T9RoDiukY\n-----END RSA PRIVATE KEY-----\n"
       }
   }
   ```

1. Inserisci i seguenti comandi per impostare le autorizzazioni sulla directory dei certificati e sui relativi file.

   ```
   chmod 745 ~
   chmod 700 ~/certs/testconn
   chmod 644 ~/certs/testconn/*
   chmod 600 ~/certs/testconn/private.pem.key
   ```

1. Esegui questo comando per rivedere le autorizzazioni sulle directory e sui file dei certificati.

   ```
   ls -l ~/certs/testconn
   ```

   L'output del comando dovrebbe essere lo stesso di quello che vedi qui, tranne per le date e gli orari del file.

   ```
   -rw-r--r-- 1 pi pi 1220 Oct 28 13:02 device.pem.crt
   -rw------- 1 pi pi 1675 Oct 28 13:02 private.pem.key
   -rw-r--r-- 1 pi pi  451 Oct 28 13:02 public.pem.key
   ```

A questo punto, hai i file del certificato del dispositivo installati sul tuo Raspberry Pi e puoi proseguire con [Crea risorse AWS IoT](#iot-dc-install-dc-provision-resources).

### Crea risorse AWS IoT
<a name="iot-dc-install-dc-provision-resources"></a>

Questa procedura fornisce il dispositivo AWS IoT creando le risorse di cui ha bisogno per accedere a AWS IoT funzionalità e servizi.

**Per effettuare il provisioning del dispositivo in AWS IoT**

1. Nella finestra terminale del computer host locale, immettere il seguente comando per ottenere l'indirizzo dell'endpoint dati del dispositivo per l' Account AWS.

   ```
   aws iot describe-endpoint --endpoint-type IoT:Data-ATS
   ```

   Questo comando restituisce una risposta simile alla seguente. Registra il valore `endpointAddress` per utilizzarlo in seguito.

   ```
   {
       "endpointAddress": "a3qjEXAMPLEffp-ats.iot.us-west-2.amazonaws.com"
   }
   ```

1. Inserisci questo comando per creare una AWS IoT risorsa per il tuo Raspberry Pi.

   ```
   aws iot create-thing --thing-name "DevCliTestThing"
   ```

   Se la tua risorsa AWS IoT thing è stata creata, il comando restituisce una risposta come questa.

   ```
   {
       "thingName": "DevCliTestThing",
       "thingArn": "arn:aws:iot:us-west-2:57EXAMPLE833:thing/DevCliTestThing",
       "thingId": "8ea78707-32c3-4f8a-9232-14bEXAMPLEfd"
   }
   ```

1. Nella finestra terminale:

   1. Apri un editor di testo, ad esempio `nano`.

   1. Copia questo documento di policy JSON e incollalo nell'editor di testo aperto.  
****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Publish",
                      "iot:Subscribe",
                      "iot:Receive",
                      "iot:Connect"
                  ],
                  "Resource": [
                      "*"
                  ]
              }
          ]
      }
      ```
**Nota**  
Questo documento di policy concede generosamente a tutte le risorse l'autorizzazione a connettersi, ricevere, pubblicare e sottoscrivere. Normalmente le policy consentono solo a risorse specifiche di eseguire azioni specifiche. Tuttavia, per il test iniziale della connettività del dispositivo, questa policy eccessivamente generale e permissiva viene utilizzata per ridurre al minimo la possibilità di un problema di accesso durante questo test. Nei tutorial successivi, verranno utilizzati documenti di policy più ristretti per dimostrare le migliori pratiche nella progettazione delle policy.

   1. Salva il file nell'editor di testo come **\$1/policies/dev\$1cli\$1test\$1thing\$1policy.json**. 

1. Esegui questo comando per utilizzare il documento di policy dei passaggi precedenti per creare una AWS IoT politica.

   ```
   aws iot create-policy \
   --policy-name "DevCliTestThingPolicy" \
   --policy-document "file://~/policies/dev_cli_test_thing_policy.json"
   ```

   Se la policy viene creata, verrà visualizzata una risposta simile alla seguente.

   ```
   {
       "policyName": "DevCliTestThingPolicy",
       "policyArn": "arn:aws:iot:us-west-2:57EXAMPLE833:policy/DevCliTestThingPolicy",
       "policyDocument": "{\n    \"Version\": \"2012-10-17\",		 	 	 \n    \"Statement\": [\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": [\n                \"iot:Publish\",\n                \"iot:Subscribe\",\n                \"iot:Receive\",\n                \"iot:Connect\"\n            ],\n            \"Resource\": [\n                \"*\"\n            ]\n        }\n    ]\n}\n",
       "policyVersionId": "1"
   }
   ```

1. Eseguire questo comando per attribuire la policy al certificato del dispositivo. Sostituisci `certificateArn` con il valore `certificateArn` salvato in precedenza.

   ```
   aws iot attach-policy \
   --policy-name "DevCliTestThingPolicy" \
   --target "certificateArn"
   ```

   In caso di successo, questo comando non restituisce alcun risultato.

1. Esegui questo comando per allegare il certificato del dispositivo alla risorsa AWS IoT oggetto. Sostituisci `certificateArn` con il valore `certificateArn` salvato in precedenza.

   ```
   aws iot attach-thing-principal \
   --thing-name "DevCliTestThing" \
   --principal "certificateArn"
   ```

   In caso di successo, questo comando non restituisce alcun risultato.

Dopo aver effettuato correttamente il provisioning del dispositivo AWS IoT, sei pronto per continuare[Configura il AWS IoT Device Client per testare la connettività](iot-dc-install-configure.md).

# Configura il AWS IoT Device Client per testare la connettività
<a name="iot-dc-install-configure"></a>

Le procedure in questa sezione configurano il AWS IoT Device Client per pubblicare un messaggio MQTT dal tuo Raspberry Pi.

**Topics**
+ [Creare il file di configurazione](#iot-dc-install-dc-configure-step1)
+ [Aprire il client di test MQTT](#iot-dc-install-dc-configure-step2)
+ [AWS IoT Esegui Device Client](#iot-dc-install-dc-configure-step3)

## Creare il file di configurazione
<a name="iot-dc-install-dc-configure-step1"></a>

Questa procedura crea il file di configurazione per testare il Device Client. AWS IoT 

**Per creare il file di configurazione per testare il AWS IoT Device Client**
+ Nella finestra terminale del computer host locale connesso al Raspberry Pi:

  1. Inserisci questi comandi per creare una directory per i file di configurazione e impostare l'autorizzazione sulla directory:

     ```
     mkdir ~/dc-configs
     chmod 745 ~/dc-configs
     ```

  1. Apri un editor di testo, ad esempio `nano`.

  1. Copia questo documento JSON e incollalo nell'editor di testo aperto.

     ```
     {
       "endpoint": "a3qEXAMPLEaffp-ats.iot.us-west-2.amazonaws.com",
       "cert": "~/certs/testconn/device.pem.crt",
       "key": "~/certs/testconn/private.pem.key",
       "root-ca": "~/certs/AmazonRootCA1.pem",
       "thing-name": "DevCliTestThing",
       "logging": {
         "enable-sdk-logging": true,
         "level": "DEBUG",
         "type": "STDOUT",
         "file": ""
       },
       "jobs": {
         "enabled": false,
         "handler-directory": ""
       },
       "tunneling": {
         "enabled": false
       },
       "device-defender": {
         "enabled": false,
         "interval": 300
       },
       "fleet-provisioning": {
         "enabled": false,
         "template-name": "",
         "template-parameters": "",
         "csr-file": "",
         "device-key": ""
       },
       "samples": {
         "pub-sub": {
           "enabled": true,
           "publish-topic": "test/dc/pubtopic",
           "publish-file": "",
           "subscribe-topic": "test/dc/subtopic",
           "subscribe-file": ""
         }
       },
       "config-shadow": {
         "enabled": false
       },
       "sample-shadow": {
         "enabled": false,
         "shadow-name": "",
         "shadow-input-file": "",
         "shadow-output-file": ""
       }
     }
     ```

  1. Sostituisci il *endpoint* valore con Device Data Endpoint per il tuo dispositivo Account AWS che hai trovato in. [Effettua il provisioning del dispositivo in AWS IoT Core](iot-dc-install-provision.md#iot-dc-install-dc-provision)

  1. Salva il file nell'editor di testo come **\$1/dc-configs/dc-testconn-config.json**.

  1. Esegui questo comando per impostare le autorizzazioni sul nuovo file di configurazione.

     ```
     chmod 644 ~/dc-configs/dc-testconn-config.json
     ```

Dopo aver salvato il file, è possibile proseguire con [Aprire il client di test MQTT](#iot-dc-install-dc-configure-step2).

## Aprire il client di test MQTT
<a name="iot-dc-install-dc-configure-step2"></a>

Questa procedura prepara il **client di test MQTT** nella AWS IoT console per sottoscrivere il messaggio MQTT che il AWS IoT Device Client pubblica durante l'esecuzione.

**Per preparare il **Client MQTT di test** a sottoscrivere tutti i messaggi MQTT**

1. Sul computer host locale, nella [console AWS IoT](https://console.aws.amazon.com//iot/home#/test), seleziona **Client MQTT di test**.

1. Nella scheda **Subscribe to a topic** (Sottoscrivi un argomento), in **Topic filter** (Filtro argomenti) inserisci **\$1** (un solo cancelletto) e seleziona **Subscribe** (Sottoscrivi) per sottoscrivere ogni argomento MQTT.

1. Sotto l'etichetta **Subscriptions (Sottoscrizioni)**, conferma di vedere **\$1** (un solo segno di cancelletto).

Lascia aperta la finestra con il **Client MQTT di test** mentre prosegui con [AWS IoT Esegui Device Client](#iot-dc-install-dc-configure-step3).

## AWS IoT Esegui Device Client
<a name="iot-dc-install-dc-configure-step3"></a>

Questa procedura esegue il AWS IoT Device Client in modo da pubblicare un singolo messaggio MQTT che il **client di test MQTT** riceve e visualizza.

**Per inviare un messaggio MQTT dal Device Client AWS IoT**

1. Assicurati che sia la finestra terminale collegata al tuo Raspberry Pi che la finestra con il **client MQTT di test** siano visibili durante l'esecuzione di questa procedura.

1. Nella finestra del terminale, inserisci questi comandi per eseguire il AWS IoT Device Client utilizzando il file di configurazione creato in. [Creare il file di configurazione](#iot-dc-install-dc-configure-step1)

   ```
   cd ~/aws-iot-device-client/build
   ./aws-iot-device-client --config-file ~/dc-configs/dc-testconn-config.json
   ```

   Nella finestra del terminale, il AWS IoT Device Client visualizza i messaggi informativi e gli eventuali errori che si verificano durante l'esecuzione.

   Se nella finestra del terminale non vengono visualizzati errori, esamina il **client MQTT di test**.

1. Nel **client MQTT di test**, nella finestra Subsciptions (Sottoscrizioni), viene visualizzato il messaggio *Hello World\$1* inviato all' argomento del messaggio `test/dc/pubtopic`.

1. Se il AWS IoT Device Client non mostra errori e viene visualizzato *Hello World\$1* inviato al `test/dc/pubtopic` messaggio nel **client di test MQTT**, hai dimostrato che la connessione è riuscita.

1. Nella finestra del terminale, digitate **^C** (Ctrl-C) per fermare il AWS IoT Device Client.

Dopo aver dimostrato che il AWS IoT Device Client funziona correttamente sul tuo Raspberry Pi e con cui puoi comunicare AWS IoT, puoi continuare con. [Tutorial: Dimostrare la comunicazione dei messaggi MQTT con il AWS IoT Device Client](iot-dc-testconn.md)

# Tutorial: Dimostrare la comunicazione dei messaggi MQTT con il AWS IoT Device Client
<a name="iot-dc-testconn"></a>

Questo tutorial dimostra come il AWS IoT Device Client può sottoscrivere e pubblicare messaggi MQTT, che sono comunemente usati nelle soluzioni IoT.

**Per iniziare il tutorial:**
+ Configurare il computer host locale e Raspberry Pi configurati come nella [la sezione precedente](iot-dc-install-dc.md).

  Se hai salvato l'immagine della scheda microSD dopo aver installato AWS IoT il Device Client, puoi utilizzare una scheda microSD con quell'immagine con il tuo Raspberry Pi.
+ Se hai già eseguito questa demo, prova [Passo 2: Pulizia delle demo Account AWS dopo la creazione con AWS IoT Device Client](iot-dc-cleanup.md#iot-dc-cleanup-cloud) a eliminare tutte le AWS IoT risorse create nelle esecuzioni precedenti per evitare errori di risorse duplicate.

Questo tutorial dura circa 45 minuti.

**Al termine di questo argomento:**
+ Avrai dimostrato diversi modi in cui il tuo dispositivo IoT può iscriversi ai messaggi MQTT AWS IoT e pubblicare messaggi MQTT su. AWS IoT

**Equipaggiamento necessario:**
+ Il tuo ambiente locale di sviluppo e di test dalla [sezione precedente](iot-dc-install-dc.md)
+ Il Raspberry Pi che hai utilizzato nella [sezione precedente](iot-dc-install-dc.md)
+ La scheda di memoria microSD del Raspberry Pi utilizzata nella [sezione precedente](iot-dc-install-dc.md)

**Topics**
+ [Prepara il Raspberry Pi per dimostrare la comunicazione tramite messaggi MQTT](iot-dc-testconn-provision.md)
+ [Dimostra la pubblicazione di messaggi con AWS IoT Device Client](iot-dc-testconn-publish.md)
+ [Dimostra l'iscrizione ai messaggi con Device Client AWS IoT](iot-dc-testconn-subscribe.md)

# Prepara il Raspberry Pi per dimostrare la comunicazione tramite messaggi MQTT
<a name="iot-dc-testconn-provision"></a>

Questa procedura crea le risorse in AWS IoT e nel Raspberry Pi per dimostrare la comunicazione dei messaggi MQTT utilizzando il AWS IoT Device Client.

**Topics**
+ [Creare i file di certificato per dimostrare la comunicazione MQTT](#iot-dc-testconn-provision-certs)
+ [Effettua il provisioning del dispositivo per dimostrare la comunicazione MQTT](#iot-dc-testconn-provision-aws)
+ [Configura il file di configurazione del AWS IoT Device Client e il client di test MQTT per dimostrare la comunicazione MQTT](#iot-dc-testconn-provision-dc-config)

## Creare i file di certificato per dimostrare la comunicazione MQTT
<a name="iot-dc-testconn-provision-certs"></a>

Questa procedura crea i file di certificato del dispositivo per questa demo.

**Per creare e scaricare i file di certificato del dispositivo per il tuo Raspberry Pi**



1. Nella finestra terminale del computer host locale, immettere questi comandi per creare i file di certificato del dispositivo per il dispositivo.

   ```
   mkdir ~/certs/pubsub
   aws iot create-keys-and-certificate \
   --set-as-active \
   --certificate-pem-outfile "~/certs/pubsub/device.pem.crt" \
   --public-key-outfile "~/certs/pubsub/public.pem.key" \
   --private-key-outfile "~/certs/pubsub/private.pem.key"
   ```

   Questo comando restituisce una risposta simile alla seguente. Salva il `certificateArn` per utilizzarlo in un secondo momento.

   ```
   {
   "certificateArn": "arn:aws:iot:us-west-2:57EXAMPLE833:cert/76e7e4edb3e52f52334be2f387a06145b2aa4c7fcd810f3aea2d92abc227d269",
   "certificateId": "76e7e4edb3e52f5233EXAMPLE7a06145b2aa4c7fcd810f3aea2d92abc227d269",
   "certificatePem": "-----BEGIN CERTIFICATE-----\nMIIDWTCCAkGgAwIBAgI_SHORTENED_FOR_EXAMPLE_Lgn4jfgtS\n-----END CERTIFICATE-----\n",
   "keyPair": {
       "PublicKey": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BA_SHORTENED_FOR_EXAMPLE_ImwIDAQAB\n-----END PUBLIC KEY-----\n",
       "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQE_SHORTENED_FOR_EXAMPLE_T9RoDiukY\n-----END RSA PRIVATE KEY-----\n"
   }
   }
   ```

1. Inserisci i seguenti comandi per impostare le autorizzazioni sulla directory dei certificati e sui relativi file.

   ```
   chmod 700 ~/certs/pubsub
   chmod 644 ~/certs/pubsub/*
   chmod 600 ~/certs/pubsub/private.pem.key
   ```

1. Esegui questo comando per rivedere le autorizzazioni sulle directory e sui file dei certificati.

   ```
   ls -l ~/certs/pubsub
   ```

   L'output del comando dovrebbe essere lo stesso di quello che vedi qui, tranne per le date e gli orari del file.

   ```
   -rw-r--r-- 1 pi pi 1220 Oct 28 13:02 device.pem.crt
   -rw------- 1 pi pi 1675 Oct 28 13:02 private.pem.key
   -rw-r--r-- 1 pi pi  451 Oct 28 13:02 public.pem.key
   ```

1. Inserisci questi comandi per creare le directory per i file di log.

   ```
   mkdir ~/.aws-iot-device-client
   mkdir ~/.aws-iot-device-client/log
   chmod 745 ~/.aws-iot-device-client/log
   echo " " > ~/.aws-iot-device-client/log/aws-iot-device-client.log
   echo " " > ~/.aws-iot-device-client/log/pubsub_rx_msgs.log
   chmod 600 ~/.aws-iot-device-client/log/*
   ```

## Effettua il provisioning del dispositivo per dimostrare la comunicazione MQTT
<a name="iot-dc-testconn-provision-aws"></a>

Questa sezione crea le AWS IoT risorse che forniscono il tuo Raspberry Pi. AWS IoT

**Per effettuare il provisioning del dispositivo in AWS IoT:**

1. Nella finestra terminale del computer host locale, immettere il seguente comando per ottenere l'indirizzo dell'endpoint dati del dispositivo per l' Account AWS.

   ```
   aws iot describe-endpoint --endpoint-type IoT:Data-ATS
   ```

   Il valore dell'endpoint non è cambiato dal momento in cui hai eseguito questo comando per il tutorial precedente. Il comando viene eseguito nuovamente per trovare e incollare facilmente il valore dell'endpoint dei dati nel file di configurazione utilizzato in questo tutorial.

   Questo comando restituisce una risposta simile alla seguente. Registra il valore `endpointAddress` per utilizzarlo in seguito.

   ```
   {
   "endpointAddress": "a3qjEXAMPLEffp-ats.iot.us-west-2.amazonaws.com"
   }
   ```

1. Inserisci questo comando per creare una nuova AWS IoT risorsa per il tuo Raspberry Pi.

   ```
   aws iot create-thing --thing-name "PubSubTestThing"
   ```

   Poiché una risorsa AWS IoT oggetto è una rappresentazione *virtuale* del tuo dispositivo nel cloud, possiamo creare più risorse di oggetti AWS IoT da utilizzare per scopi diversi. Possono essere utilizzati tutti dallo stesso dispositivo IoT fisico per rappresentare diversi aspetti del dispositivo.

   Questi tutorial utilizzeranno solo una risorsa alla volta per rappresentare il Raspberry Pi. In questo modo, in questi tutorial, rappresentano le diverse demo in modo che, dopo aver creato le AWS IoT risorse per una demo, sia possibile tornare indietro e ripetere la demo utilizzando le risorse create appositamente per ciascuna di esse.

   Se la risorsa AWS IoT oggetto è stata creata, il comando restituisce una risposta come questa.

   ```
   {
   "thingName": "PubSubTestThing",
   "thingArn": "arn:aws:iot:us-west-2:57EXAMPLE833:thing/PubSubTestThing",
   "thingId": "8ea78707-32c3-4f8a-9232-14bEXAMPLEfd"
   }
   ```

1. Nella finestra terminale:

   1. Apri un editor di testo, ad esempio `nano`.

   1. Copia questo documento JSON e incollalo nell'editor di testo aperto.  
****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Connect"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:client/PubSubTestThing"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Publish"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:topic/test/dc/pubtopic"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Subscribe"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:topicfilter/test/dc/subtopic"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Receive"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:topic/test/dc/subtopic"
                  ]
              }
          ]
      }
      ```

   1. Nell'editor, in ogni `Resource` sezione del documento di policy, sostituisci *us-west-2:57EXAMPLE833* con i tuoi Regione AWS, un carattere con i due punti (:) e il tuo numero di 12 cifre Account AWS .

   1. Salva il file nell'editor di testo come **\$1/policies/pubsub\$1test\$1thing\$1policy.json**. 

1. Esegui questo comando per utilizzare il documento di policy dei passaggi precedenti per creare una AWS IoT politica.

   ```
   aws iot create-policy \
   --policy-name "PubSubTestThingPolicy" \
   --policy-document "file://~/policies/pubsub_test_thing_policy.json"
   ```

   Se la policy viene creata, verrà visualizzata una risposta simile alla seguente.

   ```
   {
                                       "policyName": "PubSubTestThingPolicy",
                                       "policyArn": "arn:aws:iot:us-west-2:57EXAMPLE833:policy/PubSubTestThingPolicy",
                                       "policyDocument": "{\n\"Version\": \"2012-10-17\",		 	 	 \n\"Statement\": [\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"iot:Connect\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-west-2:57EXAMPLE833:client/PubSubTestThing\"\n]\n},\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"iot:Publish\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/pubtopic\"\n]\n},\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"iot:Subscribe\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/subtopic\"\n]\n},\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"iot:Receive\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/*\"\n]\n}\n]\n}\n",
                                       "policyVersionId": "1"
                                       }
   ```

1. Eseguire questo comando per attribuire la policy al certificato del dispositivo. Sostituisci `certificateArn` con il valore `certificateArn` salvato in precedenza in questa sezione.

   ```
   aws iot attach-policy \
   --policy-name "PubSubTestThingPolicy" \
   --target "certificateArn"
   ```

   In caso di successo, questo comando non restituisce alcun risultato.

1. Esegui questo comando per attribuire il certificato del dispositivo alle risorse dell'oggetto AWS IoT . Sostituisci `certificateArn` con il valore `certificateArn` salvato in precedenza in questa sezione.

   ```
   aws iot attach-thing-principal \
   --thing-name "PubSubTestThing" \
   --principal "certificateArn"
   ```

   In caso di successo, questo comando non restituisce alcun risultato.

Dopo aver effettuato correttamente il provisioning del dispositivo AWS IoT, sei pronto per continuare[Configura il file di configurazione del AWS IoT Device Client e il client di test MQTT per dimostrare la comunicazione MQTT](#iot-dc-testconn-provision-dc-config).

## Configura il file di configurazione del AWS IoT Device Client e il client di test MQTT per dimostrare la comunicazione MQTT
<a name="iot-dc-testconn-provision-dc-config"></a>

Questa procedura crea un file di configurazione per testare il Device Client. AWS IoT 

**Per creare il file di configurazione per testare il AWS IoT Device Client**

1. Nella finestra terminale del computer host locale connesso al Raspberry Pi:

   1. Apri un editor di testo, ad esempio `nano`.

   1. Copia questo documento JSON e incollalo nell'editor di testo aperto.

      ```
      {
        "endpoint": "a3qEXAMPLEaffp-ats.iot.us-west-2.amazonaws.com",
        "cert": "~/certs/pubsub/device.pem.crt",
        "key": "~/certs/pubsub/private.pem.key",
        "root-ca": "~/certs/AmazonRootCA1.pem",
        "thing-name": "PubSubTestThing",
        "logging": {
          "enable-sdk-logging": true,
          "level": "DEBUG",
          "type": "STDOUT",
          "file": ""
        },
        "jobs": {
          "enabled": false,
          "handler-directory": ""
        },
        "tunneling": {
          "enabled": false
        },
        "device-defender": {
          "enabled": false,
          "interval": 300
        },
        "fleet-provisioning": {
          "enabled": false,
          "template-name": "",
          "template-parameters": "",
          "csr-file": "",
          "device-key": ""
        },
        "samples": {
          "pub-sub": {
            "enabled": true,
            "publish-topic": "test/dc/pubtopic",
            "publish-file": "",
            "subscribe-topic": "test/dc/subtopic",
            "subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"
          }
        },
        "config-shadow": {
          "enabled": false
        },
        "sample-shadow": {
          "enabled": false,
          "shadow-name": "",
          "shadow-input-file": "",
          "shadow-output-file": ""
        }
      }
      ```

   1. Sostituisci il *endpoint* valore con Device Data Endpoint per il tuo dispositivo Account AWS che hai trovato in. [Effettua il provisioning del dispositivo in AWS IoT Core](iot-dc-install-provision.md#iot-dc-install-dc-provision)

   1. Salva il file nell'editor di testo come **\$1/dc-configs/dc-pubsub-config.json**.

   1. Esegui questo comando per impostare le autorizzazioni sul nuovo file di configurazione.

      ```
      chmod 644 ~/dc-configs/dc-pubsub-config.json
      ```

1. Per preparare il **Client MQTT di test** a sottoscrivere tutti i messaggi MQTT:

   1. Sul computer host locale, nella [console AWS IoT](https://console.aws.amazon.com//iot/home#/test), seleziona **Client MQTT di test**.

   1. Nella tabella **Subscribe to a topic (Sottoscrivi un argomento)**, in **Topic filter (Filtro argomenti)**, inserisci **\$1** (un solo segno di cancelletto) e scegli **Subscribe (Sottoscrivi)**.

   1. Sotto l'etichetta **Subscriptions (Sottoscrizioni)**, conferma di vedere **\$1** (un solo segno di cancelletto).

   Lascia la finestra con il **Client MQTT di test** aperta mentre continui questo tutorial.

Dopo aver salvato il file e configurato il **client MQTT di test**, sei pronto a proseguire con [Dimostra la pubblicazione di messaggi con AWS IoT Device Client](iot-dc-testconn-publish.md).

# Dimostra la pubblicazione di messaggi con AWS IoT Device Client
<a name="iot-dc-testconn-publish"></a>

Le procedure in questa sezione mostrano come il AWS IoT Device Client può inviare messaggi MQTT predefiniti e personalizzati.

Queste istruzioni di policy nella policy creata nella fase precedente per questi esercizi consentono al Raspberry Pi di eseguire queste azioni:
+ 

**`iot:Connect`**  
Consente la connessione al client denominato`PubSubTestThing`, il Raspberry Pi su cui è in esecuzione il AWS IoT Device Client.

  ```
      {
        "Effect": "Allow",
        "Action": [
          "iot:Connect"
        ],
        "Resource": [
          "arn:aws:iot:us-west-2:57EXAMPLE833:client/PubSubTestThing"
        ]
      }
  ```
+ 

**`iot:Publish`**  
Fornire al Raspberry Pi l'autorizzazione a pubblicare messaggi con un argomento MQTT di `test/dc/pubtopic`.

  ```
      {
        "Effect": "Allow",
        "Action": [
          "iot:Publish"
        ],
        "Resource": [
          "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/pubtopic"
        ]
      }
  ```

  L'azione `iot:Publish` consente di pubblicare agli argomenti MQTT elencati nell'array di Risorsa. Il *contenuto* di tali messaggi non è controllato dall'istruzione di policy.

## Pubblica il messaggio predefinito utilizzando il AWS IoT Device Client
<a name="iot-dc-testconn-publish-default"></a>

Questa procedura esegue il AWS IoT Device Client in modo da pubblicare un singolo messaggio MQTT predefinito che il **client di test MQTT riceve** e visualizza.

**Per inviare il messaggio MQTT predefinito dal Device Client AWS IoT**

1. Assicurati che sia la finestra terminale collegata al computer host locale sia connessa al tuo Raspberry Pi e che la finestra con il **client MQTT di test** sia visibile durante l'esecuzione di questa procedura.

1. Nella finestra del terminale, inserisci questi comandi per eseguire il AWS IoT Device Client utilizzando il file di configurazione creato in. [Creare il file di configurazione](iot-dc-install-configure.md#iot-dc-install-dc-configure-step1)

   ```
   cd ~/aws-iot-device-client/build
   ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-config.json
   ```

   Nella finestra del terminale, il AWS IoT Device Client visualizza i messaggi informativi e gli eventuali errori che si verificano durante l'esecuzione.

   Se nella finestra del terminale non vengono visualizzati errori, esamina il **client MQTT di test**.

1. In **MQTT test client** (Client MQTT di test), nella finestra **Subscriptions** (Sottoscrizioni) viene visualizzato il messaggio *Hello World\$1* inviato all'argomento del messaggio `test/dc/pubtopic`.

1. Se il AWS IoT Device Client non mostra errori e viene visualizzato *Hello World\$1* inviato al `test/dc/pubtopic` messaggio nel **client di test MQTT**, hai dimostrato che la connessione è riuscita.

1. Nella finestra del terminale, digitate **^C** (Ctrl-C) per fermare il AWS IoT Device Client.

Dopo aver dimostrato che AWS IoT Device Client ha pubblicato il messaggio MQTT predefinito, puoi continuare con. [Pubblica un messaggio personalizzato utilizzando AWS IoT Device Client](#iot-dc-testconn-publish-custom)

## Pubblica un messaggio personalizzato utilizzando AWS IoT Device Client
<a name="iot-dc-testconn-publish-custom"></a>

Le procedure di questa sezione creano un messaggio MQTT personalizzato e quindi eseguono AWS IoT Device Client in modo che pubblichi il messaggio MQTT personalizzato una volta per essere ricevuto e visualizzato dal **client MQTT di test**.

### Crea un messaggio MQTT personalizzato per il Device Client AWS IoT
<a name="iot-dc-testconn-publish-custom-create"></a>

Esegui questi passaggi nella finestra terminale del computer host locale connesso al Raspberry Pi.

**Per creare un messaggio personalizzato da pubblicare sul AWS IoT Device Client**

1. Nella finestra terminale, apri un editor di testo, ad esempio `nano`.

1. Nell'editor di testo, copia e incolla il documento JSON riportato di seguito. Questo sarà il payload del messaggio MQTT pubblicato da AWS IoT Device Client.

   ```
   {
     "temperature": 28,
     "humidity": 80,
     "barometer": 1013,
     "wind": {
       "velocity": 22,
       "bearing": 255
     }
   }
   ```

1. Salva il contenuto dell'editor di testo come **\$1/messages/sample-ws-message.json**. 

1. Inserisci il comando seguente per impostare le autorizzazioni del file di messaggio appena creato.

   ```
   chmod 600 ~/messages/*
   ```

**Per creare un file di configurazione per il AWS IoT Device Client da utilizzare per inviare il messaggio personalizzato**

1. Nella finestra del terminale, in un editor di testo come`nano`, apri il file di configurazione esistente di AWS IoT Device Client:. **\$1/dc-configs/dc-pubsub-config.json** 

1. Modifica l'oggetto `samples` in questo modo. Nessun'altra parte di questo file deve essere modificata.

   ```
     "samples": {
       "pub-sub": {
         "enabled": true,
         "publish-topic": "test/dc/pubtopic",
         "publish-file": "~/messages/sample-ws-message.json",
         "subscribe-topic": "test/dc/subtopic",
         "subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"
   ```

1. Salva il contenuto dell'editor di testo come **\$1/dc-configs/dc-pubsub-custom-config.json**. 

1. Esegui questo comando per impostare le autorizzazioni sul nuovo file di configurazione.

   ```
   chmod 644 ~/dc-configs/dc-pubsub-custom-config.json
   ```

### Pubblica il messaggio MQTT personalizzato utilizzando Device Client AWS IoT
<a name="iot-dc-testconn-publish-custom-publish"></a>

Questa modifica influisce solo sui *contenuti* del payload del messaggio MQTT, quindi la policy attuale continuerà a funzionare. Tuttavia, se l'*argomento MQTT* (come definito dal valore `publish-topic` in `~/dc-configs/dc-pubsub-custom-config.json`) è stato cambiato, anche l'istruzione di policy `iot::Publish` dovrebbe essere modificata per consentire a Raspberry Pi di pubblicare sul nuovo argomento MQTT.

**Per inviare il messaggio MQTT dal Device Client AWS IoT**

1. Assicurati che sia la finestra terminale che la finestra con il **client MQTT di test** siano visibili durante l'esecuzione di questa procedura. Inoltre, assicurati che il tuo **client MQTT di test** abbia una sottoscrizione ancora attiva per il filtro di argomenti **\$1**. Se non lo è, effettua nuovamente la sottoscrizione al filtro argomento**\$1**.

1. Nella finestra terminale, immettere questi comandi per eseguire AWS IoT Device Client utilizzando il file di configurazione creato in [Creare il file di configurazione](iot-dc-install-configure.md#iot-dc-install-dc-configure-step1).

   ```
   cd ~/aws-iot-device-client/build
   ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-custom-config.json
   ```

   Nella finestra del terminale, il AWS IoT Device Client visualizza i messaggi informativi e gli eventuali errori che si verificano durante l'esecuzione.

   Se nella finestra del terminale non vengono visualizzati errori, esaminare il client di test MQTT.

1. Nel **client MQTT di test**, nella finestra **Subscriptions (Sottoscrizioni)**, viene visualizzato il payload del messaggio personalizzato inviato all'argomento del messaggio `test/dc/pubtopic`.

1. Se il AWS IoT Device Client non mostra errori e vedi il payload di messaggi personalizzati che hai pubblicato nel `test/dc/pubtopic` messaggio nel **client di test MQTT**, hai pubblicato un messaggio personalizzato con successo.

1. Nella finestra del terminale, digitate **^C** (Ctrl-C) per arrestare il Device Client. AWS IoT 

Dopo aver dimostrato che AWS IoT Device Client ha pubblicato un payload di messaggi personalizzato, puoi continuare a farlo. [Dimostra l'iscrizione ai messaggi con Device Client AWS IoT](iot-dc-testconn-subscribe.md)

# Dimostra l'iscrizione ai messaggi con Device Client AWS IoT
<a name="iot-dc-testconn-subscribe"></a>

In questa sezione verranno illustrati due tipi di sottoscrizione ai messaggi:
+ Sottoscrizione ad argomento singolo
+ Sottoscrizione ad argomento con caratteri jolly

Queste istruzioni di policy nella policy creata per questi esercizi consentono a Raspberry Pi di eseguire queste azioni:
+ 

**`iot:Receive`**  
Fornisce al AWS IoT Device Client l'autorizzazione a ricevere argomenti MQTT che corrispondono a quelli nominati nell'`Resource`oggetto.

  ```
      {
        "Effect": "Allow",
        "Action": [
          "iot:Receive"
        ],
        "Resource": [
          "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/subtopic"
        ]
      }
  ```
+ 

**`iot:Subscribe`**  
Fornisce al AWS IoT Device Client l'autorizzazione a sottoscrivere i filtri degli argomenti MQTT che corrispondono a quelli nominati nell'`Resource`oggetto.

  ```
      {
        "Effect": "Allow",
        "Action": [
          "iot:Subscribe"
        ],
        "Resource": [
          "arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/subtopic"
        ]
      }
  ```

## Iscriviti a un singolo argomento del messaggio MQTT
<a name="iot-dc-testconn-subscribe-simple-topic"></a>

Questa procedura dimostra come AWS IoT Device Client può sottoscrivere e registrare i messaggi MQTT.

Nella finestra del terminale del computer host locale connesso al Raspberry Pi, elenca il contenuto di **\$1/dc-configs/dc-pubsub-custom-config.json** oppure aprire il file in un editor di testo per esaminarne il contenuto. Individua l'oggetto `samples`, che dovrebbe essere simile a questo.

```
  "samples": {
    "pub-sub": {
      "enabled": true,
      "publish-topic": "test/dc/pubtopic",
      "publish-file": "~/messages/sample-ws-message.json",
      "subscribe-topic": "test/dc/subtopic",
      "subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"
```

Nota che il valore `subscribe-topic` è l'argomento MQTT che AWS IoT Device Client sottoscriverà quando viene eseguito. Il AWS IoT Device Client scrive i payload dei messaggi che riceve da questo abbonamento nel file indicato nel valore. `subscribe-file`

**Per sottoscrivere un argomento relativo a un messaggio MQTT dal Device Client AWS IoT**

1. Assicurati che sia la finestra terminale che la finestra con il client MQTT di test siano visibili durante l'esecuzione di questa procedura. Inoltre, assicurati che il tuo **client MQTT di test** abbia una sottoscrizione ancora attiva per il filtro di argomenti **\$1**. Se non lo è, effettua nuovamente la sottoscrizione al filtro argomento**\$1**.

1. Nella finestra del terminale, inserisci questi comandi per eseguire il AWS IoT Device Client utilizzando il file di configurazione creato in. [Creare il file di configurazione](iot-dc-install-configure.md#iot-dc-install-dc-configure-step1)

   ```
   cd ~/aws-iot-device-client/build
   ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-custom-config.json
   ```

   Nella finestra del terminale, il AWS IoT Device Client visualizza i messaggi informativi e gli eventuali errori che si verificano durante l'esecuzione.

   Se nella finestra del terminale non vengono visualizzati errori, continuare nella console AWS IoT .

1. Nella AWS IoT console, nel **client di test MQTT**, scegliete la scheda **Pubblica su un argomento**.

1. Alla voce **Topic name (Nome argomento)**, inserisci **test/dc/subtopic**

1. Alla voce **Message Payload (Payload del messaggio)**, esamina i contenuti del messaggio.

1. Per pubblicare il messaggio MQTT, scegli **Publish (Pubblica)**.

1. Nella finestra del terminale, controllate la voce relativa al *messaggio ricevuto* dal AWS IoT Device Client che assomiglia a questa.

   ```
   2021-11-10T16:02:20.890Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 45 bytes
   ```

1. Dopo aver visualizzato la voce relativa al *messaggio ricevuto* che indica che il messaggio è stato ricevuto, digita **^C** (Ctrl-C) per interrompere il AWS IoT Device Client.

1. Inserisci questo comando per visualizzare la fine del file di log dei messaggi e visualizzare il messaggio pubblicato dal **client MQTT di test**.

   ```
   tail ~/.aws-iot-device-client/log/pubsub_rx_msgs.log
   ```

Visualizzando il messaggio nel file di log, è stato dimostrato che AWS IoT Device Client ha ricevuto il messaggio pubblicato dal client di test MQTT.

## Sottoscrivi a più argomenti del messaggio MQTT utilizzando caratteri jolly
<a name="iot-dc-testconn-subscribe-wild-topic"></a>

Queste procedure dimostrano come il AWS IoT Device Client può sottoscrivere e registrare i messaggi MQTT utilizzando caratteri jolly. Per fare ciò, dovrai:

1. Aggiornate il filtro degli argomenti utilizzato da AWS IoT Device Client per sottoscrivere gli argomenti MQTT.

1. Aggiornare la policy utilizzata dal dispositivo per consentire le nuove sottoscrizioni.

1. Esegui il AWS IoT Device Client e pubblica messaggi dalla console di test MQTT.

**Per creare un file di configurazione per la sottoscrizione a più argomenti di messaggio MQTT utilizzando un filtro argomento MQTT con caratteri jolly**

1. Nella finestra del terminale del computer host locale connesso al Raspberry Pi, apri **\$1/dc-configs/dc-pubsub-custom-config.json** per modificare e localizzare l'oggetto `samples`.

1. Nell'editor di testo, individua l'oggetto `samples` e aggiorna il valore `subscribe-topic` in modo che somigli a questo. 

   ```
     "samples": {
       "pub-sub": {
         "enabled": true,
         "publish-topic": "test/dc/pubtopic",
         "publish-file": "~/messages/sample-ws-message.json",
         "subscribe-topic": "test/dc/#",
         "subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"
   ```

   Il nuovo valore `subscribe-topic` è un [filtro di argomento MQTT](topics.md#topicfilters) con un carattere jolly MQTT alla fine. Descrive una sottoscrizione a tutti gli argomenti MQTT che iniziano con `test/dc/`. Il AWS IoT Device Client scrive i payload dei messaggi che riceve da questo abbonamento nel file indicato in. `subscribe-file`

1. Salva il file di configurazione modificato come **\$1/dc-configs/dc-pubsub-wild-config.json** ed esci dall'editor.

**Per modificare la policy utilizzata da Raspberry Pi per consentire la sottoscrizione e la ricezione di più argomenti di messaggio MQTT**

1. Nella finestra del terminale del computer host locale connesso al tuo Raspberry Pi, nel tuo editor di testo preferito, apri **\$1/policies/pubsub\$1test\$1thing\$1policy.json** per la modifica e quindi individua le istruzioni di policy `iot::Subscribe` e `iot::Receive` nel file.

1. Nell'istruzione di policy `iot::Subscribe`, aggiorna la stringa nell'oggetto Risorsa per sostituire `subtopic` con `*`, in modo tale che l'indirizzo sia simile al seguente.

   ```
       {
         "Effect": "Allow",
         "Action": [
           "iot:Subscribe"
         ],
         "Resource": [
           "arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/*"
         ]
       }
   ```
**Nota**  
I [caratteri jolly del filtro di argomento MQTT](topics.md#topicfilters) sono il `+` (segno più) e il `#` (segno cancelletto). Una richiesta di sottoscrizione con un `#` alla fine sottoscrive tutti gli argomenti che iniziano con la stringa che precede il carattere `#` (ad esempio, `test/dc/` in questo caso).   
Tuttavia, il valore della risorsa nell'istruzione di policy che autorizza questa sottoscrizione deve utilizzare un `*` (un asterisco) al posto di `#` (segno del cancelletto) nel filtro argomento ARN. Questo perché il processore di policy utilizza un carattere jolly diverso da quello utilizzato da MQTT.  
Per ulteriori informazioni sull'utilizzo di caratteri jolly per argomenti e filtri di argomento nelle policy, consulta [Utilizzo di caratteri jolly in MQTT e nelle policy AWS IoT Core](pub-sub-policy.md#pub-sub-policy-cert).

1. Nell'istruzione di policy `iot::Receive`, aggiorna la stringa nell'oggetto Risorsa per sostituire `subtopic` con `*`, in modo tale che l'indirizzo sia simile al seguente.

   ```
       {
         "Effect": "Allow",
         "Action": [
           "iot:Receive"
         ],
         "Resource": [
           "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/*"
         ]
       }
   ```

1. Salva il documento della policy aggiornato con nome **\$1/policies/pubsub\$1wild\$1test\$1thing\$1policy.json** ed esci dall'editor.

1. Inserisci questo comando per aggiornare la policy di questo tutorial per utilizzare le nuove definizioni delle risorse.

   ```
   aws iot create-policy-version \
   --set-as-default \
   --policy-name "PubSubTestThingPolicy" \
   --policy-document "file://~/policies/pubsub_wild_test_thing_policy.json"
   ```

   Se il comando viene eseguito correttamente, verrà visualizzata una risposta simile alla seguente. Nota che `policyVersionId` ora è `2`, indicando che questa è la seconda versione di questa policy. 

   Se hai aggiornato correttamente la policy, puoi passare alla procedura successiva.

   ```
   {
       "policyArn": "arn:aws:iot:us-west-2:57EXAMPLE833:policy/PubSubTestThingPolicy",
       "policyDocument": "{\n  \"Version\": \"2012-10-17\",		 	 	 \n  \"Statement\": [\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"iot:Connect\"\n      ],\n      \"Resource\": [\n        \"arn:aws:iot:us-west-2:57EXAMPLE833:client/PubSubTestThing\"\n      ]\n    },\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"iot:Publish\"\n      ],\n      \"Resource\": [\n        \"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/pubtopic\"\n      ]\n    },\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"iot:Subscribe\"\n      ],\n      \"Resource\": [\n        \"arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/*\"\n      ]\n    },\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"iot:Receive\"\n      ],\n      \"Resource\": [\n        \"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/*\"\n      ]\n    }\n  ]\n}\n",
       "policyVersionId": "2",
       "isDefaultVersion": true
   }
   ```

   Se si verifica un errore che contiene troppe versioni di policy per salvarne una nuova, inserisci questo comando per elencare le versioni attuali della policy. Esamina l'elenco restituito da questo comando per trovare una versione della policy che è possibile eliminare.

   ```
   aws iot list-policy-versions --policy-name "PubSubTestThingPolicy"
   ```

   Inserisci questo comando per eliminare una versione che non serve più. Attenzione: non puoi eliminare la versione di default della policy. La versione della policy di default è quella con un valore `isDefaultVersion` di `true`.

   ```
   aws iot delete-policy-version \
   --policy-name "PubSubTestThingPolicy" \
   --policy-version-id policyId
   ```

   Dopo aver eliminato una versione della policy, riprova questo passaggio.

Con il file di configurazione e la policy aggiornati, sei pronto a dimostrare gli abbonamenti wild card con Device Client. AWS IoT 

**Per dimostrare come AWS IoT Device Client sottoscrive e riceve più argomenti relativi ai messaggi MQTT**

1. Nel **client MQTT di test**, controlla le sottoscrizioni. Se il **client MQTT di test** è sottoscritto al filtro dell'argomento **\$1**, passare alla fase successiva. In caso contrario, in **MQTT test client** (Client MQTT di test), nella scheda **Subscribe to a topic** (Sottoscrivi un argomento), in **Topic filter** (Filtro argomenti) inserisci **\$1** (un cancelletto), quindi scegli **Subscribe** (Sottoscrivi) per sottoscriverlo.

1. Nella finestra del terminale del computer host locale connesso a Raspberry Pi, inserisci questi comandi per avviare AWS IoT Device Client.

   ```
   cd ~/aws-iot-device-client/build
   ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-wild-config.json
   ```

1. Mentre guardate l'output del AWS IoT Device Client nella finestra del terminale sul computer host locale, tornate al client di test **MQTT**. Nella scheda **Publish to a topic (Pubblica in un argomento)**, in **Topic name (Nome argomento)**, inserisci **test/dc/subtopic** e quindi scegli **Publish (Pubblica)**. 

1. Nella finestra del terminale, conferma che il messaggio è stato ricevuto cercando un messaggio come:

   ```
   2021-11-10T16:34:20.101Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 76 bytes
   ```

1. Mentre guardate l'output del AWS IoT Device Client nella finestra del terminale del computer host locale, tornate al client di **test MQTT**. Nella scheda **Publish to a topic (Pubblica in un argomento)**, in **Topic name (Nome argomento)**, inserisci **test/dc/subtopic2** e quindi scegli **Publish (Pubblica)**. 

1. Nella finestra del terminale, conferma che il messaggio è stato ricevuto cercando un messaggio come:

   ```
   2021-11-10T16:34:32.078Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 77 bytes
   ```

1. Dopo aver visualizzato i messaggi che confermano la ricezione di entrambi i messaggi, digitate **^C** (Ctrl-C) per fermare il AWS IoT Device Client.

1. Inserisci questo comando per visualizzare la fine del file di log dei messaggi e visualizzare il messaggio pubblicato dal **client MQTT di test**.

   ```
   tail -n 20 ~/.aws-iot-device-client/log/pubsub_rx_msgs.log
   ```
**Nota**  
Il file di log contiene solo payload del messaggio. Gli argomenti del messaggio non vengono registrati nel file di registro dei messaggi ricevuti.  
Potresti anche vedere il messaggio pubblicato dal AWS IoT Device Client nel registro ricevuto. Questo perché il filtro degli argomenti jolly include l'argomento del messaggio e, a volte, la richiesta di sottoscrizione può essere elaborata dal broker messaggi prima che il messaggio pubblicato venga inviato agli iscritti.

Le voci nel file di registro dimostrano che i messaggi sono stati ricevuti. È possibile ripetere questa procedura utilizzando altri nomi di argomenti. Tutti i messaggi con un nome argomento che iniziano per `test/dc/` devono essere ricevuti e registrati. I messaggi con nomi di argomenti che iniziano con qualsiasi altro testo vengono ignorati.

Dopo aver dimostrato come AWS IoT Device Client può pubblicare e sottoscrivere messaggi MQTT, continua con. [Tutorial: Dimostra le azioni (lavori) remote con il AWS IoT Device Client](iot-dc-runjobs.md)

# Tutorial: Dimostra le azioni (lavori) remote con il AWS IoT Device Client
<a name="iot-dc-runjobs"></a>

In questi tutorial, configurerai e distribuirai i processi sul tuo Raspberry Pi per dimostrare come inviare operazioni remote ai tuoi dispositivi IoT.

**Per iniziare il tutorial:**
+ Fai in modo che il tuo computer host locale sia configurato come nella [sezione precedente](iot-dc-testconn.md). 
+ Se non hai completato il tutorial nella sezione precedente, puoi provare questo tutorial utilizzando il Raspberry Pi con una scheda microSD che contiene l'immagine che hai salvato dopo aver installato AWS IoT il Device Client in. [(Facoltativo) Salvare l'immagine della scheda microSD](iot-dc-install-download.md#iot-dc-install-dc-save)
+ Se hai già eseguito questa demo, prova [Passo 2: Pulizia delle demo Account AWS dopo la creazione con AWS IoT Device Client](iot-dc-cleanup.md#iot-dc-cleanup-cloud) a eliminare tutte le AWS IoT risorse create nelle esecuzioni precedenti per evitare errori di risorse duplicate.

Questo tutorial dura circa 45 minuti.

**Al termine di questo argomento:**
+ Avrai dimostrato diversi modi in cui il tuo dispositivo IoT può utilizzare AWS IoT Core per eseguire operazioni remote gestite da AWS IoT .

**Equipaggiamento necessario:**
+ Il tuo ambiente locale di sviluppo e di test nella [sezione precedente](iot-dc-install-dc.md)
+ Il Raspberry Pi che hai testato in [una sezione precedente](iot-dc-install-dc.md)
+ La scheda di memoria microSD del Raspberry Pi utilizzata nella [sezione precedente](iot-dc-install-dc.md)

**Topics**
+ [Prepara il Raspberry Pi per eseguire i lavori](iot-dc-runjobs-prepare.md)
+ [Crea ed esegui il job AWS IoT con AWS IoT Device Client](iot-dc-runjobs-prepare-define.md)

# Prepara il Raspberry Pi per eseguire i lavori
<a name="iot-dc-runjobs-prepare"></a>

Le procedure in questa sezione descrivono come preparare il Raspberry Pi all'esecuzione dei job utilizzando il AWS IoT Device Client.

**Nota**  
Queste procedure sono specifiche per il dispositivo. Se si desidera eseguire le procedure in questa sezione con più di un dispositivo contemporaneamente, ogni dispositivo avrà bisogno di una propria policy e di un certificato univoco specifico per il dispositivo e il nome dell'oggetto. Per fornire a ciascun dispositivo le sue risorse uniche, eseguire questa procedura una volta per ciascun dispositivo mentre si modificano gli elementi specifici del dispositivo come descritto nelle procedure.

**Topics**
+ [Effettua il provisioning del tuo Raspberry Pi per dimostrare i processi](#iot-dc-runjobs-prepare-provision)
+ [Configura il AWS IoT Device Client per eseguire il jobs agent](#iot-dc-runjobs-prepare-config)

## Effettua il provisioning del tuo Raspberry Pi per dimostrare i processi
<a name="iot-dc-runjobs-prepare-provision"></a>

Le procedure descritte in questa sezione forniscono il tuo Raspberry Pi AWS IoT creando AWS IoT risorse e certificati dei dispositivi relativi al dispositivo. 

**Topics**
+ [Crea e scarica i file dei certificati dei dispositivi per dimostrare AWS IoT i lavori](#iot-dc-runjobs-prepare-cert)
+ [Crea AWS IoT risorse per dimostrare i AWS IoT lavori](#iot-dc-runjobs-prepare-iot)

### Crea e scarica i file dei certificati dei dispositivi per dimostrare AWS IoT i lavori
<a name="iot-dc-runjobs-prepare-cert"></a>

Questa procedura crea i file di certificato del dispositivo per questa demo.

Se si stanno preparando più di un dispositivo, questa procedura deve essere eseguita su ciascun dispositivo.

**Per creare e scaricare i file di certificato del dispositivo per il tuo Raspberry Pi:**

Nella finestra terminale del computer host locale connesso al Raspberry Pi, inserisci questi comandi.

1. Inserisci il seguente comando per creare i file dei certificati del dispositivo per il dispositivo.

   ```
   aws iot create-keys-and-certificate \
   --set-as-active \
   --certificate-pem-outfile "~/certs/jobs/device.pem.crt" \
   --public-key-outfile "~/certs/jobs/public.pem.key" \
   --private-key-outfile "~/certs/jobs/private.pem.key"
   ```

   Questo comando restituisce una risposta simile alla seguente. Salva il `certificateArn` per utilizzarlo in un secondo momento.

   ```
   {
   "certificateArn": "arn:aws:iot:us-west-2:57EXAMPLE833:cert/76e7e4edb3e52f52334be2f387a06145b2aa4c7fcd810f3aea2d92abc227d269",
   "certificateId": "76e7e4edb3e52f5233EXAMPLE7a06145b2aa4c7fcd810f3aea2d92abc227d269",
   "certificatePem": "-----BEGIN CERTIFICATE-----\nMIIDWTCCAkGgAwIBAgI_SHORTENED_FOR_EXAMPLE_Lgn4jfgtS\n-----END CERTIFICATE-----\n",
   "keyPair": {
       "PublicKey": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BA_SHORTENED_FOR_EXAMPLE_ImwIDAQAB\n-----END PUBLIC KEY-----\n",
       "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQE_SHORTENED_FOR_EXAMPLE_T9RoDiukY\n-----END RSA PRIVATE KEY-----\n"
   }
   }
   ```

1. Inserisci i seguenti comandi per impostare le autorizzazioni sulla directory dei certificati e sui relativi file.

   ```
   chmod 700 ~/certs/jobs
   chmod 644 ~/certs/jobs/*
   chmod 600 ~/certs/jobs/private.pem.key
   ```

1. Esegui questo comando per rivedere le autorizzazioni sulle directory e sui file dei certificati.

   ```
   ls -l ~/certs/jobs
   ```

   L'output del comando dovrebbe essere lo stesso di quello che vedi qui, tranne per le date e gli orari del file.

   ```
   -rw-r--r-- 1 pi pi 1220 Oct 28 13:02 device.pem.crt
   -rw------- 1 pi pi 1675 Oct 28 13:02 private.pem.key
   -rw-r--r-- 1 pi pi  451 Oct 28 13:02 public.pem.key
   ```

Dopo aver scaricato i file del certificato del dispositivo sul tuo Raspberry Pi, sei pronto a proseguire con [Effettua il provisioning del tuo Raspberry Pi per dimostrare i processi](#iot-dc-runjobs-prepare-provision).

### Crea AWS IoT risorse per dimostrare i AWS IoT lavori
<a name="iot-dc-runjobs-prepare-iot"></a>

Crea le AWS IoT risorse per questo dispositivo.

Se si stanno preparando più dispositivi, questa procedura deve essere eseguita su ciascun dispositivo.



**Per effettuare il provisioning del dispositivo in AWS IoT:**

Nella finestra terminale del computer host locale connesso al Raspberry Pi:

1. Inserisci il seguente comando per ottenere l'indirizzo dell'endpoint dati del dispositivo per il Account AWS.

   ```
   aws iot describe-endpoint --endpoint-type IoT:Data-ATS
   ```

   Il valore dell'endpoint non è cambiato dall'ultima volta che hai eseguito questo comando. Il comando viene eseguito nuovamente per trovare e incollare facilmente il valore dell'endpoint dei dati nel file di configurazione utilizzato in questo tutorial.

   Il comando **describe-endpoint** restituisce una risposta simile alla seguente. Registra il valore `endpointAddress` per utilizzarlo in seguito.

   ```
   {
   "endpointAddress": "a3qjEXAMPLEffp-ats.iot.us-west-2.amazonaws.com"
   }
   ```

1. Sostituiscilo *uniqueThingName* con un nome univoco per il tuo dispositivo. Se si desidera eseguire questo tutorial con più dispositivi, assegnare a ciascun dispositivo il proprio nome. Ad esempio, **TestDevice01**, **TestDevice02**, e così via.

   Inserisci questo comando per creare una nuova AWS IoT risorsa per il tuo Raspberry Pi.

   ```
   aws iot create-thing --thing-name "uniqueThingName"
   ```

   Poiché una risorsa AWS IoT oggetto è una rappresentazione *virtuale* del tuo dispositivo nel cloud, possiamo creare più risorse di oggetti AWS IoT da utilizzare per scopi diversi. Possono essere utilizzati tutti dallo stesso dispositivo IoT fisico per rappresentare diversi aspetti del dispositivo.
**Nota**  
Se si desidera proteggere la policy per più dispositivi, è possibile utilizzare `${iot:Thing.ThingName}` invece del nome statico dell'oggetto, `uniqueThingName`.

   Questi tutorial utilizzeranno una sola risorsa alla volta per dispositivo. In questo modo, in questi tutorial, rappresentano le diverse demo in modo che, dopo aver creato le AWS IoT risorse per una demo, sia possibile tornare indietro e ripetere le demo utilizzando le risorse create appositamente per ciascuna di esse.

   Se la risorsa AWS IoT oggetto è stata creata, il comando restituisce una risposta come questa. Registra il valore `thingArn` da utilizzare in un secondo momento quando si crea il processo da eseguire su questo dispositivo.

   ```
   {
   "thingName": "uniqueThingName",
   "thingArn": "arn:aws:iot:us-west-2:57EXAMPLE833:thing/uniqueThingName",
   "thingId": "8ea78707-32c3-4f8a-9232-14bEXAMPLEfd"
   }
   ```

1. Nella finestra terminale:

   1. Apri un editor di testo, ad esempio `nano`.

   1. Copia questo documento JSON e incollalo nell'editor di testo aperto.  
****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Connect"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:client/uniqueThingName"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Publish"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:topic/test/dc/pubtopic",
                      "arn:aws:iot:us-west-2:123456789012:topic/$aws/events/job/*",
                      "arn:aws:iot:us-west-2:123456789012:topic/$aws/events/jobExecution/*",
                      "arn:aws:iot:us-west-2:123456789012:topic/$aws/things/uniqueThingName/jobs/*"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Subscribe"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:topicfilter/test/dc/subtopic",
                      "arn:aws:iot:us-west-2:123456789012:topic/$aws/events/jobExecution/*",
                      "arn:aws:iot:us-west-2:123456789012:topicfilter/$aws/things/uniqueThingName/jobs/*"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Receive"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:topic/test/dc/subtopic",
                      "arn:aws:iot:us-west-2:123456789012:topic/$aws/things/uniqueThingName/jobs/*"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:DescribeJobExecution",
                      "iot:GetPendingJobExecutions",
                      "iot:StartNextPendingJobExecution",
                      "iot:UpdateJobExecution"
                  ],
                  "Resource": [
                      "arn:aws:iot:us-west-2:123456789012:topic/$aws/things/uniqueThingName"
                  ]
              }
          ]
      }
      ```

   1. Nell'editor, nella `Resource` sezione di ogni dichiarazione politica, sostituisci *us-west-2:57EXAMPLE833* con i tuoi Regione AWS, un carattere con i due punti (:) e il tuo numero di 12 cifre Account AWS .

   1. Nell'editor, in ogni dichiarazione politica, sostituisci questa risorsa *uniqueThingName* con il nome dell'oggetto che hai assegnato.

   1. Salva il file nell'editor di testo come **\$1/policies/jobs\$1test\$1thing\$1policy.json**.

      Se si esegue questa procedura per più dispositivi, salvare il file con questo nome file su ciascun dispositivo.

1. Sostituisci *uniqueThingName* con il nome dell'oggetto per il dispositivo, quindi esegui questo comando per creare una AWS IoT policy personalizzata per quel dispositivo.

   ```
   aws iot create-policy \
   --policy-name "JobTestPolicyForuniqueThingName" \
   --policy-document "file://~/policies/jobs_test_thing_policy.json"
   ```

   Se la policy viene creata, verrà visualizzata una risposta simile alla seguente.  
****  

   ```
   {
       "policyName": "JobTestPolicyForuniqueThingName",
       "policyArn": "arn:aws:iot:us-west-2:57EXAMPLE833:policy/JobTestPolicyForuniqueThingName",
       "policyDocument": "{\n\"Version\": \"2012-10-17\",\n\"Statement\": [\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"iot:Connect\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-west-2:57EXAMPLE833:client/PubSubTestThing\"\n]\n},\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"iot:Publish\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/pubtopic\"\n]\n},\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"iot:Subscribe\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/subtopic\"\n]\n},\n{\n\"Effect\": \"Allow\",\n\"Action\": [\n\"iot:Receive\"\n],\n\"Resource\": [\n\"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/*\"\n]\n}\n]\n}\n",
       "policyVersionId": "1"
   }
   ```

1. Sostituiscilo *uniqueThingName* con il nome dell'oggetto e `certificateArn` con il `certificateArn` valore salvato in precedenza in questa sezione per questo dispositivo, quindi esegui questo comando per allegare la policy al certificato del dispositivo. 

   ```
   aws iot attach-policy \
   --policy-name "JobTestPolicyForuniqueThingName" \
   --target "certificateArn"
   ```

   In caso di successo, questo comando non restituisce alcun risultato.

1.  Sostituisci *uniqueThingName* con il nome dell'oggetto, sostituiscilo `certificateArn` con il `certificateArn` valore salvato in precedenza in questa sezione e quindi esegui questo comando per allegare il certificato del dispositivo alla risorsa AWS IoT oggetto.

   ```
   aws iot attach-thing-principal \
   --thing-name "uniqueThingName" \
   --principal "certificateArn"
   ```

   In caso di successo, questo comando non restituisce alcun risultato.

Dopo aver eseguito correttamente il provisioning del Raspberry Pi, sei pronto a ripetere questa sezione per un altro Raspberry Pi nel test, oppure, se tutti i dispositivi sono stati sottoposti a provisioning, prosegui con [Configura il AWS IoT Device Client per eseguire il jobs agent](#iot-dc-runjobs-prepare-config).

## Configura il AWS IoT Device Client per eseguire il jobs agent
<a name="iot-dc-runjobs-prepare-config"></a>

Questa procedura crea un file di configurazione per il AWS IoT Device Client per eseguire il jobs agent:.

Se si sta preparando più di un dispositivo, questa procedura deve essere eseguita su ciascun dispositivo.

**Per creare il file di configurazione per testare il AWS IoT Device Client:**

1. Nella finestra terminale del computer host locale connesso al Raspberry Pi:

   1. Apri un editor di testo, ad esempio `nano`.

   1. Copia questo documento JSON e incollalo nell'editor di testo aperto.

      ```
      {
        "endpoint": "a3qEXAMPLEaffp-ats.iot.us-west-2.amazonaws.com",
        "cert": "~/certs/jobs/device.pem.crt",
        "key": "~/certs/jobs/private.pem.key",
        "root-ca": "~/certs/AmazonRootCA1.pem",
        "thing-name": "uniqueThingName",
        "logging": {
          "enable-sdk-logging": true,
          "level": "DEBUG",
          "type": "STDOUT",
          "file": ""
        },
        "jobs": {
          "enabled": true,
          "handler-directory": ""
        },
        "tunneling": {
          "enabled": false
        },
        "device-defender": {
          "enabled": false,
          "interval": 300
        },
        "fleet-provisioning": {
          "enabled": false,
          "template-name": "",
          "template-parameters": "",
          "csr-file": "",
          "device-key": ""
        },
        "samples": {
          "pub-sub": {
            "enabled": false,
            "publish-topic": "",
            "publish-file": "",
            "subscribe-topic": "",
            "subscribe-file": ""
          }
        },
        "config-shadow": {
          "enabled": false
        },
        "sample-shadow": {
          "enabled": false,
          "shadow-name": "",
          "shadow-input-file": "",
          "shadow-output-file": ""
        }
      }
      ```

   1. Sostituisci il *endpoint* valore con il valore dell'endpoint dei dati del dispositivo Account AWS che hai trovato in. [Effettua il provisioning del dispositivo in AWS IoT Core](iot-dc-install-provision.md#iot-dc-install-dc-provision)

   1. Sostituiscilo *uniqueThingName* con il nome dell'oggetto che hai usato per questo dispositivo.

   1. Salva il file nell'editor di testo come **\$1/dc-configs/dc-jobs-config.json**.

1. Esegui questo comando per impostare le autorizzazioni per il file del nuovo file di configurazione.

   ```
   chmod 644 ~/dc-configs/dc-jobs-config.json
   ```

Non utilizzerai il **client MQTT di test** per questo test. Sebbene il dispositivo scambia messaggi MQTT relativi ai lavori con AWS IoT, i messaggi di avanzamento del lavoro vengono scambiati solo con il dispositivo che esegue il processo. Poiché i messaggi sullo stato di avanzamento del lavoro vengono scambiati solo con il dispositivo che esegue il processo, non è possibile abbonarsi ad essi da un altro dispositivo, ad esempio la console. AWS IoT 

Dopo aver salvato il file di configurazione, è possibile proseguire con [Crea ed esegui il job AWS IoT con AWS IoT Device Client](iot-dc-runjobs-prepare-define.md).

# Crea ed esegui il job AWS IoT con AWS IoT Device Client
<a name="iot-dc-runjobs-prepare-define"></a>

Le procedure in questa sezione creano un documento di lavoro e una risorsa AWS IoT lavorativa. Dopo aver creato la risorsa lavorativa, AWS IoT invia il documento del lavoro agli obiettivi di lavoro specificati a cui un agente di lavoro applica il documento di lavoro al dispositivo o al client.

**Topics**
+ [Crea e archivia il documento di lavoro per il lavoro IoT](#iot-dc-runjobs-prepare-define-jobdoc)
+ [Esegui un lavoro AWS IoT per un dispositivo IoT](#iot-dc-runjobs-prepare-define-job)

## Crea e archivia il documento di lavoro per il lavoro IoT
<a name="iot-dc-runjobs-prepare-define-jobdoc"></a>

Questa procedura crea un semplice documento di lavoro da includere in una risorsa AWS IoT lavorativa. Questo documento di processo mostra "Hello world\$1" sul target di processo.

**Per creare e archiviare un documento di processo:**

1. Seleziona il bucket Amazon S3 in cui salvare il documento di processo. Se non disponi di un bucket Amazon S3 esistente da utilizzare per questo, dovrai creane uno. Per informazioni su come creare bucket Amazon S3, consulta gli argomenti in [Nozioni di base su Amazon S3](https://docs.aws.amazon.com//AmazonS3/latest/userguide/GetStartedWithS3.html).

1. Creare e salvare il documento di processo per questo processo

   1. Sul computer host locale, apri un editor di testo.

   1. Copia e incolla questo testo nell'editor.

      ```
      {
          "operation": "echo",
          "args": ["Hello world!"]
      }
      ```

   1. Nel computer host locale, salvare il contenuto dell'editor in un file denominato **hello-world-job.json**.

   1. Conferma che il file sia stato salvato correttamente. Alcuni editor di testo aggiungono automaticamente `.txt` al nome del file quando salva un file di testo. Se il tuo editor ha aggiunto `.txt` al nome del file, correggere il nome del file prima di procedere.

1. Sostituisci il percorso *path\$1to\$1file* con il percorso verso**hello-world-job.json**, se non è nella tua directory corrente, sostituiscilo *s3\$1bucket\$1name* con il percorso del bucket Amazon S3 che hai selezionato, quindi esegui questo comando per inserire il documento di lavoro nel bucket Amazon S3.

   ```
   aws s3api put-object \
   --key hello-world-job.json \
   --body path_to_file/hello-world-job.json --bucket s3_bucket_name
   ```

   L'URL del documento di lavoro che identifica il documento di lavoro archiviato in Amazon S3 viene determinato sostituendo *s3\$1bucket\$1name* l'*AWS\$1region*e nel seguente URL. Registra l'URL risultante da utilizzare in seguito come *job\$1document\$1path*

   ```
   https://s3_bucket_name.s3.AWS_Region.amazonaws.com/hello-world-job.json
   ```
**Nota**  
AWS la sicurezza ti impedisce di aprire questo URL al di fuori del tuo Account AWS, ad esempio utilizzando un browser. Per impostazione predefinita, l'URL viene utilizzato dal motore di AWS IoT job, che ha accesso al file. In un ambiente di produzione, è necessario assicurarsi che i servizi AWS IoT abbiano l'autorizzazione per l'accesso ai documenti di processo archiviati in Amazon S3.

Dopo aver salvato l'URL del documento di processo, prosegui con [Esegui un lavoro AWS IoT per un dispositivo IoT](#iot-dc-runjobs-prepare-define-job).

## Esegui un lavoro AWS IoT per un dispositivo IoT
<a name="iot-dc-runjobs-prepare-define-job"></a>

Le procedure descritte in questa sezione avviano il AWS IoT Device Client sul tuo Raspberry Pi per eseguire il job agent sul dispositivo e attendere l'esecuzione dei job. Crea anche una risorsa di lavoro in AWS IoT, che invierà il lavoro al tuo dispositivo IoT e lo eseguirà sul tuo dispositivo IoT.

**Nota**  
Questa procedura esegue un processo su un solo dispositivo.

**Per avviare l'agente di processi sul tuo Raspberry Pi:**

1. Nella finestra del terminale del computer host locale collegato al Raspberry Pi, esegui questo comando per avviare il AWS IoT Device Client.

   ```
   cd ~/aws-iot-device-client/build
   ./aws-iot-device-client --config-file ~/dc-configs/dc-jobs-config.json
   ```

1. Nella finestra del terminale, verifica che il AWS IoT Device Client e visualizzi questi messaggi

   ```
   2021-11-15T18:45:56.708Z [INFO]  {Main.cpp}: Jobs is enabled
                         .
                         .
                         .
   2021-11-15T18:45:56.708Z [INFO]  {Main.cpp}: Client base has been notified that Jobs has started
   2021-11-15T18:45:56.708Z [INFO]  {JobsFeature.cpp}: Running Jobs!
   2021-11-15T18:45:56.708Z [DEBUG] {JobsFeature.cpp}: Attempting to subscribe to startNextPendingJobExecution accepted and rejected
   2021-11-15T18:45:56.708Z [DEBUG] {JobsFeature.cpp}: Attempting to subscribe to nextJobChanged events
   2021-11-15T18:45:56.708Z [DEBUG] {JobsFeature.cpp}: Attempting to subscribe to updateJobExecutionStatusAccepted for jobId +
   2021-11-15T18:45:56.738Z [DEBUG] {JobsFeature.cpp}: Ack received for SubscribeToUpdateJobExecutionAccepted with code {0}
   2021-11-15T18:45:56.739Z [DEBUG] {JobsFeature.cpp}: Attempting to subscribe to updateJobExecutionStatusRejected for jobId +
   2021-11-15T18:45:56.753Z [DEBUG] {JobsFeature.cpp}: Ack received for SubscribeToNextJobChanged with code {0}
   2021-11-15T18:45:56.760Z [DEBUG] {JobsFeature.cpp}: Ack received for SubscribeToStartNextJobRejected with code {0}
   2021-11-15T18:45:56.776Z [DEBUG] {JobsFeature.cpp}: Ack received for SubscribeToStartNextJobAccepted with code {0}
   2021-11-15T18:45:56.776Z [DEBUG] {JobsFeature.cpp}: Ack received for SubscribeToUpdateJobExecutionRejected with code {0}
   2021-11-15T18:45:56.777Z [DEBUG] {JobsFeature.cpp}: Publishing startNextPendingJobExecutionRequest
   2021-11-15T18:45:56.785Z [DEBUG] {JobsFeature.cpp}: Ack received for StartNextPendingJobPub with code {0}
   2021-11-15T18:45:56.785Z [INFO]  {JobsFeature.cpp}: No pending jobs are scheduled, waiting for the next incoming job
   ```

1. Nella finestra del terminale, dopo aver visualizzato questo messaggio, continua con la procedura successiva e crea la risorsa del processo. Attenzione: potrebbe non essere l'ultima voce dell'elenco.

   ```
   2021-11-15T18:45:56.785Z [INFO]  {JobsFeature.cpp}: No pending jobs are scheduled, waiting for the next incoming job
   ```

**Per creare una risorsa AWS IoT lavorativa**

1. Sul computer host locale:

   1. Sostituisci *job\$1document\$1url* con l'URL del documento di lavoro da[Crea e archivia il documento di lavoro per il lavoro IoT](#iot-dc-runjobs-prepare-define-jobdoc).

   1. Sostituisci *thing\$1arn* con l'ARN della risorsa oggetto che hai creato per il tuo dispositivo, quindi esegui questo comando.

      ```
      aws iot create-job \
      --job-id hello-world-job-1 \
      --document-source "job_document_url" \
      --targets "thing_arn" \
      --target-selection SNAPSHOT
      ```

      Se il comando viene eseguito correttamente, verrà visualizzato un risultato simile a quanto segue.

      ```
      {
        "jobArn": "arn:aws:iot:us-west-2:57EXAMPLE833:job/hello-world-job-1",
        "jobId": "hello-world-job-1"
      }
      ```

1. Nella finestra del terminale, dovresti vedere un output del AWS IoT Device Client in questo modo.

   ```
   2021-11-15T18:02:26.688Z [INFO]  {JobsFeature.cpp}: No pending jobs are scheduled, waiting for the next incoming job
   2021-11-15T18:10:24.890Z [DEBUG] {JobsFeature.cpp}: Job ids differ
   2021-11-15T18:10:24.890Z [INFO]  {JobsFeature.cpp}: Executing job: hello-world-job-1
   2021-11-15T18:10:24.890Z [DEBUG] {JobsFeature.cpp}: Attempting to update job execution status!
   2021-11-15T18:10:24.890Z [DEBUG] {JobsFeature.cpp}: Not including stdout with the status details
   2021-11-15T18:10:24.890Z [DEBUG] {JobsFeature.cpp}: Not including stderr with the status details
   2021-11-15T18:10:24.890Z [DEBUG] {JobsFeature.cpp}: Assuming executable is in PATH
   2021-11-15T18:10:24.890Z [INFO]  {JobsFeature.cpp}: About to execute: echo Hello world!
   2021-11-15T18:10:24.890Z [DEBUG] {Retry.cpp}: Retryable function starting, it will retry until success
   2021-11-15T18:10:24.890Z [DEBUG] {JobsFeature.cpp}: Created EphermalPromise for ClientToken 3TEWba9Xj6 in the updateJobExecution promises map
   2021-11-15T18:10:24.890Z [DEBUG] {JobEngine.cpp}: Child process now running
   2021-11-15T18:10:24.890Z [DEBUG] {JobEngine.cpp}: Child process about to call execvp
   2021-11-15T18:10:24.890Z [DEBUG] {JobEngine.cpp}: Parent process now running, child PID is 16737
   2021-11-15T18:10:24.891Z [DEBUG] {16737}: Hello world!
   2021-11-15T18:10:24.891Z [DEBUG] {JobEngine.cpp}: JobEngine finished waiting for child process, returning 0
   2021-11-15T18:10:24.891Z [INFO]  {JobsFeature.cpp}: Job exited with status: 0
   2021-11-15T18:10:24.891Z [INFO]  {JobsFeature.cpp}: Job executed successfully!
   2021-11-15T18:10:24.891Z [DEBUG] {JobsFeature.cpp}: Attempting to update job execution status!
   2021-11-15T18:10:24.891Z [DEBUG] {JobsFeature.cpp}: Not including stdout with the status details
   2021-11-15T18:10:24.891Z [DEBUG] {JobsFeature.cpp}: Not including stderr with the status details
   2021-11-15T18:10:24.892Z [DEBUG] {Retry.cpp}: Retryable function starting, it will retry until success
   2021-11-15T18:10:24.892Z [DEBUG] {JobsFeature.cpp}: Created EphermalPromise for ClientToken GmQ0HTzWGg in the updateJobExecution promises map
   2021-11-15T18:10:24.905Z [DEBUG] {JobsFeature.cpp}: Ack received for PublishUpdateJobExecutionStatus with code {0}
   2021-11-15T18:10:24.905Z [DEBUG] {JobsFeature.cpp}: Removing ClientToken 3TEWba9Xj6 from the updateJobExecution promises map
   2021-11-15T18:10:24.905Z [DEBUG] {JobsFeature.cpp}: Success response after UpdateJobExecution for job hello-world-job-1
   2021-11-15T18:10:24.917Z [DEBUG] {JobsFeature.cpp}: Ack received for PublishUpdateJobExecutionStatus with code {0}
   2021-11-15T18:10:24.918Z [DEBUG] {JobsFeature.cpp}: Removing ClientToken GmQ0HTzWGg from the updateJobExecution promises map
   2021-11-15T18:10:24.918Z [DEBUG] {JobsFeature.cpp}: Success response after UpdateJobExecution for job hello-world-job-1
   2021-11-15T18:10:25.861Z [INFO]  {JobsFeature.cpp}: No pending jobs are scheduled, waiting for the next incoming job
   ```

1. Mentre il AWS IoT Device Client è in esecuzione e attende un lavoro, è possibile inviare un altro lavoro modificando il `job-id` valore e rieseguendolo **create-job** dal passaggio 1.

Quando hai finito di eseguire i lavori, nella finestra del terminale, inserisci ^C (control-C) per arrestare il AWS IoT Device Client.

# Tutorial: pulizia dopo l'esecuzione dei tutorial AWS IoT Device Client
<a name="iot-dc-cleanup"></a>

Le procedure contenute in questo tutorial ti guidano nella rimozione dei file e delle risorse che hai creato durante il completamento dei tutorial in questo percorso di apprendimento.

**Topics**
+ [Fase 1: Pulizia dei dispositivi dopo aver creato delle demo con Device Client AWS IoT](#iot-dc-cleanup-devices)
+ [Passo 2: Pulizia delle demo Account AWS dopo la creazione con AWS IoT Device Client](#iot-dc-cleanup-cloud)

## Fase 1: Pulizia dei dispositivi dopo aver creato delle demo con Device Client AWS IoT
<a name="iot-dc-cleanup-devices"></a>

Questo tutorial descrive due opzioni su come pulire la scheda microSD dopo aver creato le demo in questo percorso di apprendimento. Scegli l'opzione che fornisce il livello di sicurezza di cui hai bisogno.

Tieni presente che la pulizia della scheda microSD del dispositivo non rimuove le risorse che hai AWS IoT creato. Per ripulire le AWS IoT risorse dopo aver pulito la scheda microSD del dispositivo, è necessario consultare il tutorial su. [Passo 2: Pulizia delle demo Account AWS dopo la creazione con AWS IoT Device Client](#iot-dc-cleanup-cloud)

### Opzione 1: Effettuare la pulizia riscrivendo la scheda microSD
<a name="iot-dc-cleanup-devices-flash"></a>

Il modo più semplice e completo per pulire la scheda microSD dopo aver completato i tutorial in questo percorso di apprendimento è sovrascrivere la scheda microSD con un file immagine salvato, creato durante la preparazione del dispositivo la prima volta.

Questa procedura utilizza il computer host locale per scrivere un'immagine della scheda microSD salvata su una scheda microSD.

**Nota**  
Se il dispositivo non utilizza un supporto di archiviazione rimovibile per il sistema operativo, fai riferimento alla procedura per quel dispositivo.

**Per scrivere una nuova immagine alla scheda microSD**

1. Sul computer host locale, individua l'immagine della scheda microSD salvata che si desidera scrivere sulla scheda microSD. 

1. Inserisci la microSD nel computer host locale.

1. Utilizzando uno strumento di imaging per schede SD, scrivi il file immagine selezionato sulla scheda microSD.

1. Dopo aver scritto l'immagine del sistema operativo Raspberry Pi sulla scheda microSD, espelli la scheda microSD e rimuovila in modo sicuro dal computer host locale.

La tua scheda microSD è pronta per l'uso.

### Opzione 2: Effettuare la pulizia eliminando le directory utente
<a name="iot-dc-cleanup-devices-dirs"></a>

Per pulire la scheda microSD dopo aver completato i tutorial senza riscrivere l'immagine della scheda microSD, è possibile eliminare le directory utente singolarmente. Ciò non è accurato come riscrivere la scheda microSD da un'immagine salvata perché non rimuove i file di sistema che potrebbero essere stati installati.

Se la rimozione delle directory utente è sufficientemente completa per le tue esigenze, puoi seguire questa procedura.

**Eliminare le directory utente di questo percorso di apprendimento dal dispositivo**

1. Esegui questi comandi per eliminare le directory utente, le sottodirectory e tutti i file creati in questo percorso di apprendimento, nella finestra del terminale connesso al dispositivo.
**Nota**  
Dopo l'eliminazione di queste directory e file, non potrai eseguire le demo senza completare nuovamente i tutorial.

   ```
   rm -Rf ~/dc-configs
   rm -Rf ~/policies
   rm -Rf ~/messages
   rm -Rf ~/certs
   rm -Rf ~/.aws-iot-device-client
   ```

1. Eseguire questi comandi per eliminare le directory e i file di origine dell'applicazione, nella finestra terminale connessa al dispositivo.
**Nota**  
Questi comandi non disinstallano alcun programma. Rimuovono solo i file di origine utilizzati per compilarli e installarli. Dopo aver eliminato questi file, il dispositivo AWS CLI e il client del AWS IoT dispositivo potrebbero non funzionare.

   ```
   rm -Rf ~/aws-cli
   rm -Rf ~/aws
   rm -Rf ~/aws-iot-device-client
   ```

## Passo 2: Pulizia delle demo Account AWS dopo la creazione con AWS IoT Device Client
<a name="iot-dc-cleanup-cloud"></a>

Queste procedure consentono di identificare e rimuovere le AWS risorse create durante il completamento dei tutorial di questo percorso di apprendimento.

### Pulisci le risorse AWS IoT
<a name="iot-dc-cleanup-cloud-iot"></a>

Questa procedura consente di identificare e rimuovere le AWS IoT risorse create durante il completamento dei tutorial di questo percorso di apprendimento.


**AWS IoT risorse create in questo percorso di apprendimento**  

| Tutorial | Risorse oggetto | Risorse policy | 
| --- | --- | --- | 
|  [Tutorial: installazione e configurazione del AWS IoT Device Client](iot-dc-install-dc.md)  |  **DevCliTestThing**  | DevCliTestThingPolicy | 
|  [Tutorial: Dimostrare la comunicazione dei messaggi MQTT con il AWS IoT Device Client](iot-dc-testconn.md)  |  **PubSubTestThing**  | PubSubTestThingPolicy | 
|  [Tutorial: Dimostra le azioni (lavori) remote con il AWS IoT Device Client](iot-dc-runjobs.md)  | definito dall'utente (potrebbero essercene più di uno) |  *definito dall'utente* (potrebbero essercene più di uno)  | 

**Per eliminare le AWS IoT risorse, segui questa procedura per ogni risorsa oggetto che hai creato**

1. Sostituisci `thing_name` con il nome della risorsa dell'oggetto che desideri eliminare, quindi esegui questo comando per elencare i certificati attribuiti alla risorsa dell'oggetto, dal computer host locale.

   ```
   aws iot list-thing-principals --thing-name thing_name
   ```

   Questo comando restituisce una risposta come questa che elenca i certificati attribuiti a `thing_name`. Nella maggior parte dei casi, nell'elenco sarà presente un solo certificato.

   ```
   {
       "principals": [
           "arn:aws:iot:us-west-2:57EXAMPLE833:cert/23853eea3cf0edc7f8a69c74abeafa27b2b52823cab5b3e156295e94b26ae8ac"
       ]
   }
   ```

1. Per ogni certificato elencato dal comando precedente:

   1. Sostituisci `certificate_ID` con l'ID del certificato del comando precedente. L'ID certificato è costituito dai caratteri alfanumerici che seguono `cert/` nell'ARN restituito dal comando precedente. Quindi esegui questo comando per disattivare il certificato.

      ```
      aws iot update-certificate --new-status INACTIVE --certificate-id certificate_ID
      ```

      In caso di esito positivo, questo comando non restituisce alcun risultato.

   1. Sostituisci `certificate_ARN` con il certificato ARN dall'elenco dei certificati restituiti in precedenza, quindi esegui questo comando per elencare le policy attribuite a questo certificato.

      ```
      aws iot list-attached-policies --target certificate_ARN
      ```

      Questo comando restituisce una risposta come questa che elenca le policy attribuite al certificato. Nella maggior parte dei casi, ci sarà solo una policy nell'elenco.

      ```
      {
          "policies": [
              {
                  "policyName": "DevCliTestThingPolicy",
                  "policyArn": "arn:aws:iot:us-west-2:57EXAMPLE833:policy/DevCliTestThingPolicy"
              }
          ]
      }
      ```

   1. Per ciascuna policy collegata al certificato:

      1. Sostituisci `policy_name` con il valore `policyName` del comando precedente, sostituisci `certificate_ARN` con l'ARN del certificato, quindi esegui questo comando per disconnettere la policy dal certificato.

         ```
         aws iot detach-policy --policy-name policy_name --target certificate_ARN
         ```

         In caso di esito positivo, questo comando non restituisce alcun risultato.

      1. Sostituisci `policy_name` con il valore `policyName` e quindi esegui questo comando per verificare se la policy è attribuita ad altri certificati.

         ```
         aws iot list-targets-for-policy --policy-name policy_name
         ```

         Se il comando restituisce un elenco vuoto come questo, la policy non è associata a nessun certificato; continuerai a elencare le versioni della policy. Se sono ancora presenti certificati allegati alla policy, continua con la fase **detach-thing-principal**.

         ```
         {
             "targets": []
         }
         ```

      1. Sostituisci `policy_name` con il valore `policyName`, quindi esegui questo comando per verificare la presenza di versioni delle policy. Per eliminare la policy, deve avere una sola versione.

         ```
         aws iot list-policy-versions --policy-name policy_name
         ```

         Se la policy ha una sola versione, come in questo esempio, è possibile passare alla fase **delete-policy** ed eliminare subito la policy.

         ```
         {
             "policyVersions": [
                 {
                     "versionId": "1",
                     "isDefaultVersion": true,
                     "createDate": "2021-11-18T01:02:46.778000+00:00"
                 }
             ]
         }
         ```

         Se la policy ha più di una versione, come in questo esempio, le versioni delle policy con un valore `isDefaultVersion` di `false` devono essere eliminate prima che la policy possa essere eliminata.

         ```
         {
             "policyVersions": [
                 {
                     "versionId": "2",
                     "isDefaultVersion": true,
                     "createDate": "2021-11-18T01:52:04.423000+00:00"
                 },
                 {
                     "versionId": "1",
                     "isDefaultVersion": false,
                     "createDate": "2021-11-18T01:30:18.083000+00:00"
                 }
             ]
         }
         ```

         Se è necessario eliminare una versione della policy, sostituisci `policy_name` con il valore `policyName`, sostituisci `version_ID` con il valore `versionId` del comando precedente, quindi esegui questo comando per eliminare una versione della policy.

         ```
         aws iot delete-policy-version --policy-name policy_name --policy-version-id version_ID
         ```

         In caso di esito positivo, questo comando non restituisce alcun risultato.

         Dopo aver eliminato una versione della policy, ripeti questo passaggio fino a quando la policy non ha una sola versione della policy.

      1. Sostituisci `policy_name` con il valore `policyName` e quindi esegui questo comando per eliminare la policy.

         ```
         aws iot delete-policy --policy-name policy_name
         ```

   1. Sostituisci `thing_name` con il nome dell'oggetto, sostituisci `certificate_ARN` con l'ARN del certificato, quindi esegui questo comando per disconnettere il certificato dalla risorsa dell'oggetto.

      ```
      aws iot detach-thing-principal --thing-name thing_name --principal certificate_ARN
      ```

      In caso di esito positivo, questo comando non restituisce alcun risultato.

   1. Sostituisci `certificate_ID` con l'ID del certificato del comando precedente. L'ID certificato è costituito dai caratteri alfanumerici che seguono `cert/` nell'ARN restituito dal comando precedente. Esegui questo comando per eliminare la risorsa del certificato.

      ```
      aws iot delete-certificate --certificate-id certificate_ID
      ```

      In caso di esito positivo, questo comando non restituisce alcun risultato.

1. Sostituisci `thing_name` con il nome dell'oggetto, quindi esegui questo comando per eliminarlo.

   ```
   aws iot delete-thing --thing-name thing_name
   ```

   In caso di esito positivo, questo comando non restituisce alcun risultato. 

### Pulisci AWS le risorse
<a name="iot-dc-cleanup-cloud-aws"></a>

Questa procedura consente di identificare e rimuovere altre AWS risorse create durante il completamento dei tutorial di questo percorso di apprendimento.


**Altre AWS risorse create in questo percorso di apprendimento**  

| Tutorial | Tipo di risorsa | Nome o ID risorsa | 
| --- | --- | --- | 
|  [Tutorial: Dimostra le azioni (lavori) remote con il AWS IoT Device Client](iot-dc-runjobs.md)  | Oggetto Amazon S3 | hello-world-job.json | 
|  [Tutorial: Dimostra le azioni (lavori) remote con il AWS IoT Device Client](iot-dc-runjobs.md)  |  AWS IoT risorse lavorative  | definito dall'utente | 

**Per eliminare le AWS risorse create in questo percorso di apprendimento**

1. Per eliminare i processi creati in questo percorso di apprendimento

   1. Esegui questo comando per elencare i lavori presenti nel tuo Account AWS.

      ```
      aws iot list-jobs
      ```

      Il comando restituisce un elenco dei AWS IoT lavori presenti nel tuo Account AWS e Regione AWS che assomiglia a questo.

      ```
      {
          "jobs": [
              {
                  "jobArn": "arn:aws:iot:us-west-2:57EXAMPLE833:job/hello-world-job-2",
                  "jobId": "hello-world-job-2",
                  "targetSelection": "SNAPSHOT",
                  "status": "COMPLETED",
                  "createdAt": "2021-11-16T23:40:36.825000+00:00",
                  "lastUpdatedAt": "2021-11-16T23:40:41.375000+00:00",
                  "completedAt": "2021-11-16T23:40:41.375000+00:00"
              },
              {
                  "jobArn": "arn:aws:iot:us-west-2:57EXAMPLE833:job/hello-world-job-1",
                  "jobId": "hello-world-job-1",
                  "targetSelection": "SNAPSHOT",
                  "status": "COMPLETED",
                  "createdAt": "2021-11-16T23:35:26.381000+00:00",
                  "lastUpdatedAt": "2021-11-16T23:35:29.239000+00:00",
                  "completedAt": "2021-11-16T23:35:29.239000+00:00"
              }
          ]
      }
      ```

   1. Per ogni job che riconosci dall'elenco come job creato in questo percorso di apprendimento, sostituiscilo `jobId` con il `jobId` valore del job da eliminare, quindi esegui questo comando per eliminare un AWS IoT job.

      ```
      aws iot delete-job --job-id jobId
      ```

      In caso di esito positivo, il comando non restituisce alcun risultato.

1. Eliminare i documenti di processo archiviati in un bucket Amazon S3 in questo percorso di apprendimento.

   1. Sostituisci `bucket` con il nome del bucket utilizzato, quindi esegui questo comando per elencare gli oggetti nel bucket Amazon S3 utilizzato.

      ```
      aws s3api list-objects --bucket bucket
      ```

      Il comando restituisce un elenco di oggetti Amazon S3 nel bucket simile a questo.

      ```
      {
          "Contents": [
              {
                  "Key": "hello-world-job.json",
                  "LastModified": "2021-11-18T03:02:12+00:00",
                  "ETag": "\"868c8bc3f56b5787964764d4b18ed5ef\"",
                  "Size": 54,
                  "StorageClass": "STANDARD",
                  "Owner": {
                      "DisplayName": "EXAMPLE",
                      "ID": "e9e3d6ec1EXAMPLEf5bfb5e6bd0a2b6ed03884d1ed392a82ad011c144736a4ee"
                  }
              },
              {
                  "Key": "iot_job_firmware_update.json",
                  "LastModified": "2021-04-13T21:57:07+00:00",
                  "ETag": "\"7c68c591949391791ecf625253658c61\"",
                  "Size": 66,
                  "StorageClass": "STANDARD",
                  "Owner": {
                      "DisplayName": "EXAMPLE",
                      "ID": "e9e3d6ec1EXAMPLEf5bfb5e6bd0a2b6ed03884d1ed392a82ad011c144736a4ee"
                  }
              },
              {
                  "Key": "order66.json",
                  "LastModified": "2021-04-13T21:57:07+00:00",
                  "ETag": "\"bca60d5380b88e1a70cc27d321caba72\"",
                  "Size": 29,
                  "StorageClass": "STANDARD",
                  "Owner": {
                      "DisplayName": "EXAMPLE",
                      "ID": "e9e3d6ec1EXAMPLEf5bfb5e6bd0a2b6ed03884d1ed392a82ad011c144736a4ee"
                  }
              }
          ]
      }
      ```

   1. Per ogni processo che riconosci dall'elenco come processo creato in questo percorso di apprendimento, sostituisci `bucket` con il nome del bucket e `key` con il valore chiave dell'oggetto da eliminare, quindi esegui questo comando per eliminare un oggetto Amazon S3.

      ```
       aws s3api delete-object --bucket bucket --key key
      ```

      In caso di esito positivo, il comando non restituisce alcun risultato.

Dopo aver eliminato tutte le AWS risorse e gli oggetti creati durante il completamento di questo percorso di apprendimento, puoi ricominciare da capo e ripetere i tutorial.