

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à.

# Esegui il software AWS IoT Greengrass Core in un contenitore Docker
<a name="run-greengrass-docker"></a>

AWS IoT Greengrass può essere configurato per l'esecuzione in un contenitore Docker. Docker è una piattaforma che fornisce gli strumenti per creare, eseguire, testare e distribuire applicazioni basate su contenitori Linux. Quando esegui un'immagine AWS IoT Greengrass Docker, puoi scegliere se fornire AWS le tue credenziali al contenitore Docker e consentire al programma di installazione del software AWS IoT Greengrass Core di fornire automaticamente le risorse necessarie per il AWS funzionamento di un dispositivo core Greengrass. Se non desideri fornire AWS le credenziali, puoi effettuare manualmente il provisioning AWS delle risorse ed eseguire il software AWS IoT Greengrass Core nel contenitore Docker.

**Topics**
+ [Piattaforme supportate e requisiti](#greengrass-docker-supported-platforms)
+ [Download di software](#greengrass-docker-downloads)
+ [Scegli come effettuare il provisioning delle risorse AWS](#greengrass-docker-resource-provisioning)
+ [Crea l' AWS IoT Greengrass immagine da un Dockerfile](build-greengrass-dockerfile.md)
+ [Esegui AWS IoT Greengrass in Docker con provisioning automatico](run-greengrass-docker-automatic-provisioning.md)
+ [Esegui AWS IoT Greengrass in Docker con provisioning manuale](run-greengrass-docker-manual-provisioning.md)
+ [Risoluzione dei problemi AWS IoT Greengrass in un contenitore Docker](docker-troubleshooting.md)

## Piattaforme supportate e requisiti
<a name="greengrass-docker-supported-platforms"></a>

I computer host devono soddisfare i seguenti requisiti minimi per installare ed eseguire il software AWS IoT Greengrass Core in un contenitore Docker:
+ <a name="docker-host-reqs"></a>Un sistema operativo basato su Linux con una connessione Internet.
+ <a name="docker-engine-reqs"></a>[Docker Engine](https://docs.docker.com/engine/install/) versione 18.09 o successiva.
+ <a name="docker-compose-reqs"></a>(Facoltativo) [Docker Compose](https://docs.docker.com/compose/install/) versione 1.22 o successiva. Docker Compose è necessario solo se si desidera utilizzare la CLI Docker Compose per eseguire le immagini Docker.

Per eseguire i componenti della funzione Lambda all'interno del contenitore Docker, è necessario configurare il contenitore per soddisfare requisiti aggiuntivi. Per ulteriori informazioni, consulta [Requisiti della funzione Lambda](setting-up.md#greengrass-v2-lambda-requirements).

### Esegui i componenti in modalità processo
<a name="docker-container-mode-limitation"></a>

AWS IoT Greengrass non supporta l'esecuzione di funzioni Lambda o componenti AWS forniti in un ambiente di runtime isolato all'interno del AWS IoT Greengrass contenitore Docker. È necessario eseguire questi componenti in modalità processo senza alcun isolamento.

Quando configuri un componente della funzione Lambda, imposta la modalità di isolamento su **Nessun** contenitore. Per ulteriori informazioni, consulta [Esegui AWS Lambda funzioni](run-lambda-functions.md). 

Quando distribuisci uno dei seguenti componenti AWS forniti, aggiorna la configurazione di ogni componente su cui impostare il `containerMode` parametro. `NoContainer` Per ulteriori informazioni sugli aggiornamenti della configurazione, vedere. [Aggiornamento delle configurazioni dei componenti](update-component-configurations.md)
+ [CloudWatch metriche](cloudwatch-metrics-component.md)
+ [Device Defender](device-defender-component.md)
+ [Firehose](kinesis-firehose-component.md)
+ [Adattatore di protocollo Modbus-RTU](modbus-rtu-protocol-adapter-component.md)
+ [Amazon SNS](sns-component.md)

## AWS IoT Greengrass Download del software Docker
<a name="greengrass-docker-downloads"></a>

AWS IoT Greengrass fornisce un Dockerfile per creare un'immagine del contenitore con software AWS IoT Greengrass Core e dipendenze installati su un'immagine base Amazon Linux 2 (x86\$164). Puoi modificare l'immagine di base nel Dockerfile per eseguirla su un'architettura di piattaforma diversa. AWS IoT Greengrass 

Scarica il pacchetto Dockerfile da. [GitHub](https://github.com/aws-greengrass/aws-greengrass-docker)

Il Dockerfile utilizza una versione precedente di Greengrass. È necessario aggiornare il file per utilizzare la versione di Greengrass desiderata. Per informazioni sulla creazione dell'immagine del AWS IoT Greengrass contenitore dal Dockerfile, consulta. [Crea l'immagine del AWS IoT Greengrass contenitore da un Dockerfile](build-greengrass-dockerfile.md)

## Scegli come effettuare il provisioning delle risorse AWS
<a name="greengrass-docker-resource-provisioning"></a>

Quando installi il software AWS IoT Greengrass Core in un contenitore Docker, puoi scegliere se effettuare il provisioning automatico AWS delle risorse necessarie al funzionamento di un dispositivo core Greengrass o utilizzare le risorse che effettui il provisioning manuale.
+ **Provisioning automatico delle risorse**: il programma di installazione esegue il provisioning dell' AWS IoT AWS IoT oggetto, del gruppo di oggetti, del ruolo IAM e dell'alias del AWS IoT ruolo quando si esegue l'immagine del AWS IoT Greengrass contenitore per la prima volta. Il programma di installazione può anche distribuire gli strumenti di sviluppo locali sul dispositivo principale, in modo da poter utilizzare il dispositivo per sviluppare e testare componenti software personalizzati. Per effettuare automaticamente il provisioning di queste risorse, è necessario fornire AWS le credenziali come variabili di ambiente all'immagine Docker.

  Per utilizzare il provisioning automatico, è necessario impostare la variabile di ambiente Docker `PROVISION=true` e montare un file di credenziali per fornire le AWS credenziali al contenitore.
+ Fornitura **manuale delle risorse: se non desideri fornire AWS credenziali al contenitore, puoi effettuare il provisioning** manuale AWS delle risorse prima di eseguire l'immagine del contenitore. AWS IoT Greengrass È necessario creare un file di configurazione per fornire informazioni su queste risorse al programma di installazione del software AWS IoT Greengrass Core all'interno del contenitore Docker.

  Per utilizzare il provisioning manuale, è necessario impostare la variabile di ambiente Docker. `PROVISION=false` Il provisioning manuale è l'opzione predefinita.

Per ulteriori informazioni, consulta [Crea l'immagine del AWS IoT Greengrass contenitore da un Dockerfile](build-greengrass-dockerfile.md).

# Crea l'immagine del AWS IoT Greengrass contenitore da un Dockerfile
<a name="build-greengrass-dockerfile"></a>

AWS fornisce un Dockerfile che puoi scaricare e utilizzare per eseguire AWS IoT Greengrass il software Core in un contenitore Docker. I Dockerfile contengono il codice sorgente per la creazione di immagini dei container. AWS IoT Greengrass 

Prima di creare un'immagine del AWS IoT Greengrass contenitore, devi configurare il tuo Dockerfile per selezionare la versione del software AWS IoT Greengrass Core che desideri installare. Puoi anche configurare le variabili di ambiente per scegliere come fornire le risorse durante l'installazione e personalizzare altre opzioni di installazione. Questa sezione descrive come configurare e creare un'immagine AWS IoT Greengrass Docker da un Dockerfile. 



## Scarica il pacchetto Dockerfile
<a name="download-dockerfile-package"></a>

Puoi scaricare il pacchetto AWS IoT Greengrass Dockerfile da: GitHub

[Repository Docker AWS Greengrass](https://github.com/aws-greengrass/aws-greengrass-docker)

Dopo aver scaricato il pacchetto, estrai il contenuto `download-directory/aws-greengrass-docker-nucleus-version` nella cartella sul tuo computer. Il Dockerfile utilizza una versione precedente di Greengrass. È necessario aggiornare il file per utilizzare la versione di Greengrass desiderata.

## Specificare la versione del software AWS IoT Greengrass Core
<a name="set-dockerfile-build-argument"></a>

Utilizzate il seguente argomento di compilazione nel Dockerfile per specificare la versione del software AWS IoT Greengrass Core che desiderate utilizzare nell'immagine AWS IoT Greengrass Docker. Per impostazione predefinita, il Dockerfile utilizza l'ultima versione del software Core. AWS IoT Greengrass 

`GREENGRASS_RELEASE_VERSION`  
La versione del software AWS IoT Greengrass Core. Per impostazione predefinita, il Dockerfile scarica l'ultima versione disponibile del nucleo Greengrass. Imposta il valore sulla versione del nucleo che desideri scaricare.

## Impostazione delle variabili di ambiente
<a name="set-dockerfile-environment-variables"></a>

Le variabili di ambiente consentono di personalizzare il modo in cui il software AWS IoT Greengrass Core viene installato nel contenitore Docker. Puoi impostare le variabili di ambiente per l'immagine AWS IoT Greengrass Docker in vari modi. 
+ Per utilizzare le stesse variabili di ambiente per creare più immagini, imposta le variabili di ambiente direttamente nel Dockerfile.
+ Se lo usi `docker run` per avviare il contenitore, passa le variabili di ambiente come argomenti nel comando o imposta le variabili di ambiente in un file di variabili di ambiente e poi passa il file come argomento. Per ulteriori informazioni sull'impostazione delle variabili di ambiente in Docker, consulta le [variabili di ambiente](https://docs.docker.com/engine/reference/commandline/run/#env) nella documentazione di Docker.
+ Se lo usi `docker-compose up` per avviare il contenitore, imposta le variabili di ambiente in un file di variabili di ambiente e poi passa il file come argomento. Per ulteriori informazioni sull'impostazione delle variabili di ambiente in Compose, consulta la [documentazione Docker](https://docs.docker.com/compose/environment-variables/).

È possibile configurare le seguenti variabili di ambiente per l'immagine AWS IoT Greengrass Docker.

**Nota**  
Non modificare la `TINI_KILL_PROCESS_GROUP` variabile nel Dockerfile. Questa variabile consente l'inoltro `SIGTERM` a tutti i membri del gruppo PID PIDs in modo che il software AWS IoT Greengrass Core possa spegnersi correttamente quando il contenitore Docker viene arrestato.

`GGC_ROOT_PATH`  
(Facoltativo) Il percorso della cartella all'interno del contenitore da utilizzare come root per AWS IoT Greengrass il software Core.  
Impostazione predefinita: `/greengrass/v2`

`PROVISION`  
(Facoltativo) Determina se il AWS IoT Greengrass Core fornisce AWS le risorse.   
+ Se si specifica`true`, il software AWS IoT Greengrass Core registra l'immagine del contenitore come AWS IoT oggetto e fornisce le AWS risorse richieste dal dispositivo principale Greengrass. Il software AWS IoT Greengrass Core fornisce qualsiasi AWS IoT oggetto, (opzionale) un gruppo di oggetti, un AWS IoT ruolo IAM e un alias di AWS IoT ruolo. Per ulteriori informazioni, consulta [Esegui AWS IoT Greengrass in un contenitore Docker con provisioning automatico delle risorse](run-greengrass-docker-automatic-provisioning.md).
+ Se lo specifichi`false`, devi creare un file di configurazione da fornire al programma di installazione AWS IoT Greengrass Core che specifichi di utilizzare le AWS risorse e i certificati creati manualmente. Per ulteriori informazioni, consulta [Esegui AWS IoT Greengrass in un contenitore Docker con provisioning manuale delle risorse](run-greengrass-docker-manual-provisioning.md).
Default: `false`

`AWS_REGION`  
(Facoltativo) Regione AWS Quello che il software AWS IoT Greengrass Core utilizza per recuperare o creare le risorse richieste. AWS   
Default: `us-east-1`.

`THING_NAME`  
(Facoltativo) Il nome dell' AWS IoT elemento che registri come dispositivo principale. Se l'oggetto con questo nome non esiste nel tuo computer Account AWS, il software AWS IoT Greengrass Core lo crea.   
È necessario specificare se si `PROVISION=true` desidera applicare questo argomento.  
Impostazione predefinita: `GreengrassV2IotThing_` più un UUID casuale.

`THING_GROUP_NAME`  
(Facoltativo) Il nome del gruppo di oggetti a cui aggiungi questo dispositivo principale è AWS IoT Se una distribuzione è destinata a questo gruppo di oggetti, questo e gli altri dispositivi principali di quel gruppo ricevono quella distribuzione quando si connette. AWS IoT AWS IoT Greengrass Se il gruppo di oggetti con questo nome non esiste nel tuo Account AWS, il software AWS IoT Greengrass Core lo crea.  
È necessario specificare `PROVISION=true` di applicare questo argomento.

`TES_ROLE_NAME`  
(Facoltativo) Il nome del ruolo IAM da utilizzare per acquisire AWS credenziali che consentono al dispositivo principale Greengrass di interagire con AWS i servizi. Se il ruolo con questo nome non esiste nel tuo account Account AWS, il software AWS IoT Greengrass Core lo crea con la `GreengrassV2TokenExchangeRoleAccess` policy. Questo ruolo non ha accesso ai tuoi bucket S3 dove ospiti gli artefatti dei componenti. Pertanto, è necessario aggiungere le autorizzazioni ai bucket e agli oggetti S3 degli artefatti quando si crea un componente. Per ulteriori informazioni, consulta [Autorizza i dispositivi principali a interagire con i servizi AWS](device-service-role.md).  
Default: `GreengrassV2TokenExchangeRole`

`TES_ROLE_ALIAS_NAME`  
(Facoltativo) Il nome dell'alias del AWS IoT ruolo che punta al ruolo IAM che fornisce AWS le credenziali per il dispositivo principale Greengrass. Se l'alias del ruolo con questo nome non esiste nel tuo computer Account AWS, il software AWS IoT Greengrass Core lo crea e lo indirizza al ruolo IAM da te specificato.  
Impostazione predefinita: `GreengrassV2TokenExchangeRoleAlias`

`COMPONENT_DEFAULT_USER`  
(Facoltativo) Il nome o l'ID dell'utente e del gruppo di sistema utilizzati dal software AWS IoT Greengrass Core per eseguire i componenti. Specificate l'utente e il gruppo, separati da due punti. Il gruppo è facoltativo. Ad esempio, puoi specificare **ggc\$1user:ggc\$1group** o **ggc\$1user**.  
+ Se esegui come root, per impostazione predefinita sono l'utente e il gruppo definiti dal file di configurazione. Se il file di configurazione non definisce un utente e un gruppo, il valore predefinito è. `ggc_user:ggc_group` Se esistono `ggc_user` o `ggc_group` non esistono, il software li crea.
+ Se si esegue come utente non root, il software AWS IoT Greengrass Core utilizza quell'utente per eseguire i componenti.
+ Se non specificate un gruppo, il software AWS IoT Greengrass Core utilizza il gruppo principale dell'utente del sistema.
Per ulteriori informazioni, consulta [Configurare l'utente che esegue i componenti](configure-greengrass-core-v2.md#configure-component-user).

`DEPLOY_DEV_TOOLS`  
Definisce se scaricare e distribuire il componente [Greengrass CLI](greengrass-cli-component.md) nell'immagine del contenitore. È possibile utilizzare la Greengrass CLI per sviluppare ed eseguire il debug dei componenti localmente.  
 <a name="local-dev-tools-production-environment-warning"></a>Si consiglia di utilizzare questo componente solo in ambienti di sviluppo, non in ambienti di produzione. Questo componente fornisce l'accesso a informazioni e operazioni che in genere non sono necessarie in un ambiente di produzione. Segui il principio del privilegio minimo distribuendo questo componente solo sui dispositivi principali dove ne hai bisogno. 
Impostazione predefinita: `false`

`INIT_CONFIG`  
(Facoltativo) Il percorso del file di configurazione da utilizzare per installare il software AWS IoT Greengrass Core. È possibile utilizzare questa opzione per configurare nuovi dispositivi core Greengrass con una configurazione del nucleo specifica o per specificare risorse assegnate manualmente, ad esempio. È necessario montare il file di configurazione nel percorso specificato in questo argomento. 

`TRUSTED_PLUGIN`  
Questa funzionalità è disponibile per la versione 2.4.0 e successive del componente [Greengrass](greengrass-nucleus-component.md) nucleus.  
(Facoltativo) Il percorso di un file JAR da caricare come plugin affidabile. Utilizzate questa opzione per fornire i file JAR del plug-in di provisioning, ad esempio da installare con [fleet provisioning o [custom](custom-provisioning.md) provisioning](fleet-provisioning.md). 

`THING_POLICY_NAME`  
Questa funzionalità è disponibile per la versione 2.4.0 e successive del componente [Greengrass](greengrass-nucleus-component.md) nucleus.  
(Facoltativo) Il nome della AWS IoT policy da allegare al thing certificate di questo dispositivo principale. AWS IoT Se la AWS IoT politica con questo nome non esiste nel tuo computer, Account AWS il software AWS IoT Greengrass Core la crea.   
È necessario specificare `PROVISION=true` se applicare questo argomento.  
Il software AWS IoT Greengrass Core crea una AWS IoT politica permissiva per impostazione predefinita. È possibile definire l'ambito di questa politica o creare una politica personalizzata in cui limitare le autorizzazioni per il proprio caso d'uso. Per ulteriori informazioni, consulta [AWS IoT Politica minima per i dispositivi AWS IoT Greengrass V2 principali](device-auth.md#greengrass-core-minimal-iot-policy). 

## Specificate le dipendenze da installare
<a name="dockerfile-run-instruction"></a>

L'istruzione RUN nel AWS IoT Greengrass Dockerfile prepara l'ambiente contenitore per eseguire il programma di installazione del AWS IoT Greengrass software Core. È possibile personalizzare le dipendenze installate prima dell'esecuzione del programma di installazione del software AWS IoT Greengrass Core nel contenitore Docker. 

## Costruisci l'immagine AWS IoT Greengrass
<a name="build-greengrass-docker-image"></a>

Usa il AWS IoT Greengrass Dockerfile per creare un'immagine del AWS IoT Greengrass contenitore. Puoi utilizzare la CLI Docker o la CLI Docker Compose per creare l'immagine e avviare il contenitore. Puoi anche utilizzare la CLI Docker per creare l'immagine e quindi utilizzare Docker Compose per avviare il contenitore da quell'immagine.

------
#### [ Docker ]

1. Sulla macchina host, esegui il seguente comando per passare alla directory che contiene il Dockerfile configurato.

   ```
   cd download-directory/aws-greengrass-docker-nucleus-version
   ```

1. Esegui il comando seguente per creare l'immagine del AWS IoT Greengrass contenitore dal Dockerfile.

   ```
   sudo docker build -t "platform/aws-iot-greengrass:nucleus-version" ./
   ```

------
#### [ Docker Compose ]

1. Sul computer host, esegui il comando seguente per passare alla directory che contiene il Dockerfile e il file Compose.

   ```
   cd download-directory/aws-greengrass-docker-nucleus-version
   ```

1. Esegui il comando seguente per utilizzare il file Compose per creare l'immagine del contenitore. AWS IoT Greengrass 

   ```
   docker-compose -f docker-compose.yml build
   ```

------

L'immagine del AWS IoT Greengrass contenitore è stata creata con successo. Nell'immagine Docker è installato il software AWS IoT Greengrass Core. Ora puoi eseguire il software AWS IoT Greengrass Core in un contenitore Docker.

# Esegui AWS IoT Greengrass in un contenitore Docker con provisioning automatico delle risorse
<a name="run-greengrass-docker-automatic-provisioning"></a>

Questo tutorial mostra come installare ed eseguire il software AWS IoT Greengrass Core in un contenitore Docker con AWS risorse assegnate automaticamente e strumenti di sviluppo locali. Puoi utilizzare questo ambiente di sviluppo per esplorare le AWS IoT Greengrass funzionalità di un contenitore Docker. Il software richiede AWS credenziali per fornire queste risorse e distribuire gli strumenti di sviluppo locali.

Se non è possibile fornire AWS le credenziali al contenitore, è possibile fornire le AWS risorse necessarie al funzionamento del dispositivo principale. Puoi anche distribuire gli strumenti di sviluppo su un dispositivo principale da utilizzare come dispositivo di sviluppo. Ciò consente di fornire meno autorizzazioni al dispositivo quando si esegue il contenitore. Per ulteriori informazioni, consulta [Esegui AWS IoT Greengrass in un contenitore Docker con provisioning manuale delle risorse](run-greengrass-docker-manual-provisioning.md).



## Prerequisiti
<a name="docker-automatic-provisioning-prereqs"></a>

Per completare questo tutorial, è necessario quanto segue.
+ Un Account AWS. Se non lo hai, consultare [Configura un Account AWS](setting-up.md#set-up-aws-account). 
+ Un utente AWS IAM con le autorizzazioni per effettuare il provisioning delle risorse AWS IoT e IAM per un dispositivo core Greengrass. Il programma di installazione del software AWS IoT Greengrass Core utilizza AWS le tue credenziali per effettuare automaticamente il provisioning di queste risorse. Per informazioni sulla politica minima di IAM per il provisioning automatico delle risorse, consulta. [Policy IAM minima per l'installatore per il provisioning delle risorse](provision-minimal-iam-policy.md)
+ Un'immagine AWS IoT Greengrass Docker. Puoi [creare un'immagine dal AWS IoT Greengrass Dockerfile](build-greengrass-dockerfile.md).
+ Il computer host su cui si esegue il contenitore Docker deve soddisfare i seguenti requisiti:
  + <a name="docker-host-reqs"></a>Un sistema operativo basato su Linux con una connessione Internet.
  + <a name="docker-engine-reqs"></a>[Docker Engine](https://docs.docker.com/engine/install/) versione 18.09 o successiva.
  + <a name="docker-compose-reqs"></a>(Facoltativo) [Docker Compose](https://docs.docker.com/compose/install/) versione 1.22 o successiva. Docker Compose è necessario solo se si desidera utilizzare la CLI Docker Compose per eseguire le immagini Docker.

## AWS Configura le tue credenziali
<a name="configure-aws-credentials-for-docker"></a>

In questo passaggio, crei un file di credenziali sul computer host che contiene le tue credenziali AWS di sicurezza. Quando esegui l'immagine AWS IoT Greengrass Docker, devi montare la cartella che contiene questo file di credenziali `/root/.aws/` nel contenitore Docker. Il AWS IoT Greengrass programma di installazione utilizza queste credenziali per fornire risorse nel tuo. Account AWS Per informazioni sulla politica IAM minima richiesta dal programma di installazione per il provisioning automatico delle risorse, consulta. [Policy IAM minima per l'installatore per il provisioning delle risorse](provision-minimal-iam-policy.md)

1. Recuperate uno dei seguenti elementi.
   + Credenziali a lungo termine per un utente IAM. *Per informazioni su come recuperare le credenziali a lungo termine, consulta [Managing access keys for IAM users nella IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html) User Guide.*
   + (Consigliato) Credenziali temporanee per un ruolo IAM. *Per informazioni su come recuperare le credenziali temporanee, consulta [Using temporary security credentials with the AWS CLI](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html#using-temp-creds-sdk-cli) nella IAM User Guide.*

1. Crea una cartella in cui inserire il file delle credenziali.

   ```
   mkdir ./greengrass-v2-credentials
   ```

1. Utilizzate un editor di testo per creare un file di configurazione denominato `credentials` nella `./greengrass-v2-credentials` cartella.

   Ad esempio, è possibile eseguire il comando seguente per utilizzare GNU nano per creare il `credentials` file. 

   ```
   nano ./greengrass-v2-credentials/credentials
   ```

1. Aggiungi AWS le tue credenziali al `credentials` file nel seguente formato.

   ```
   [default]
   aws_access_key_id = AKIAIOSFODNN7EXAMPLE
   aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
   aws_session_token = AQoEXAMPLEH4aoAH0gNCAPy...truncated...zrkuWJOgQs8IZZaIv2BXIa2R4Olgk
   ```

   Includi `aws_session_token` solo per le credenziali temporanee.

**Importante**  
Rimuovi il file delle credenziali dal computer host dopo aver avviato il AWS IoT Greengrass contenitore. Se non rimuovi il file delle credenziali, le tue AWS credenziali rimarranno montate all'interno del contenitore. Per ulteriori informazioni, consulta [Esegui il software AWS IoT Greengrass Core in un contenitore](#run-greengrass-image-automatic-provisioning).

## Crea un file di ambiente
<a name="create-env-file-automatic-provisioning"></a>

Questo tutorial utilizza un file di ambiente per impostare le variabili di ambiente che verranno passate al programma di installazione del software AWS IoT Greengrass Core all'interno del contenitore Docker. Puoi anche usare [l'`--env`argomento `-e` or](https://docs.docker.com/engine/reference/commandline/run/#env) nel `docker run` comando per impostare le variabili di ambiente nel contenitore Docker oppure puoi impostare le variabili in [un `environment` blocco](https://docs.docker.com/compose/compose-file/compose-file-v3/#environment) del file. `docker-compose.yml`

1. Usa un editor di testo per creare un file di ambiente denominato`.env`.

   Ad esempio, su un sistema basato su Linux, puoi eseguire il seguente comando per usare GNU nano per crearlo `.env` nella directory corrente.

   ```
   nano .env
   ```

1. Copiate il seguente contenuto nel file.

   ```
   GGC_ROOT_PATH=/greengrass/v2
   AWS_REGION=region
   PROVISION=true
   THING_NAME=MyGreengrassCore
   THING_GROUP_NAME=MyGreengrassCoreGroup
   TES_ROLE_NAME=GreengrassV2TokenExchangeRole
   TES_ROLE_ALIAS_NAME=GreengrassCoreTokenExchangeRoleAlias
   COMPONENT_DEFAULT_USER=ggc_user:ggc_group
   ```

   Quindi, sostituisci i seguenti valori.
   + `/greengrass/v2`. La cartella principale di Greengrass che si desidera utilizzare per l'installazione. Utilizzate la variabile di `GGC_ROOT` ambiente per impostare questo valore.
   + *region*. Il Regione AWS luogo in cui hai creato le risorse.
   + *MyGreengrassCore*. Il nome della AWS IoT cosa. Se l'oggetto non esiste, il programma di installazione lo crea. Il programma di installazione scarica i certificati per autenticarsi come oggetto. AWS IoT 
   + *MyGreengrassCoreGroup*. Il nome del gruppo di AWS IoT cose. Se il gruppo di oggetti non esiste, il programma di installazione lo crea e vi aggiunge l'oggetto. Se il gruppo di oggetti esiste e dispone di una distribuzione attiva, il dispositivo principale scarica ed esegue il software specificato dalla distribuzione.
   +  *GreengrassV2TokenExchangeRole*. Sostituisci con il nome del ruolo di scambio di token IAM che consente al dispositivo principale Greengrass di ottenere credenziali temporanee AWS . Se il ruolo non esiste, l'installatore lo crea e crea e allega una policy denominata Access. *GreengrassV2TokenExchangeRole* Per ulteriori informazioni, consulta [Autorizza i dispositivi principali a interagire con i servizi AWS](device-service-role.md).
   + *GreengrassCoreTokenExchangeRoleAlias*. L'alias del ruolo di scambio di token. Se l'alias del ruolo non esiste, il programma di installazione lo crea e lo indirizza al ruolo di scambio di token IAM specificato. Per ulteriori informazioni, consultare la pagina 
**Nota**  <a name="docker-local-dev-tools-production-environment-warning"></a>
È possibile impostare la variabile di `DEPLOY_DEV_TOOLS` ambiente su `true` per distribuire il componente [Greengrass CLI](greengrass-cli-component.md), che consente di sviluppare componenti personalizzati all'interno del contenitore Docker. <a name="local-dev-tools-production-environment-warning"></a>Si consiglia di utilizzare questo componente solo in ambienti di sviluppo, non in ambienti di produzione. Questo componente fornisce l'accesso a informazioni e operazioni che in genere non sono necessarie in un ambiente di produzione. Segui il principio del privilegio minimo distribuendo questo componente solo sui dispositivi principali dove ne hai bisogno. 

## Esegui il software AWS IoT Greengrass Core in un contenitore
<a name="run-greengrass-image-automatic-provisioning"></a>

Questo tutorial mostra come avviare l'immagine Docker che hai creato in un contenitore Docker. Puoi utilizzare la CLI Docker o la CLI Docker Compose per AWS IoT Greengrass eseguire l'immagine del software Core in un contenitore Docker. 

------
#### [ Docker ]

1. Esegui il comando seguente per avviare il contenitore Docker. 

   ```
   docker run --rm --init -it --name docker-image \
    -v path/to/greengrass-v2-credentials:/root/.aws/:ro \
    --env-file .env \
    -p 8883 \
    your-container-image:version
   ```

   Questo comando di esempio utilizza i seguenti argomenti per [docker run](https://docs.docker.com/engine/reference/commandline/run/):
   + <a name="docker-run-rm"></a>[https://docs.docker.com/engine/reference/run/#clean-up---rm](https://docs.docker.com/engine/reference/run/#clean-up---rm). Pulisce il contenitore quando esce.
   + <a name="docker-run-init"></a>[https://docs.docker.com/engine/reference/run/#specify-an-init-process](https://docs.docker.com/engine/reference/run/#specify-an-init-process). Utilizza un processo di inizializzazione nel contenitore. 
**Nota**  
L'`--init`argomento è necessario per chiudere il software AWS IoT Greengrass Core quando si arresta il contenitore Docker.
   + <a name="docker-run-it"></a>[https://docs.docker.com/engine/reference/run/#foreground](https://docs.docker.com/engine/reference/run/#foreground). (Facoltativo) Esegue il contenitore Docker in primo piano come processo interattivo. Puoi sostituirlo con l'`-d`argomento per eseguire invece il contenitore Docker in modalità distaccata. Per ulteriori informazioni, consulta [Detached vs foreground](https://docs.docker.com/engine/reference/run/#detached-vs-foreground) nella documentazione Docker.
   + <a name="docker-run-name"></a>[https://docs.docker.com/engine/reference/run/#name---name](https://docs.docker.com/engine/reference/run/#name---name). Esegue un contenitore denominato `aws-iot-greengrass` 
   + <a name="docker-run-v"></a>[https://docs.docker.com/storage/volumes/](https://docs.docker.com/storage/volumes/). Monta un volume nel contenitore Docker per rendere il file di configurazione e i file di certificato disponibili per l' AWS IoT Greengrass esecuzione all'interno del contenitore.
   + <a name="docker-run-env-file"></a>[https://docs.docker.com/engine/reference/commandline/run/#env](https://docs.docker.com/engine/reference/commandline/run/#env). (Facoltativo) Specifica il file di ambiente per impostare le variabili di ambiente che verranno passate al programma di installazione del software AWS IoT Greengrass Core all'interno del contenitore Docker. Questo argomento è richiesto solo se è stato creato un [file di ambiente per impostare le variabili](run-greengrass-docker-manual-provisioning.md#create-env-file-manual-provisioning) di ambiente. Se non hai creato un file di ambiente, puoi utilizzare `--env` gli argomenti per impostare le variabili di ambiente direttamente nel comando Docker run.
   + <a name="docker-run-p"></a>[https://docs.docker.com/engine/reference/commandline/run/#publish](https://docs.docker.com/engine/reference/commandline/run/#publish). (Facoltativo) Pubblica la porta container 8883 sulla macchina host. Questo argomento è necessario se si desidera connettersi e comunicare tramite MQTT perché AWS IoT Greengrass utilizza la porta 8883 per il traffico MQTT. Per aprire altre porte, utilizzate argomenti aggiuntivi. `-p`
**Nota**  <a name="docker-run-cap-drop"></a>
Per eseguire il contenitore Docker con maggiore sicurezza, puoi utilizzare gli `--cap-add` argomenti `--cap-drop` e per abilitare selettivamente le funzionalità Linux per il tuo contenitore. Per ulteriori informazioni, consulta [Privilegi di runtime e funzionalità Linux nella documentazione](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) Docker.

1. <a name="docker-automatic-provisioning-remove-credentials-file"></a>Rimuovi le credenziali dal dispositivo `./greengrass-v2-credentials` host.

   ```
   rm -rf ./greengrass-v2-credentials
   ```
**Importante**  
Stai rimuovendo queste credenziali perché forniscono ampie autorizzazioni di cui il dispositivo principale ha bisogno solo durante la configurazione. Se non rimuovi queste credenziali, i componenti Greengrass e gli altri processi in esecuzione nel contenitore possono accedervi. Se devi fornire AWS le credenziali a un componente Greengrass, utilizza il servizio di scambio di token. Per ulteriori informazioni, consulta [Interagisci con AWS i servizi](interact-with-aws-services.md).

------
#### [ Docker Compose ]

1. Usa un editor di testo per creare un file Docker Compose denominato. `docker-compose.yml`

   Ad esempio, su un sistema basato su Linux, puoi eseguire il seguente comando per usare GNU nano per crearlo nella directory corrente. `docker-compose.yml`

   ```
   nano docker-compose.yml
   ```
**Nota**  
È inoltre possibile scaricare e utilizzare la versione più recente del file Compose fornito AWS da. [GitHub](https://github.com/aws-greengrass/aws-greengrass-docker/releases/)

1. Aggiungi il seguente contenuto al file Compose. Il file si presenta in maniera simile al seguente frammento: *docker-image*Sostituiscilo con il nome della tua immagine Docker. 

   ```
   version: '3.7'
    
   services:
     greengrass:
       init: true
       container_name: aws-iot-greengrass
       image: docker-image
       volumes:
         - ./greengrass-v2-credentials:/root/.aws/:ro 
       env_file: .env
       ports:
         - "8883:8883"
   ```<a name="docker-compose-optional-params"></a>

   I seguenti parametri in questo file Compose di esempio sono facoltativi:
   + `ports`—Pubblica le porte del contenitore 8883 sul computer host. Questo parametro è necessario se si desidera connettersi e comunicare tramite MQTT perché AWS IoT Greengrass utilizza la porta 8883 per il traffico MQTT. 
   + `env_file`: specifica il file di ambiente per impostare le variabili di ambiente che verranno passate al programma di installazione del software AWS IoT Greengrass Core all'interno del contenitore Docker. Questo parametro è richiesto solo se è stato creato un [file di ambiente per impostare le variabili di ambiente](run-greengrass-docker-manual-provisioning.md#create-env-file-manual-provisioning). Se non avete creato un file di ambiente, potete utilizzare il parametro [environment](https://docs.docker.com/compose/compose-file/compose-file-v3/#environment) per impostare le variabili direttamente nel file Compose.
**Nota**  <a name="docker-compose-cap-drop"></a>
Per eseguire il contenitore Docker con maggiore sicurezza, puoi utilizzare `cap_drop` e `cap_add` nel tuo file Compose per abilitare selettivamente le funzionalità Linux per il tuo contenitore. Per ulteriori informazioni, consulta [Privilegi di runtime e funzionalità Linux](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) nella documentazione Docker.

1. Esegui il comando seguente per avviare il contenitore Docker.

   ```
   docker-compose -f docker-compose.yml up
   ```

1. <a name="docker-automatic-provisioning-remove-credentials-file"></a>Rimuovi le credenziali dal `./greengrass-v2-credentials` dispositivo host.

   ```
   rm -rf ./greengrass-v2-credentials
   ```
**Importante**  
Stai rimuovendo queste credenziali perché forniscono ampie autorizzazioni di cui il dispositivo principale ha bisogno solo durante la configurazione. Se non rimuovi queste credenziali, i componenti Greengrass e gli altri processi in esecuzione nel contenitore possono accedervi. Se devi fornire AWS le credenziali a un componente Greengrass, utilizza il servizio di scambio di token. Per ulteriori informazioni, consulta [Interagisci con AWS i servizi](interact-with-aws-services.md).

------

## Fasi successive
<a name="run-greengrass-docker-next-steps"></a>

<a name="run-greengrass-docker-success"></a>AWS IoT Greengrass Il software principale è ora in esecuzione in un contenitore Docker. Esegui il comando seguente per recuperare l'ID del contenitore attualmente in esecuzione.

```
docker ps
```

È quindi possibile eseguire il comando seguente per accedere al contenitore ed esplorare il software AWS IoT Greengrass Core in esecuzione all'interno del contenitore.

```
docker exec -it container-id /bin/bash
```

Per informazioni sulla creazione di un componente semplice, consulta [Fase 4: Sviluppa e testa un componente sul tuo dispositivo](create-first-component.md) in [Tutorial: Guida introduttiva a AWS IoT Greengrass V2](getting-started.md)

**Nota**  <a name="run-greengrass-commands-in-docker-note"></a>
Quando esegui comandi all'interno del contenitore Docker, tali comandi non vengono registrati nei log Docker. `docker exec` Per registrare i comandi nei log Docker, collega una shell interattiva al contenitore Docker. Per ulteriori informazioni, consulta [Collega una shell interattiva al contenitore Docker](docker-troubleshooting.md#debugging-docker-attach-shell).

Il file di registro AWS IoT Greengrass Core viene chiamato `greengrass.log` e si trova in. `/greengrass/v2/logs` Nella stessa directory si trovano anche i file di registro dei componenti. Per copiare i log di Greengrass in una directory temporanea sull'host, esegui il seguente comando:

```
docker cp container-id:/greengrass/v2/logs /tmp/logs
```

Se desideri mantenere i log dopo l'uscita o la rimozione di un contenitore, ti consigliamo di collegare solo la `/greengrass/v2/logs` directory alla directory dei log temporanei sull'host invece di montare l'intera directory Greengrass. Per ulteriori informazioni, consulta [Mantieni i log Greengrass all'esterno del contenitore Docker](docker-troubleshooting.md#debugging-docker-persist-logs).

<a name="greengrass-docker-stop"></a>Per fermare un contenitore Docker in esecuzione, esegui o. AWS IoT Greengrass `docker stop` `docker-compose -f docker-compose.yml stop` Questa azione invia `SIGTERM` al processo Greengrass e chiude tutti i processi associati che sono stati avviati nel contenitore. Il contenitore Docker viene inizializzato con l'`docker-init`eseguibile come processo PID 1, il che aiuta a rimuovere eventuali processi zombie rimanenti. Per ulteriori informazioni, consulta [Specificare un processo di inizializzazione nella documentazione di Docker](https://docs.docker.com/engine/reference/run/#specify-an-init-process).

<a name="see-docker-troubleshooting"></a>Per informazioni sulla risoluzione dei problemi relativi all'esecuzione AWS IoT Greengrass in un contenitore Docker, consulta. [Risoluzione dei problemi AWS IoT Greengrass in un contenitore Docker](docker-troubleshooting.md)

# Esegui AWS IoT Greengrass in un contenitore Docker con provisioning manuale delle risorse
<a name="run-greengrass-docker-manual-provisioning"></a>

Questo tutorial mostra come installare ed eseguire il software AWS IoT Greengrass Core in un contenitore Docker con risorse assegnate manualmente. AWS 

**Topics**
+ [Prerequisiti](#docker-manual-provisioning-prereqs)
+ [AWS IoT Recupera gli endpoint](#retrieve-iot-endpoints)
+ [Crea qualsiasi cosa AWS IoT](#create-iot-thing)
+ [Crea il certificato dell'oggetto](#create-thing-certificate-mp)
+ [Crea un ruolo di scambio di token](#create-token-exchange-role)
+ [Scarica i certificati sul dispositivo](#download-thing-certificates)
+ [Crea un file di configurazione](#create-docker-install-configuration-file)
+ [Crea un file di ambiente](#create-env-file-manual-provisioning)
+ [Esegui il software AWS IoT Greengrass Core in un contenitore](#run-greengrass-image-manual-provisioning)
+ [Fasi successive](#run-greengrass-docker-next-steps)

## Prerequisiti
<a name="docker-manual-provisioning-prereqs"></a>

Per completare questo tutorial, è necessario quanto segue:
+ Un. Account AWS Se non lo hai, consultare [Configura un Account AWS](setting-up.md#set-up-aws-account). 
+ Un'immagine AWS IoT Greengrass Docker. Puoi [creare un'immagine dal AWS IoT Greengrass Dockerfile](build-greengrass-dockerfile.md).
+ Il computer host su cui si esegue il contenitore Docker deve soddisfare i seguenti requisiti:
  + <a name="docker-host-reqs"></a>Un sistema operativo basato su Linux con una connessione Internet.
  + <a name="docker-engine-reqs"></a>[Docker Engine](https://docs.docker.com/engine/install/) versione 18.09 o successiva.
  + <a name="docker-compose-reqs"></a>(Facoltativo) [Docker Compose](https://docs.docker.com/compose/install/) versione 1.22 o successiva. Docker Compose è necessario solo se si desidera utilizzare la CLI Docker Compose per eseguire le immagini Docker.

## AWS IoT Recupera gli endpoint
<a name="retrieve-iot-endpoints"></a>

Ottieni gli AWS IoT endpoint per te e salvali per Account AWS utilizzarli in un secondo momento. Il tuo dispositivo utilizza questi endpoint per connettersi a. AWS IoT Esegui questa operazione:

1. Ottieni l'endpoint di AWS IoT dati per il tuo. Account AWS

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

   La risposta è simile all'esempio seguente, se la richiesta ha esito positivo.

   ```
   {
     "endpointAddress": "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
   }
   ```

1. Ottieni l'endpoint delle AWS IoT credenziali per il tuo. Account AWS

   ```
   aws iot describe-endpoint --endpoint-type iot:CredentialProvider
   ```

   La risposta è simile all'esempio seguente, se la richiesta ha esito positivo.

   ```
   {
     "endpointAddress": "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
   }
   ```

## Crea qualsiasi cosa AWS IoT
<a name="create-iot-thing"></a>

AWS IoT *le cose* rappresentano dispositivi ed entità logiche a cui si connettono AWS IoT. I dispositivi core Greengrass sono AWS IoT cose. Quando registri un dispositivo come AWS IoT oggetto, quel dispositivo può utilizzare un certificato digitale con cui autenticarsi. AWS

In questa sezione, crei AWS IoT qualcosa che rappresenta il tuo dispositivo.

**Per creare qualsiasi AWS IoT cosa**

1. Crea AWS IoT qualcosa per il tuo dispositivo. Sul tuo computer di sviluppo, esegui il seguente comando.
   + Sostituisci *MyGreengrassCore* con il nome dell'oggetto da usare. Questo nome è anche il nome del dispositivo principale Greengrass.
**Nota**  <a name="install-argument-thing-name-constraint"></a>
Il nome dell'oggetto non può contenere i due punti (`:`).

   ```
   aws iot create-thing --thing-name MyGreengrassCore
   ```

   La risposta è simile all'esempio seguente, se la richiesta ha esito positivo.

   ```
   {
     "thingName": "MyGreengrassCore",
     "thingArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore",
     "thingId": "8cb4b6cd-268e-495d-b5b9-1713d71dbf42"
   }
   ```

1. (Facoltativo) Aggiungere l' AWS IoT oggetto a un gruppo di oggetti nuovo o esistente. Utilizzi i gruppi di cose per gestire flotte di dispositivi core Greengrass. Quando distribuisci componenti software sui tuoi dispositivi, puoi scegliere come target singoli dispositivi o gruppi di dispositivi. È possibile aggiungere un dispositivo a un gruppo di cose con una distribuzione Greengrass attiva per distribuire i componenti software di quel gruppo di cose sul dispositivo. Esegui questa operazione:

   1. (Facoltativo) Crea un gruppo di AWS IoT cose.
      + Sostituirlo *MyGreengrassCoreGroup* con il nome del gruppo di oggetti da creare.
**Nota**  <a name="install-argument-thing-group-name-constraint"></a>
Il nome del gruppo di cose non può contenere i due punti (`:`).

      ```
      aws iot create-thing-group --thing-group-name MyGreengrassCoreGroup
      ```

      La risposta è simile all'esempio seguente, se la richiesta ha esito positivo.

      ```
      {
        "thingGroupName": "MyGreengrassCoreGroup",
        "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/MyGreengrassCoreGroup",
        "thingGroupId": "4df721e1-ff9f-4f97-92dd-02db4e3f03aa"
      }
      ```

   1. Aggiungere l' AWS IoT oggetto a un gruppo di oggetti.
      + Sostituiscilo *MyGreengrassCore* con il nome del tuo AWS IoT oggetto.
      + Sostituisci *MyGreengrassCoreGroup* con il nome del gruppo di oggetti.

      ```
      aws iot add-thing-to-thing-group --thing-name MyGreengrassCore --thing-group-name MyGreengrassCoreGroup
      ```

      Il comando non produce alcun output se la richiesta ha esito positivo.

## Crea il certificato dell'oggetto
<a name="create-thing-certificate-mp"></a>

<a name="create-thing-certificate-intro-1"></a>Quando si registra un dispositivo come AWS IoT oggetto, quel dispositivo può utilizzare un certificato digitale con AWS cui autenticarsi. Questo certificato consente al dispositivo di comunicare con AWS IoT e AWS IoT Greengrass.

<a name="create-thing-certificate-intro-2"></a>In questa sezione, crei e scarichi certificati a cui il tuo dispositivo può connettersi AWS.<a name="create-thing-certificate-cloud-steps"></a>

**Per creare il certificato dell'oggetto**

1. Crea una cartella in cui scaricare i certificati relativi all' AWS IoT oggetto.

   ```
   mkdir greengrass-v2-certs
   ```

1. Crea e scarica i certificati relativi all' AWS IoT oggetto.

   ```
   aws iot create-keys-and-certificate --set-as-active --certificate-pem-outfile greengrass-v2-certs/device.pem.crt --public-key-outfile greengrass-v2-certs/public.pem.key --private-key-outfile greengrass-v2-certs/private.pem.key
   ```

   La risposta è simile all'esempio seguente, se la richiesta ha esito positivo.

   ```
   {
     "certificateArn": "arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificateId": "aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificatePem": "-----BEGIN CERTIFICATE-----
   MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w
    0BAQUFADCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZ
    WF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIw
    EAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5
    jb20wHhcNMTEwNDI1MjA0NTIxWhcNMTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBh
    MCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBb
    WF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMx
    HzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wgZ8wDQYJKoZIhvcNAQE
    BBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ21uUSfwfEvySWtC2XADZ4nB+BLYgVI
    k60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9TrDHudUZg3qX4waLG5M43q7Wgc/MbQ
    ITxOUSQv7c7ugFFDzQGBzZswY6786m86gpEIbb3OhjZnzcvQAaRHhdlQWIMm2nr
    AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4nUhVVxYUntneD9+h8Mg9q6q+auN
    KyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0FkbFFBjvSfpJIlJ00zbhNYS5f6Guo
    EDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTbNYiytVbZPQUQ5Yaxu2jXnimvw
    3rrszlaEXAMPLE=
   -----END CERTIFICATE-----",
     "keyPair": {
       "PublicKey": "-----BEGIN PUBLIC KEY-----\
   MIIBIjANBgkqhkEXAMPLEQEFAAOCAQ8AMIIBCgKCAQEAEXAMPLE1nnyJwKSMHw4h\
   MMEXAMPLEuuN/dMAS3fyce8DW/4+EXAMPLEyjmoF/YVF/gHr99VEEXAMPLE5VF13\
   59VK7cEXAMPLE67GK+y+jikqXOgHh/xJTwo+sGpWEXAMPLEDz18xOd2ka4tCzuWEXAMPLEahJbYkCPUBSU8opVkR7qkEXAMPLE1DR6sx2HocliOOLtu6Fkw91swQWEXAMPLE\\GB3ZPrNh0PzQYvjUStZeccyNCx2EXAMPLEvp9mQOUXP6plfgxwKRX2fEXAMPLEDa\
   hJLXkX3rHU2xbxJSq7D+XEXAMPLEcw+LyFhI5mgFRl88eGdsAEXAMPLElnI9EesG\
   FQIDAQAB\
   -----END PUBLIC KEY-----\
   ",
       "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\
   key omitted for security reasons\
   -----END RSA PRIVATE KEY-----\
   "
     }
   }
   ```

   Salva l'Amazon Resource Name (ARN) del certificato da utilizzare per configurare il certificato in un secondo momento.

Quindi, configura il certificato del oggetto. Per ulteriori informazioni, consulta [Configura il certificato del oggetto](manual-installation.md#configure-thing-certificate).

## Crea un ruolo di scambio di token
<a name="create-token-exchange-role"></a>

<a name="installation-create-token-exchange-role-intro"></a>I dispositivi core Greengrass utilizzano un ruolo di servizio IAM, chiamato *token exchange role*, per autorizzare le chiamate ai servizi. AWS Il dispositivo utilizza il provider di AWS IoT credenziali per ottenere AWS credenziali temporanee per questo ruolo, che consente al dispositivo di interagire AWS IoT, inviare log ad Amazon CloudWatch Logs e scaricare elementi dei componenti personalizzati da Amazon S3. Per ulteriori informazioni, consulta [Autorizza i dispositivi principali a interagire con i servizi AWS](device-service-role.md).

<a name="installation-create-token-exchange-role-alias-intro"></a>Si utilizza un *alias di AWS IoT ruolo* per configurare il ruolo di scambio di token per i dispositivi principali Greengrass. Gli alias di ruolo consentono di modificare il ruolo di scambio di token per un dispositivo ma mantengono invariata la configurazione del dispositivo. Per ulteriori informazioni, consulta [Autorizzazione delle chiamate dirette ai AWS servizi nella Guida per](https://docs.aws.amazon.com/iot/latest/developerguide/authorizing-direct-aws.html) gli *AWS IoT Core sviluppatori*.

In questa sezione, crei un ruolo IAM per lo scambio di token e un alias di AWS IoT ruolo che rimanda al ruolo. Se hai già configurato un dispositivo principale Greengrass, puoi utilizzare il ruolo di scambio di token e l'alias del ruolo invece di crearne di nuovi. Quindi, configuri il dispositivo in modo che utilizzi quel ruolo e quell'alias. AWS IoT 

**Per creare un ruolo IAM per lo scambio di token**

1. <a name="create-token-exchange-role-create-iam-role"></a>Crea un ruolo IAM che il tuo dispositivo possa utilizzare come ruolo di scambio di token. Esegui questa operazione:

   1. Crea un file che contenga il documento sulla politica di fiducia richiesto dal ruolo di scambio di token.

      <a name="nano-command-intro"></a>Ad esempio, su un sistema basato su Linux, è possibile eseguire il comando seguente per utilizzare GNU nano per creare il file.

      ```
      nano device-role-trust-policy.json
      ```

      Copiate il seguente codice JSON nel file.

      ```
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "credentials.iot.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }
      ```

   1. Crea il ruolo di scambio di token con il documento sulla politica di fiducia.
      + Sostituiscilo *GreengrassV2TokenExchangeRole* con il nome del ruolo IAM da creare.

      ```
      aws iam create-role --role-name GreengrassV2TokenExchangeRole --assume-role-policy-document file://device-role-trust-policy.json
      ```

      La risposta è simile all'esempio seguente, se la richiesta ha esito positivo.

      ```
      {
        "Role": {
          "Path": "/",
          "RoleName": "GreengrassV2TokenExchangeRole",
          "RoleId": "AROAZ2YMUHYHK5OKM77FB",
          "Arn": "arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole",
          "CreateDate": "2021-02-06T00:13:29+00:00",
          "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",		 	 	 
            "Statement": [
              {
                "Effect": "Allow",
                "Principal": {
                  "Service": "credentials.iot.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
              }
            ]
          }
        }
      ```

   1. Crea un file che contenga il documento sulla politica di accesso richiesto dal ruolo di scambio di token.

      <a name="nano-command-intro"></a>Ad esempio, su un sistema basato su Linux, è possibile eseguire il comando seguente per utilizzare GNU nano per creare il file.

      ```
      nano device-role-access-policy.json
      ```

      Copiate il seguente codice JSON nel file.

      ```
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "logs:CreateLogGroup",
              "logs:CreateLogStream",
              "logs:PutLogEvents",
              "logs:DescribeLogStreams",
              "s3:GetBucketLocation"
            ],
            "Resource": "*"
          }
        ]
      }
      ```
**Nota**  
Questa politica di accesso non consente l'accesso agli artefatti dei componenti nei bucket S3. Per distribuire componenti personalizzati che definiscono gli artefatti in Amazon S3, devi aggiungere autorizzazioni al ruolo per consentire al dispositivo principale di recuperare gli artefatti dei componenti. Per ulteriori informazioni, consulta [Consenti l'accesso ai bucket S3 per gli artefatti dei componenti](device-service-role.md#device-service-role-access-s3-bucket).  
Se non disponi ancora di un bucket S3 per gli artefatti dei componenti, puoi aggiungere queste autorizzazioni in un secondo momento dopo aver creato un bucket.

   1. Crea la policy IAM dal documento di policy.
      + Sostituiscila *GreengrassV2TokenExchangeRoleAccess* con il nome della policy IAM da creare.

      ```
      aws iam create-policy --policy-name GreengrassV2TokenExchangeRoleAccess --policy-document file://device-role-access-policy.json
      ```

      La risposta è simile all'esempio seguente, se la richiesta ha esito positivo.

      ```
      {
        "Policy": {
          "PolicyName": "GreengrassV2TokenExchangeRoleAccess",
          "PolicyId": "ANPAZ2YMUHYHACI7C5Z66",
          "Arn": "arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess",
          "Path": "/",
          "DefaultVersionId": "v1",
          "AttachmentCount": 0,
          "PermissionsBoundaryUsageCount": 0,
          "IsAttachable": true,
          "CreateDate": "2021-02-06T00:37:17+00:00",
          "UpdateDate": "2021-02-06T00:37:17+00:00"
        }
      }
      ```

   1. Allega la policy IAM al ruolo di scambio di token.
      + Sostituisci *GreengrassV2TokenExchangeRole* con il nome del ruolo IAM.
      + Sostituisci l'ARN della policy con l'ARN della policy IAM che hai creato nel passaggio precedente.

      ```
      aws iam attach-role-policy --role-name GreengrassV2TokenExchangeRole --policy-arn arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess
      ```

      Il comando non ha alcun output se la richiesta ha esito positivo.

1. <a name="create-token-exchange-role-create-iot-role-alias"></a>Crea un alias di AWS IoT ruolo che punti al ruolo di scambio di token.
   + Sostituiscilo *GreengrassCoreTokenExchangeRoleAlias* con il nome dell'alias del ruolo da creare.
   + Sostituisci il ruolo ARN con l'ARN del ruolo IAM creato nel passaggio precedente.

   ```
   aws iot create-role-alias --role-alias GreengrassCoreTokenExchangeRoleAlias --role-arn arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole
   ```

   La risposta è simile all'esempio seguente, se la richiesta ha esito positivo.

   ```
   {
     "roleAlias": "GreengrassCoreTokenExchangeRoleAlias",
     "roleAliasArn": "arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias"
   }
   ```
**Nota**  
Per creare un alias di ruolo, devi disporre dell'autorizzazione a passare il ruolo IAM per lo scambio di token a. AWS IoT Se ricevi un messaggio di errore quando tenti di creare un alias di ruolo, verifica che AWS l'utente disponga di questa autorizzazione. *Per ulteriori informazioni, consulta [Concessione a un utente delle autorizzazioni per il trasferimento di un ruolo a un AWS servizio](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html) nella Guida per l'AWS Identity and Access Management utente.*

1. Crea e allega una AWS IoT policy che consenta al tuo dispositivo principale Greengrass di utilizzare l'alias del ruolo per assumere il ruolo di scambio di token. Se hai già configurato un dispositivo principale Greengrass, puoi allegare la sua AWS IoT politica di alias di ruolo invece di crearne uno nuovo. Esegui questa operazione:

   1. (Facoltativo) Create un file che contenga il documento di AWS IoT policy richiesto dall'alias di ruolo.

      <a name="nano-command-intro"></a>Ad esempio, su un sistema basato su Linux, è possibile eseguire il comando seguente per utilizzare GNU nano per creare il file.

      ```
      nano greengrass-v2-iot-role-alias-policy.json
      ```

      Copiate il seguente codice JSON nel file.
      + Sostituisci l'ARN della risorsa con l'ARN del tuo alias di ruolo.

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "iot:AssumeRoleWithCertificate",
            "Resource": "arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias"
          }
        ]
      }
      ```

   1. Crea una AWS IoT politica dal documento di policy.
      + Sostituisci *GreengrassCoreTokenExchangeRoleAliasPolicy* con il nome della AWS IoT politica da creare.

      ```
      aws iot create-policy --policy-name GreengrassCoreTokenExchangeRoleAliasPolicy --policy-document file://greengrass-v2-iot-role-alias-policy.json
      ```

      La risposta è simile all'esempio seguente, se la richiesta ha esito positivo.

      ```
      {
        "policyName": "GreengrassCoreTokenExchangeRoleAliasPolicy",
        "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassCoreTokenExchangeRoleAliasPolicy",
        "policyDocument": "{
          \\"Version\\":\\"2012-10-17		 	 	 \\",
          \\"Statement\\": [
            {
              \\"Effect\\": \\"Allow\\",
              \\"Action\\": \\"iot:AssumeRoleWithCertificate\\",
              \\"Resource\\": \\"arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias\\"
            }
          ]
        }",
        "policyVersionId": "1"
      }
      ```

   1. Allega la AWS IoT policy al certificato dell' AWS IoT oggetto.
      + Sostituisci *GreengrassCoreTokenExchangeRoleAliasPolicy* con il nome della AWS IoT politica relativa agli alias del ruolo.
      + Sostituisci l'ARN di destinazione con l'ARN del certificato per il tuo oggetto. AWS IoT 

      ```
      aws iot attach-policy --policy-name GreengrassCoreTokenExchangeRoleAliasPolicy --target arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4
      ```

      Il comando non ha alcun output se la richiesta ha esito positivo.

## Scarica i certificati sul dispositivo
<a name="download-thing-certificates"></a>

In precedenza, avevi scaricato il certificato del dispositivo sul computer di sviluppo. In questa sezione, scarichi il certificato Amazon Root Certificate Authority (CA). Quindi, se prevedi di eseguire il software AWS IoT Greengrass Core in Docker su un computer diverso da quello di sviluppo, copi i certificati su quel computer host. Il software AWS IoT Greengrass Core utilizza questi certificati per connettersi al servizio AWS IoT cloud.

**Per scaricare i certificati sul dispositivo**

1. Sul tuo computer di sviluppo, scarica il certificato Amazon Root Certificate Authority (CA). AWS IoT per impostazione predefinita, i certificati sono associati al certificato CA root di Amazon.

------
#### [ Linux or Unix ]

   ```
   sudo curl -o ./greengrass-v2-certs/AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   curl -o .\greengrass-v2-certs\AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

------
#### [ PowerShell ]

   ```
   iwr -Uri https://www.amazontrust.com/repository/AmazonRootCA1.pem -OutFile .\greengrass-v2-certs\AmazonRootCA1.pem
   ```

------

1. Se prevedi di eseguire il software AWS IoT Greengrass Core in Docker su un dispositivo diverso dal computer di sviluppo, copia i certificati sul computer host. Se SSH e SCP sono abilitati sul computer di sviluppo e sul computer host, puoi usare il `scp` comando sul tuo computer di sviluppo per trasferire i certificati. *device-ip-address*Sostituiscilo con l'indirizzo IP del tuo computer host.

   ```
   scp -r greengrass-v2-certs/ device-ip-address:~
   ```

## Crea un file di configurazione
<a name="create-docker-install-configuration-file"></a>

1. Sul computer host, crea una cartella in cui inserire il file di configurazione.

   ```
   mkdir ./greengrass-v2-config
   ```

1. Utilizzate un editor di testo per creare un file di configurazione denominato `config.yaml` nella `./greengrass-v2-config` cartella.

   Ad esempio, è possibile eseguire il comando seguente per utilizzare GNU nano per creare il`config.yaml`. 

   ```
   nano ./greengrass-v2-config/config.yaml
   ```

1. Copiate il seguente contenuto YAML nel file. Questo file di configurazione parziale specifica i parametri di sistema e i parametri del nucleo di Greengrass.

   ```
   ---
   system:
     certificateFilePath: "/tmp/certs/device.pem.crt"
     privateKeyPath: "/tmp/certs/private.pem.key"
     rootCaPath: "/tmp/certs/AmazonRootCA1.pem"
     rootpath: "/greengrass/v2"
     thingName: "MyGreengrassCore"
   services:
     aws.greengrass.Nucleus:
       componentType: "NUCLEUS"
       version: "nucleus-version"
       configuration:
         awsRegion: "region"
         iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
         iotDataEndpoint: "device-data-prefix-ats.iot.region.amazonaws.com"
         iotCredEndpoint: "device-credentials-prefix.credentials.region.amazonaws.com"
   ```

   Quindi, sostituite i seguenti valori:
   + */tmp/certs*. La directory nel contenitore Docker in cui vengono montati i certificati scaricati all'avvio del contenitore.
   + `/greengrass/v2`. La cartella principale di Greengrass che si desidera utilizzare per l'installazione. Utilizzate la variabile di `GGC_ROOT` ambiente per impostare questo valore.
   + *MyGreengrassCore*. Il nome della AWS IoT cosa.
   + *nucleus-version*. La versione del software AWS IoT Greengrass Core da installare. Questo valore deve corrispondere alla versione dell'immagine Docker o del Dockerfile che hai scaricato. Se hai scaricato l'immagine Greengrass Docker con il `latest` tag, usala ****docker inspect *image-id***** per vedere la versione dell'immagine.
   + *region*. Il Regione AWS luogo in cui hai creato AWS IoT le tue risorse. È inoltre necessario specificare lo stesso valore per la variabile di `AWS_REGION` ambiente nel [file di ambiente](#create-env-file-manual-provisioning).
   + *GreengrassCoreTokenExchangeRoleAlias*. L'alias del ruolo di scambio di token.
   + *device-data-prefix*. Il prefisso per il tuo endpoint di AWS IoT dati.
   + *device-credentials-prefix*. Il prefisso per l'endpoint AWS IoT delle credenziali.

## Crea un file di ambiente
<a name="create-env-file-manual-provisioning"></a>

Questo tutorial utilizza un file di ambiente per impostare le variabili di ambiente che verranno passate al programma di installazione del software AWS IoT Greengrass Core all'interno del contenitore Docker. Puoi anche usare [l'`--env`argomento `-e` or](https://docs.docker.com/engine/reference/commandline/run/#env) nel `docker run` comando per impostare le variabili di ambiente nel contenitore Docker oppure puoi impostare le variabili in [un `environment` blocco](https://docs.docker.com/compose/compose-file/compose-file-v3/#environment) del file. `docker-compose.yml`

1. Usa un editor di testo per creare un file di ambiente denominato`.env`.

   Ad esempio, su un sistema basato su Linux, puoi eseguire il seguente comando per usare GNU nano per crearlo `.env` nella directory corrente.

   ```
   nano .env
   ```

1. Copiate il seguente contenuto nel file.

   ```
   GGC_ROOT_PATH=/greengrass/v2
   AWS_REGION=region
   PROVISION=false
   COMPONENT_DEFAULT_USER=ggc_user:ggc_group
   INIT_CONFIG=/tmp/config/config.yaml
   ```

   Quindi, sostituisci i seguenti valori.
   + `/greengrass/v2`. Il percorso della cartella principale da utilizzare per installare il software AWS IoT Greengrass Core.
   + *region*. Il Regione AWS luogo in cui hai creato AWS IoT le tue risorse. È necessario specificare lo stesso valore per il parametro `awsRegion` di configurazione nel [file di configurazione](#create-docker-install-configuration-file).
   + */tmp/config/*. La cartella in cui monti il file di configurazione all'avvio del contenitore Docker.
**Nota**  <a name="docker-local-dev-tools-production-environment-warning"></a>
È possibile impostare la variabile di `DEPLOY_DEV_TOOLS` ambiente su `true` per distribuire il componente [Greengrass CLI](greengrass-cli-component.md), che consente di sviluppare componenti personalizzati all'interno del contenitore Docker. <a name="local-dev-tools-production-environment-warning"></a>Si consiglia di utilizzare questo componente solo in ambienti di sviluppo, non in ambienti di produzione. Questo componente fornisce l'accesso a informazioni e operazioni che in genere non sono necessarie in un ambiente di produzione. Segui il principio del privilegio minimo distribuendo questo componente solo sui dispositivi principali dove ne hai bisogno. 

## Esegui il software AWS IoT Greengrass Core in un contenitore
<a name="run-greengrass-image-manual-provisioning"></a>

Questo tutorial mostra come avviare l'immagine Docker che hai creato in un contenitore Docker. Puoi utilizzare la CLI Docker o la CLI Docker Compose per AWS IoT Greengrass eseguire l'immagine del software Core in un contenitore Docker. 

------
#### [ Docker ]
+ Questo tutorial mostra come avviare l'immagine Docker che hai creato in un contenitore Docker. 

  ```
  docker run --rm --init -it --name docker-image \
   -v path/to/greengrass-v2-config:/tmp/config/:ro \
   -v path/to/greengrass-v2-certs:/tmp/certs:ro \ 
   --env-file .env \
   -p 8883 \
   your-container-image:version
  ```

  Questo comando di esempio utilizza i seguenti argomenti per [docker run](https://docs.docker.com/engine/reference/commandline/run/):
  + <a name="docker-run-rm"></a>[https://docs.docker.com/engine/reference/run/#clean-up---rm](https://docs.docker.com/engine/reference/run/#clean-up---rm). Pulisce il contenitore quando esce.
  + <a name="docker-run-init"></a>[https://docs.docker.com/engine/reference/run/#specify-an-init-process](https://docs.docker.com/engine/reference/run/#specify-an-init-process). Utilizza un processo di inizializzazione nel contenitore. 
**Nota**  
L'`--init`argomento è necessario per chiudere il software AWS IoT Greengrass Core quando si arresta il contenitore Docker.
  + <a name="docker-run-it"></a>[https://docs.docker.com/engine/reference/run/#foreground](https://docs.docker.com/engine/reference/run/#foreground). (Facoltativo) Esegue il contenitore Docker in primo piano come processo interattivo. Puoi sostituirlo con l'`-d`argomento per eseguire invece il contenitore Docker in modalità distaccata. Per ulteriori informazioni, consulta [Detached vs foreground](https://docs.docker.com/engine/reference/run/#detached-vs-foreground) nella documentazione Docker.
  + <a name="docker-run-name"></a>[https://docs.docker.com/engine/reference/run/#name---name](https://docs.docker.com/engine/reference/run/#name---name). Esegue un contenitore denominato `aws-iot-greengrass` 
  + <a name="docker-run-v"></a>[https://docs.docker.com/storage/volumes/](https://docs.docker.com/storage/volumes/). Monta un volume nel contenitore Docker per rendere il file di configurazione e i file di certificato disponibili per l' AWS IoT Greengrass esecuzione all'interno del contenitore.
  + <a name="docker-run-env-file"></a>[https://docs.docker.com/engine/reference/commandline/run/#env](https://docs.docker.com/engine/reference/commandline/run/#env). (Facoltativo) Specifica il file di ambiente per impostare le variabili di ambiente che verranno passate al programma di installazione del software AWS IoT Greengrass Core all'interno del contenitore Docker. Questo argomento è richiesto solo se è stato creato un [file di ambiente per impostare le variabili](#create-env-file-manual-provisioning) di ambiente. Se non hai creato un file di ambiente, puoi utilizzare `--env` gli argomenti per impostare le variabili di ambiente direttamente nel comando Docker run.
  + <a name="docker-run-p"></a>[https://docs.docker.com/engine/reference/commandline/run/#publish](https://docs.docker.com/engine/reference/commandline/run/#publish). (Facoltativo) Pubblica la porta container 8883 sulla macchina host. Questo argomento è necessario se si desidera connettersi e comunicare tramite MQTT perché AWS IoT Greengrass utilizza la porta 8883 per il traffico MQTT. Per aprire altre porte, utilizzate argomenti aggiuntivi. `-p`
**Nota**  <a name="docker-run-cap-drop"></a>
Per eseguire il contenitore Docker con maggiore sicurezza, puoi utilizzare gli `--cap-add` argomenti `--cap-drop` e per abilitare selettivamente le funzionalità Linux per il tuo contenitore. Per ulteriori informazioni, consulta [Privilegi di runtime e funzionalità Linux nella documentazione](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) Docker.

------
#### [ Docker Compose ]

1. Usa un editor di testo per creare un file Docker Compose denominato. `docker-compose.yml`

   Ad esempio, su un sistema basato su Linux, puoi eseguire il seguente comando per usare GNU nano per crearlo nella directory corrente. `docker-compose.yml`

   ```
   nano docker-compose.yml
   ```
**Nota**  
È inoltre possibile scaricare e utilizzare la versione più recente del file Compose fornito AWS da. [GitHub](https://github.com/aws-greengrass/aws-greengrass-docker/releases/)

1. Aggiungi il seguente contenuto al file Compose. Il file si presenta in maniera simile al seguente frammento: *your-container-name:version*Sostituiscilo con il nome della tua immagine Docker. 

   ```
   version: '3.7'
    
   services:
     greengrass:
       init: true
       build:
         context: .
       container_name: aws-iot-greengrass
       image: your-container-name:version
       volumes:
         - /path/to/greengrass-v2-config:/tmp/config/:ro
         - /path/to/greengrass-v2-certs:/tmp/certs:ro 
       env_file: .env
       ports:
         - "8883:8883"
   ```<a name="docker-compose-optional-params"></a>

   I seguenti parametri in questo file Compose di esempio sono facoltativi:
   + `ports`—Pubblica le porte del contenitore 8883 sul computer host. Questo parametro è necessario se si desidera connettersi e comunicare tramite MQTT perché AWS IoT Greengrass utilizza la porta 8883 per il traffico MQTT. 
   + `env_file`: specifica il file di ambiente per impostare le variabili di ambiente che verranno passate al programma di installazione del software AWS IoT Greengrass Core all'interno del contenitore Docker. Questo parametro è richiesto solo se è stato creato un [file di ambiente per impostare le variabili di ambiente](#create-env-file-manual-provisioning). Se non avete creato un file di ambiente, potete utilizzare il parametro [environment](https://docs.docker.com/compose/compose-file/compose-file-v3/#environment) per impostare le variabili direttamente nel file Compose.
**Nota**  <a name="docker-compose-cap-drop"></a>
Per eseguire il contenitore Docker con maggiore sicurezza, puoi utilizzare `cap_drop` e `cap_add` nel tuo file Compose per abilitare selettivamente le funzionalità Linux per il tuo contenitore. Per ulteriori informazioni, consulta [Privilegi di runtime e funzionalità Linux](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) nella documentazione Docker.

1. Esegui il comando seguente per avviare il contenitore.

   ```
   docker-compose -f docker-compose.yml up
   ```

------

## Fasi successive
<a name="run-greengrass-docker-next-steps"></a>

<a name="run-greengrass-docker-success"></a>AWS IoT Greengrass Il software principale è ora in esecuzione in un contenitore Docker. Esegui il comando seguente per recuperare l'ID del contenitore attualmente in esecuzione.

```
docker ps
```

È quindi possibile eseguire il comando seguente per accedere al contenitore ed esplorare il software AWS IoT Greengrass Core in esecuzione all'interno del contenitore.

```
docker exec -it container-id /bin/bash
```

Per informazioni sulla creazione di un componente semplice, consulta [Fase 4: Sviluppa e testa un componente sul tuo dispositivo](create-first-component.md) in [Tutorial: Guida introduttiva a AWS IoT Greengrass V2](getting-started.md)

**Nota**  <a name="run-greengrass-commands-in-docker-note"></a>
Quando esegui comandi all'interno del contenitore Docker, tali comandi non vengono registrati nei log Docker. `docker exec` Per registrare i comandi nei log Docker, collega una shell interattiva al contenitore Docker. Per ulteriori informazioni, consulta [Collega una shell interattiva al contenitore Docker](docker-troubleshooting.md#debugging-docker-attach-shell).

Il file di registro AWS IoT Greengrass Core viene chiamato `greengrass.log` e si trova in. `/greengrass/v2/logs` Nella stessa directory si trovano anche i file di registro dei componenti. Per copiare i log di Greengrass in una directory temporanea sull'host, esegui il seguente comando:

```
docker cp container-id:/greengrass/v2/logs /tmp/logs
```

Se desideri mantenere i log dopo l'uscita o la rimozione di un contenitore, ti consigliamo di collegare solo la `/greengrass/v2/logs` directory alla directory dei log temporanei sull'host invece di montare l'intera directory Greengrass. Per ulteriori informazioni, consulta [Mantieni i log Greengrass all'esterno del contenitore Docker](docker-troubleshooting.md#debugging-docker-persist-logs).

<a name="greengrass-docker-stop"></a>Per fermare un contenitore Docker in esecuzione, esegui o. AWS IoT Greengrass `docker stop` `docker-compose -f docker-compose.yml stop` Questa azione invia `SIGTERM` al processo Greengrass e chiude tutti i processi associati che sono stati avviati nel contenitore. Il contenitore Docker viene inizializzato con l'`docker-init`eseguibile come processo PID 1, il che aiuta a rimuovere eventuali processi zombie rimanenti. Per ulteriori informazioni, consulta [Specificare un processo di inizializzazione nella documentazione di Docker](https://docs.docker.com/engine/reference/run/#specify-an-init-process).

<a name="see-docker-troubleshooting"></a>Per informazioni sulla risoluzione dei problemi relativi all'esecuzione AWS IoT Greengrass in un contenitore Docker, consulta. [Risoluzione dei problemi AWS IoT Greengrass in un contenitore Docker](docker-troubleshooting.md)

# Risoluzione dei problemi AWS IoT Greengrass in un contenitore Docker
<a name="docker-troubleshooting"></a>

Utilizza le seguenti informazioni per aiutarti a risolvere i problemi relativi all'esecuzione AWS IoT Greengrass in un contenitore Docker e per eseguire il debug dei problemi AWS IoT Greengrass nel contenitore Docker.

**Topics**
+ [Risoluzione dei problemi relativi all'esecuzione del contenitore Docker](#troubleshooting-container-errors)
+ [Esecuzione del debug in un contenitore Docker AWS IoT Greengrass](#debugging-greengrass-in-docker)

## Risoluzione dei problemi relativi all'esecuzione del contenitore Docker
<a name="troubleshooting-container-errors"></a>

Utilizza le seguenti informazioni per risolvere i problemi relativi all'esecuzione AWS IoT Greengrass in un contenitore Docker.

**Topics**
+ [Errore: impossibile eseguire un accesso interattivo da un dispositivo non TTY](#docker-troubleshootin-ecr-get-login-password)
+ [Errore: opzioni sconosciute: - no-include-email](#docker-troubleshooting-cli-version)
+ [Errore: un firewall sta bloccando la condivisione di file tra finestre e contenitori.](#docker-troubleshooting-firewall)
+ [Errore: si è verificato un errore (AccessDeniedException) durante la chiamata dell' GetAuthorizationToken operazione: User: arn:aws:iam: :user/ <user-name>non *account-id* è autorizzato a eseguire: ecr: on resource: \$1 GetAuthorizationToken](#docker-troubleshooting-ecr-perms)
+ [Errore: hai raggiunto il limite di pull rate](#docker-troubleshooting-too-many-requests)

### Errore: impossibile eseguire un accesso interattivo da un dispositivo non TTY
<a name="docker-troubleshootin-ecr-get-login-password"></a>

Questo errore può verificarsi quando si esegue il comando. `aws ecr get-login-password` Assicurati di aver installato la versione 2 o la AWS CLI versione 1 più recente. Ti consigliamo di utilizzare la AWS CLI versione 2. Per ulteriori informazioni, consulta [Installazione dell’ AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) nella *Guida per l’utente dell’AWS Command Line Interface *.

### Errore: opzioni sconosciute: - no-include-email
<a name="docker-troubleshooting-cli-version"></a>

Questo errore può verificarsi quando si esegue il `aws ecr get-login` comando. Assicurati di avere installata la AWS CLI versione più recente (ad esempio, Run:`pip install awscli --upgrade --user`). Per ulteriori informazioni, vedere [Installazione di AWS Command Line Interface su Microsoft Windows](https://docs.aws.amazon.com/cli/latest/userguide/awscli-install-windows.html) nella *Guida per l'AWS Command Line Interface utente*.

### Errore: un firewall sta bloccando la condivisione di file tra finestre e contenitori.
<a name="docker-troubleshooting-firewall"></a>

Potresti ricevere questo errore o un `Firewall Detected` messaggio quando esegui Docker su un computer Windows. Questo errore può inoltre verificarsi se sei connesso a una rete privata virtuale (VPN, Virtual Private Network) e le impostazioni di rete impediscono il montaggio dell'unità condivisa. In tal caso, disattivare la rete VPN e riavviare il container Docker.

### Errore: si è verificato un errore (AccessDeniedException) durante la chiamata dell' GetAuthorizationToken operazione: User: arn:aws:iam: :user/ <user-name>non *account-id* è autorizzato a eseguire: ecr: on resource: \$1 GetAuthorizationToken
<a name="docker-troubleshooting-ecr-perms"></a>

Potresti ricevere questo errore durante l'esecuzione del `aws ecr get-login-password` comando se non disponi di autorizzazioni sufficienti per accedere a un repository Amazon ECR. *Per ulteriori informazioni, consulta [Amazon ECR Repository Policy Examples e Accessing](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-policy-examples.html) [One Amazon ECR Repository nella Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security_iam_id-based-policy-examples.html) User Guide.*

### Errore: hai raggiunto il limite di pull rate
<a name="docker-troubleshooting-too-many-requests"></a>

Docker Hub limita il numero di richieste pull che gli utenti anonimi e gratuiti di Docker Hub possono effettuare. Se superi i limiti di velocità per le pull request anonime o gratuite degli utenti, ricevi uno dei seguenti errori: 

  

```
ERROR: toomanyrequests: Too Many Requests.
```

  

```
You have reached your pull rate limit.
```

Per risolvere questi errori, puoi attendere qualche ora prima di provare un'altra pull request. Se prevedi di inviare costantemente un numero elevato di pull request, consulta il [sito Web di Docker Hub](https://www.docker.com/increase-rate-limits) per informazioni sui limiti di velocità e sulle opzioni per l'autenticazione e l'aggiornamento del tuo account Docker. 

## Esecuzione del debug in un contenitore Docker AWS IoT Greengrass
<a name="debugging-greengrass-in-docker"></a>

Per il debug dei problemi relativi a un container Docker, puoi rendere persistenti i log di runtime Greengrass o collegare una shell interattiva al container Docker.

### Mantieni i log Greengrass all'esterno del contenitore Docker
<a name="debugging-docker-persist-logs"></a>

Dopo aver fermato un AWS IoT Greengrass contenitore, puoi usare il seguente `docker cp ` comando per copiare i log di Greengrass dal contenitore Docker in una directory di log temporanea. 

```
docker cp container-id:/greengrass/v2/logs /tmp/logs
```

Per mantenere i log anche dopo l'uscita o la rimozione di un contenitore, è necessario eseguire il contenitore Docker dopo aver montato la AWS IoT Greengrass directory tramite bind. `/greengrass/v2/logs` 

Per montare in modo bind-mount la `/greengrass/v2/logs` directory, esegui una delle seguenti operazioni quando esegui un nuovo contenitore Docker. AWS IoT Greengrass 
+ Includi `-v /tmp/logs:/greengrass/v2/logs:ro` nel tuo comando. `docker run`

  Modifica il `volumes` blocco nel file Compose per includere la riga seguente prima di eseguire il `docker-compose up` comando.

  ```
  volumes:
   - /tmp/logs:/greengrass/v2/logs:ro
  ```

Puoi quindi controllare i log `/tmp/logs` sul tuo host per vedere i log di Greengrass AWS IoT Greengrass mentre è in esecuzione all'interno del contenitore Docker.

Per informazioni sull'esecuzione dei contenitori Greengrass Docker, vedere e [Esegui AWS IoT Greengrass in Docker con provisioning manuale](run-greengrass-docker-manual-provisioning.md) [Esegui AWS IoT Greengrass in Docker con provisioning automatico](run-greengrass-docker-automatic-provisioning.md)

### Collega una shell interattiva al contenitore Docker
<a name="debugging-docker-attach-shell"></a>

Quando esegui comandi all'interno del contenitore Docker, tali comandi non vengono acquisiti nei log Docker. `docker exec` La registrazione dei comandi nei registri Docker può aiutarti a esaminare lo stato del contenitore Greengrass Docker. Esegui una delle seguenti operazioni:
+ Esegui il comando seguente in un terminale separato per collegare l'input, l'output e l'errore standard del tuo terminale al contenitore in esecuzione. Ciò consente di visualizzare e controllare il contenitore Docker dal terminale corrente.

  ```
  docker attach container-id
  ```
+ Esegui il comando seguente in un terminale separato. Ciò consente di eseguire i comandi in modalità interattiva, anche se il contenitore non è collegato.

  ```
  docker exec -it container-id sh -c "command > /proc/1/fd/1"
  ```

Per una AWS IoT Greengrass risoluzione generale dei problemi, vedere[Risoluzione dei problemi AWS IoT Greengrass V2](troubleshooting.md).