

Avviso di fine del supporto: il 7 ottobre 2026, AWS il supporto per. AWS IoT Greengrass Version 1 Dopo il 7 ottobre 2026, non potrai più accedere alle risorse. AWS IoT Greengrass V1 Per ulteriori informazioni, visita [Migrate](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html) from. AWS IoT Greengrass Version 1

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 le funzioni Lambda sul core AWS IoT Greengrass
<a name="lambda-functions"></a>

AWS IoT Greengrass fornisce un ambiente di runtime Lambda containerizzato per il codice definito dall'utente in cui si crea. AWS Lambda Funzioni Lambda distribuite in un'esecuzione principale nel AWS IoT Greengrass runtime Lambda locale del core. Le funzioni Lambda locali possono essere attivate da eventi locali, messaggi dal cloud e altre fonti, il che offre funzionalità di elaborazione locale ai dispositivi client. Ad esempio, puoi utilizzare le funzioni Greengrass Lambda per filtrare i dati del dispositivo prima di trasmetterli al cloud.

Per distribuire una funzione Lambda su un core, si aggiunge la funzione a un gruppo Greengrass (facendo riferimento alla funzione Lambda esistente), si configurano le impostazioni specifiche del gruppo per la funzione e quindi si distribuisce il gruppo. Se la funzione accede AWS ai servizi, è inoltre necessario aggiungere le autorizzazioni necessarie al ruolo del gruppo [Greengrass](group-role.md).

Puoi configurare parametri che determinano l'esecuzione delle funzioni Lambda, tra cui autorizzazioni, isolamento, limiti di memoria e altro. Per ulteriori informazioni, consulta [Controllo dell'esecuzione delle funzioni Greengrass Lambda utilizzando la configurazione specifica del gruppo](lambda-group-config.md).

**Nota**  
Queste impostazioni consentono anche l'esecuzione AWS IoT Greengrass in un contenitore Docker. Per ulteriori informazioni, consulta [Esecuzione AWS IoT Greengrass in un contenitore Docker](run-gg-in-docker-container.md).

La tabella seguente elenca i [AWS Lambda runtime](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html) supportati e le versioni del software AWS IoT Greengrass Core su cui possono essere eseguiti.


****  

| Lingua o piattaforma | Versione GGC | 
| --- | --- | 
| Python 3.8 | 1.11 | 
| Python 3.7 | 1.9 o versioni successive | 
| Python 2.7 \$1 | 1.0 o versione successiva | 
| Java 8 | 1.1 o versione successiva | 
| Node.js 12.x \$1 | 1.10 o versione successiva | 
| Node.js 8.10 | 1.9 o versione successiva | 
| Node.js 6.10 \$1 | 1.1 o versione successiva | 
| C, C\$1\$1 | 1.6 o versione successiva | 

\$1 Puoi eseguire funzioni Lambda che utilizzano questi runtime su versioni supportate di AWS IoT Greengrass, ma non puoi crearle in. AWS Lambda Se il runtime sul tuo dispositivo è diverso dal runtime AWS Lambda specificato per quella funzione, puoi scegliere il tuo runtime utilizzando `FunctionRuntimeOverride` in. `FunctionDefintionVersion` Per ulteriori informazioni, consulta [CreateFunctionDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/createfunctiondefinition-post.html). Per ulteriori informazioni sui runtime supportati, consulta la [politica di supporto di Runtime](https://docs.aws.amazon.com/lambda/latest/dg/runtime-support-policy.html) nella *AWS Lambda Developer* Guide.

## SDKs per le funzioni Greengrass Lambda
<a name="lambda-sdks"></a>

AWS ne fornisce tre SDKs che possono essere utilizzate dalle funzioni Greengrass Lambda in esecuzione su un core. AWS IoT Greengrass Queste SDKs sono contenute in diversi pacchetti, quindi le funzioni possono usarle contemporaneamente. Per utilizzare un SDK in una funzione Greengrass Lambda, includilo nel pacchetto di distribuzione della funzione Lambda su cui carichi. AWS Lambda

**AWS IoT Greengrass SDK principale**  <a name="lambda-sdks-core"></a>
Consente alle funzioni Lambda locali di interagire con il core per:  <a name="gg-core-sdk-functionality"></a>
+ Scambia messaggi MQTT con. AWS IoT Core
+ Scambia messaggi MQTT con connettori, dispositivi client e altre funzioni Lambda nel gruppo Greengrass.
+ Interagire con il servizio shadow locale.
+ Richiama altre funzioni Lambda locali.
+ Accesso a [risorse segrete](secrets.md).
+ Interagire con [stream manager](stream-manager.md).
AWS IoT Greengrass fornisce il AWS IoT Greengrass Core SDK nelle seguenti lingue e piattaforme su. GitHub  <a name="gg-core-sdk-download-list"></a>
+ [AWS IoT Greengrass SDK principale per Java](https://github.com/aws/aws-greengrass-core-sdk-java/)
+ [AWS IoT Greengrass Core SDK per Node.js](https://github.com/aws/aws-greengrass-core-sdk-js/)
+ [AWS IoT Greengrass SDK di base per Python](https://github.com/aws/aws-greengrass-core-sdk-python/)
+ [AWS IoT Greengrass Core SDK per C](https://github.com/aws/aws-greengrass-core-sdk-c/)
Per includere la dipendenza AWS IoT Greengrass Core SDK nel pacchetto di distribuzione della funzione Lambda:  

1. Scarica la lingua o la piattaforma del pacchetto AWS IoT Greengrass Core SDK che corrisponde al runtime della tua funzione Lambda.

1. Decomprimere il pacchetto scaricato per ottenere l'SDK. Il kit SDK è la cartella `greengrasssdk`.

1. Includi `greengrasssdk` nel pacchetto di distribuzione della funzione Lambda che contiene il codice della funzione. Questo è il pacchetto su cui carichi AWS Lambda quando crei la funzione Lambda.
   
 **StreamManagerClient**  
Solo il seguente AWS IoT Greengrass Core SDKs può essere utilizzato per le operazioni di [gestione degli stream](stream-manager.md):  <a name="streammanagerclient-sdk-versions"></a>
+ Java SDK (v1.4.0 o successivo)
+ Python SDK (v1.5.0 o successivo)
+ Node.js SDK (v1.6.0 o successivo)
Per utilizzare AWS IoT Greengrass Core SDK for Python per interagire con lo stream manager, devi installare Python 3.7 o versione successiva. È inoltre necessario installare le dipendenze da includere nei pacchetti di distribuzione delle funzioni Python Lambda:  <a name="python-sdk-dependencies-stream-manager"></a>

1. Passare alla directory SDK che contiene il file `requirements.txt`. Questo file elenca le dipendenze.

1. Installare le dipendenze SDK. Ad esempio, eseguire il comando `pip` seguente per installarle nella directory corrente:

   ```
   pip install --target . -r requirements.txt
   ```
   
**Installa AWS IoT Greengrass Core SDK per Python sul dispositivo principale**  
Se stai eseguendo funzioni Python Lambda, puoi anche usarle [https://pypi.org/project/pip/](https://pypi.org/project/pip/)per installare Core AWS IoT Greengrass SDK per Python sul dispositivo principale. Quindi puoi distribuire le tue funzioni senza includere l'SDK nel pacchetto di distribuzione delle funzioni Lambda. Per ulteriori informazioni, consulta [greengrasssdk](https://pypi.org/project/greengrasssdk/).  
Questo supporto è destinato ai core con vincoli di dimensione. Ti consigliamo di includere l'SDK nei pacchetti di distribuzione delle funzioni Lambda, quando possibile.  
 

**AWS IoT Greengrass SDK per il Machine Learning**  <a name="lambda-sdks-ml"></a>
Consente alle funzioni Lambda locali di utilizzare modelli di machine learning (ML) distribuiti nel core di Greengrass come risorse ML. Le funzioni Lambda possono utilizzare l'SDK per richiamare e interagire con un servizio di inferenza locale distribuito nel core come connettore. Le funzioni Lambda e i connettori ML possono anche utilizzare l'SDK per inviare dati al connettore ML Feedback per il caricamento e la pubblicazione. Per ulteriori informazioni, inclusi esempi di codice che utilizzano l'SDK, consulta [Connettore ML Image Classification](image-classification-connector.md), [Connettore ML Object Detection](obj-detection-connector.md) e [Connettore ML Feedback](ml-feedback-connector.md).  
La tabella seguente elenca le lingue o le piattaforme supportate per le versioni SDK e le versioni del software AWS IoT Greengrass Core su cui possono essere eseguite.    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/greengrass/v1/developerguide/lambda-functions.html)
Per informazioni di download, consulta [AWS IoT Greengrass Software ML SDK](what-is-gg.md#gg-ml-sdk-download).

**AWS SDKs**  <a name="lambda-sdks-aws"></a>
Consente alle funzioni Lambda locali di effettuare chiamate dirette a AWS servizi come Amazon S3, DynamoDB AWS IoT e. AWS IoT Greengrass Per utilizzare un AWS SDK in una funzione Greengrass Lambda, è necessario includerlo nel pacchetto di distribuzione. Quando utilizzi l' AWS SDK nello stesso pacchetto dell'SDK AWS IoT Greengrass Core, assicurati che le funzioni Lambda utilizzino i namespace corretti. Le funzioni Greengrass Lambda non possono comunicare con i servizi cloud quando il core è offline.  
Scaricala AWS SDKs dal [Getting Started Resource Center](https://aws.amazon.com/getting-started/tools-sdks/).

Per ulteriori informazioni sulla creazione di un pacchetto di distribuzione, consulta [Creare e impacchettare una funzione Lambda](create-lambda.md) il tutorial Getting Started o [Creating a deployment package](https://docs.aws.amazon.com/lambda/latest/dg/deployment-package-v2.html) nella *AWS Lambda Developer Guide*.

### Migrazione delle funzioni Lambda basate sul cloud
<a name="lambda-migrate-sdks"></a>

Il AWS IoT Greengrass Core SDK segue il modello di programmazione AWS SDK, che semplifica il trasferimento delle funzioni Lambda sviluppate per il cloud in funzioni Lambda eseguite su un core. AWS IoT Greengrass 

Ad esempio, la seguente funzione Python Lambda utilizza AWS SDK per Python (Boto3) per pubblicare un messaggio sull'argomento `some/topic` nel cloud:

```
import boto3

iot_client = boto3.client("iot-data")
response = iot_client.publish(
    topic="some/topic", qos=0, payload="Some payload".encode()
)
```

Per eseguire il porting della funzione per un AWS IoT Greengrass core, nell'`import`istruzione e nell'`client`inizializzazione, modificate il nome del `boto3` modulo in`greengrasssdk`, come mostrato nell'esempio seguente:

```
import greengrasssdk

iot_client = greengrasssdk.client("iot-data")
iot_client.publish(topic="some/topic", qos=0, payload="Some payload".encode())
```

**Nota**  
Il AWS IoT Greengrass Core SDK supporta solo l'invio di messaggi MQTT con QoS = 0. Per ulteriori informazioni, consulta [Messaggio di qualità del servizio](gg-core.md#message-quality-of-service).

La somiglianza tra i modelli di programmazione consente inoltre di sviluppare le funzioni Lambda nel cloud e quindi AWS IoT Greengrass migrarle con il minimo sforzo. [Gli eseguibili Lambda](#lambda-executables) non vengono eseguiti nel cloud, quindi non puoi utilizzare l' AWS SDK per svilupparli nel cloud prima della distribuzione.

## Fai riferimento alle funzioni Lambda per alias o versione
<a name="lambda-versions-aliases"></a>

I gruppi Greengrass possono fare riferimento a una funzione Lambda tramite alias (consigliato) o per versione. L'utilizzo di un alias semplifica la gestione degli aggiornamenti del codice perché non è necessario modificare la tabella di sottoscrizione o la definizione del gruppo quando il codice della funzione viene aggiornato. È sufficiente invece indirizzare l'alias alla nuova versione della funzione. Gli alias si trasformano in numeri di versione durante la distribuzione di gruppo. Quando si utilizzano gli alias, la versione risolta viene aggiornata alla versione a cui punta l'alias al momento della distribuzione.

AWS IoT Greengrass **non supporta gli alias Lambda per le versioni \$1LATEST.** Le **versioni \$1LATEST** non sono legate a versioni di funzioni pubblicate e immutabili e possono essere modificate in qualsiasi momento, il che è contrario al principio dell'immutabilità della versione. AWS IoT Greengrass 

Una pratica comune per mantenere aggiornate le funzioni di Greengrass Lambda con le modifiche al codice consiste nell'utilizzare un alias denominato nel gruppo Greengrass e negli **PRODUCTION** abbonamenti. Quando promuovi nuove versioni della tua funzione Lambda in produzione, indirizza l'alias all'ultima versione stabile e quindi ridistribuisci il gruppo. Puoi anche scegliere di utilizzare questo metodo per eseguire il rollback a una versione precedente.

# Controllo dell'esecuzione delle funzioni Greengrass Lambda utilizzando la configurazione specifica del gruppo
<a name="lambda-group-config"></a>

AWS IoT Greengrass fornisce la gestione basata sul cloud delle funzioni di Greengrass Lambda. Sebbene il codice e le dipendenze di una funzione Lambda siano gestiti utilizzando AWS Lambda, è possibile configurare il comportamento della funzione Lambda quando viene eseguita in un gruppo Greengrass.

## Impostazioni di configurazione specifiche del gruppo
<a name="lambda-group-config-properties"></a>

AWS IoT Greengrass fornisce le seguenti impostazioni di configurazione specifiche del gruppo per le funzioni Greengrass Lambda.

**Utente e gruppo di sistema**  <a name="lambda-access-identity"></a>
L'identità di accesso utilizzata per eseguire una funzione Lambda. Per impostazione predefinita, le funzioni Lambda vengono eseguite come identità di [accesso predefinita](#lambda-access-identity-groupsettings) del gruppo. Di solito, questo è l'account di sistema AWS IoT Greengrass standard (ggc\$1user e ggc\$1group). Puoi modificare l'impostazione e scegliere l'ID utente e l'ID di gruppo che dispongono delle autorizzazioni necessarie per eseguire la funzione Lambda. Puoi sostituire sia l'UID che il GID o soltanto uno di essi se lasci vuoti l'altro campo. Questa impostazione offre un controllo più granulare sull'accesso alle risorse del dispositivo. Ti consigliamo di configurare l'hardware Greengrass con limiti di risorse, autorizzazioni di file e quote disco appropriati per gli utenti e i gruppi le cui autorizzazioni vengono utilizzate per eseguire le funzioni Lambda.  
Questa funzionalità è disponibile per AWS IoT Greengrass Core v1.7 e versioni successive.  
Ti consigliamo di evitare di eseguire le funzioni Lambda come root a meno che non sia assolutamente necessario. L'esecuzione come root aumenta i seguenti rischi:  
+ Il rischio di modifiche non intenzionali, come l'eliminazione accidentale di un file importante.
+ Il rischio per i dati e il dispositivo causato da individui malintenzionati.
+ Il rischio che si verifichi un container sfugge quando i container Docker vengono utilizzati con `--net=host` e. `UID=EUID=0`
Se è necessario eseguire l'esecuzione come root, è necessario aggiornare la AWS IoT Greengrass configurazione per abilitarla. Per ulteriori informazioni, consulta [Esecuzione di una funzione Lambda come utente root](#lambda-running-as-root).  
**ID utente del sistema (numero)**  
L'ID utente dell'utente che dispone delle autorizzazioni necessarie per eseguire la funzione Lambda. Questa impostazione è disponibile solo se scegli di eseguirla come **altro ID utente/ID** di gruppo. Puoi usare il **getent passwd** comando sul tuo dispositivo AWS IoT Greengrass principale per cercare l'ID utente che desideri utilizzare per eseguire la funzione Lambda.  
Se si utilizza lo stesso UID per eseguire i processi e la funzione Lambda su un dispositivo principale Greengrass, il ruolo del gruppo Greengrass può concedere ai processi credenziali temporanee. I processi possono utilizzare le credenziali temporanee nelle implementazioni principali di Greengrass.  
**ID del gruppo di sistema (numero)**  
L'ID di gruppo per il gruppo che dispone delle autorizzazioni necessarie per eseguire la funzione Lambda. Questa impostazione è disponibile solo se scegli di eseguirla come **un altro ID utente ID/group **. Puoi usare il **getent group** comando sul tuo dispositivo AWS IoT Greengrass principale per cercare l'ID del gruppo che desideri utilizzare per eseguire la funzione Lambda.

**Containerizzazione della funzione Lambda**  <a name="lambda-function-containerization"></a>
Scegli se la funzione Lambda viene eseguita con la containerizzazione predefinita per il gruppo o specifica la containerizzazione che deve essere sempre utilizzata per questa funzione Lambda.  
La modalità di containerizzazione di una funzione Lambda ne determina il livello di isolamento.  
+ **Le funzioni Lambda containerizzate vengono eseguite in modalità contenitore Greengrass.** La funzione Lambda viene eseguita in un ambiente di runtime isolato (o namespace) all'interno del contenitore. AWS IoT Greengrass 
+ **Le funzioni Lambda non containerizzate vengono eseguite in modalità No container.** Le funzioni Lambda vengono eseguite come un normale processo Linux senza alcun isolamento.
Questa funzionalità è disponibile per AWS IoT Greengrass Core v1.7 e versioni successive.  
Ti consigliamo di eseguire le funzioni Lambda in un contenitore Greengrass a meno che il tuo caso d'uso non richieda che vengano eseguite senza containerizzazione. Quando le funzioni Lambda vengono eseguite in un contenitore Greengrass, è possibile utilizzare le risorse locali e del dispositivo collegate e ottenere i vantaggi dell'isolamento e di una maggiore sicurezza. Prima di modificare l'impostazione di containerizzazione, consulta [Considerazioni sulla scelta della containerizzazione delle funzioni Lambda](#lambda-containerization-considerations).  
Per funzionare senza abilitare lo spazio dei nomi del kernel e il cgroup del dispositivo, tutte le funzioni Lambda devono essere eseguite senza containerizzazione. Puoi eseguire facilmente questa operazione impostando la containerizzazione predefinita per il gruppo. Per informazioni, consulta [Impostazione della containerizzazione predefinita per le funzioni Lambda in un gruppo](#lambda-containerization-groupsettings).

**Memory limit (Limite memoria)**  
L'allocazione di memoria per la funzione. Il valore predefinito è 16 MB.  
L'impostazione del limite di memoria non è disponibile quando si modifica la funzione Lambda in modo che venga eseguita senza containerizzazione. Le funzioni Lambda eseguite senza containerizzazione non hanno limiti di memoria. L'impostazione del limite di memoria viene eliminata quando si modifica l'impostazione di containerizzazione predefinita della funzione Lambda o del gruppo in modo che venga eseguita senza containerizzazione.

**Timeout**  
La quantità di tempo prima che la funzione o la richiesta venga terminata. Il valore predefinito è 3 secondi.

**Bloccato**  
**Il ciclo di vita di una funzione Lambda può essere su richiesta o di lunga durata.** Il valore predefinito è on demand.  
Una funzione Lambda su richiesta viene avviata in un contenitore nuovo o riutilizzato quando viene richiamata. Le richieste per la funzione potrebbero essere elaborate da qualsiasi container disponibile. Una funzione Lambda di lunga durata, o *bloccata*, si avvia automaticamente dopo AWS IoT Greengrass l'avvio e continua a funzionare nel proprio contenitore (o sandbox). Tutte le richieste per la funzione vengono elaborate dallo stesso container. Per ulteriori informazioni, consulta [Configurazione del ciclo di vita per le funzioni Greengrass Lambda](lambda-functions.md#lambda-lifecycle).

**Read access to /sys directory (Accesso in lettura alla directory /sys)**  
Indica se la funzione può accedere alla cartella /sys dell'host. Utilizza questa impostazione se la funzione deve leggere le informazioni del dispositivo da /sys. Il valore predefinito è false.  
Questa impostazione non è disponibile quando si esegue una funzione Lambda senza containerizzazione. Il valore di questa impostazione viene scartato quando si modifica la funzione Lambda in modo che venga eseguita senza containerizzazione.

**Tipo di codifica**  
Il tipo di codifica prevista del payload di input per la funzione, in formato JSON o binario. Il valore predefinito è JSON.  
Il supporto per il tipo di codifica binaria è disponibile a partire da AWS IoT Greengrass Core Software v1.5.0 e AWS IoT Greengrass Core SDK v1.1.0. L'accettazione dei dati di input binari può essere utile per le funzioni che interagiscono con i dati del dispositivo poiché le limitate funzionalità hardware dei dispositivi rendono spesso difficile o impossibile la creazione di un tipo di dati JSON.  
[Gli eseguibili Lambda](lambda-functions.md#lambda-executables) supportano solo il tipo di codifica binaria, non JSON.

**Argomenti del processo**  
Gli argomenti della riga di comando vengono passati alla funzione Lambda durante l'esecuzione.

**Variabili di ambiente**  
Le coppie chiave-valore che possono trasferire in modo dinamico le impostazioni al codice e alle librerie delle funzioni. Le variabili di ambiente locali funzionano nello stesso modo delle [variabili di ambiente delle funzioni AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/env_variables.html), ma sono disponibili nell'ambiente core.

**Policy di accesso alle risorse**  
Un elenco di un massimo di 10 [risorse locali](access-local-resources.md), [risorse segrete](secrets.md) e [risorse di apprendimento automatico](ml-inference.md) a cui la funzione Lambda può accedere e l'autorizzazione `read-only` o `read-write` corrispondente. Nella console, queste risorse *affiliate* sono elencate nella pagina di configurazione del gruppo nella scheda **Risorse**.  
La [modalità di containerizzazione influisce sul modo in](#lambda-function-containerization) cui le funzioni Lambda possono accedere alle risorse locali di dispositivi e volumi e alle risorse di machine learning.  
+ Le funzioni Lambda non containerizzate devono accedere alle risorse locali del dispositivo e del volume direttamente tramite il file system sul dispositivo principale.
+ Per consentire alle funzioni Lambda non containerizzate di accedere alle risorse di machine learning nel gruppo Greengrass, è necessario impostare le proprietà del proprietario della risorsa e delle autorizzazioni di accesso sulla risorsa di machine learning. Per ulteriori informazioni, consulta [Accedi alle risorse di machine learning dalle funzioni Lambda](access-ml-resources.md).

*Per informazioni sull'utilizzo dell' AWS IoT Greengrass API per impostare impostazioni di configurazione specifiche del gruppo per le funzioni Lambda definite dall'utente, [CreateFunctionDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/createfunctiondefinition-post.html)vedere nel riferimento *AWS IoT Greengrass Version 1 all'API [create-function-definition](https://docs.aws.amazon.com/cli/latest/reference/greengrass/create-function-definition.html)*o nel riferimento ai comandi.AWS CLI * [Per distribuire le funzioni Lambda su un core di Greengrass, crea una versione di definizione della funzione che contenga le tue funzioni, crea una versione di gruppo che faccia riferimento alla versione della definizione della funzione e ad altri componenti del gruppo, quindi distribuisci il gruppo.](deployments.md)

## Esecuzione di una funzione Lambda come utente root
<a name="lambda-running-as-root"></a>

Questa funzionalità è disponibile per AWS IoT Greengrass Core v1.7 e versioni successive.

Prima di poter eseguire una o più funzioni Lambda come root, devi prima aggiornare la AWS IoT Greengrass configurazione per abilitare il supporto. Il supporto per l'esecuzione delle funzioni Lambda come root è disattivato per impostazione predefinita. La distribuzione non riesce se si tenta di distribuire una funzione Lambda e di eseguirla come root (UID e GID pari a 0) e non si è aggiornata la configurazione. AWS IoT Greengrass Nel log di runtime (/.log) *greengrass\$1root* viene visualizzato un errore come il seguente: ggc/var/log/system/runtime

```
lambda(s)
[list of function arns] are configured to run as root while Greengrass is not configured to run lambdas with root permissions
```

**Importante**  
Ti consigliamo di evitare di eseguire le funzioni Lambda come root a meno che non sia assolutamente necessario. L'esecuzione come root aumenta i seguenti rischi:  
Il rischio di modifiche non intenzionali, come l'eliminazione accidentale di un file importante.
Il rischio per i dati e il dispositivo causato da individui malintenzionati.
Il rischio che si verifichi un container sfugge quando i container Docker vengono utilizzati con `--net=host` e. `UID=EUID=0`

**Per consentire l'esecuzione delle funzioni Lambda come root**

1. Sul tuo AWS IoT Greengrass dispositivo, accedi alla cartella *greengrass-root* /config.
**Nota**  
Per impostazione predefinita, *greengrass-root* è la directory /greengrass.

1. Modificare il file config.json per aggiungere `"allowFunctionsToRunAsRoot" : "yes"` al campo `runtime`. Esempio:

   ```
   {
     "coreThing" : {
       ...
     },
     "runtime" : {
       ...
       "allowFunctionsToRunAsRoot" : "yes"
     },
     ...
   }
   ```

1. Usa i seguenti comandi per riavviare: AWS IoT Greengrass

   ```
   cd /greengrass/ggc/core
   sudo ./greengrassd restart
   ```

   Ora puoi impostare l'ID utente e l'ID di gruppo (UID/GID) delle funzioni Lambda su 0 per eseguire quella funzione Lambda come root.

Puoi modificare il valore di `"allowFunctionsToRunAsRoot"` to `"no"` e restart AWS IoT Greengrass se desideri impedire l'esecuzione delle funzioni Lambda come root.

## Considerazioni sulla scelta della containerizzazione delle funzioni Lambda
<a name="lambda-containerization-considerations"></a>

Questa funzionalità è disponibile per AWS IoT Greengrass Core v1.7 e versioni successive.

Per impostazione predefinita, le funzioni Lambda vengono eseguite all'interno di un AWS IoT Greengrass contenitore. Questo container isola le funzioni dall'host, garantendo una maggiore sicurezza sia per l'host sia per le funzioni nel container.

Ti consigliamo di eseguire le funzioni Lambda in un contenitore Greengrass a meno che il tuo caso d'uso non richieda che vengano eseguite senza containerizzazione. Eseguendo le funzioni Lambda in un contenitore Greengrass, hai un maggiore controllo sulla limitazione dell'accesso alle risorse.

Di seguito sono riportati alcuni esempi di casi d'uso per l'esecuzione senza containerizzazione:
+ Vuoi eseguirlo AWS IoT Greengrass su un dispositivo che non supporta la modalità contenitore (ad esempio, perché stai usando una distribuzione Linux speciale o hai una versione del kernel troppo vecchia).
+ Vuoi eseguire la tua funzione Lambda in un altro ambiente contenitore con il proprio OverlayFS, ma riscontri conflitti OverlayFS quando esegui in un contenitore Greengrass.
+ È necessario accedere alle risorse locali con percorsi che non possono essere determinati al momento della distribuzione o che possono variare dopo la distribuzione, come nel caso dei dispositivi integrabili.
+ Hai un'applicazione legacy che è stata scritta come processo e hai riscontrato problemi durante l'esecuzione come funzione Lambda containerizzata.


**Differenze nella containerizzazione**  

| Containerizzazione | Note | 
| --- | --- | 
| Container Greengrass | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/greengrass/v1/developerguide/lambda-group-config.html) | 
| Nessun container | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/greengrass/v1/developerguide/lambda-group-config.html) | 

**Nota**  
L'impostazione predefinita della containerizzazione per il gruppo Greengrass non si applica ai [connettori](connectors.md).

La modifica della containerizzazione per una funzione Lambda può causare problemi durante la distribuzione. Se alla funzione Lambda sono state assegnate risorse locali che non sono più disponibili con le nuove impostazioni di containerizzazione, la distribuzione non riesce.
+ Quando si modifica una funzione Lambda dall'esecuzione in un contenitore Greengrass all'esecuzione senza containerizzazione, i limiti di memoria per la funzione vengono eliminati. È necessario accedere direttamente al file system anziché utilizzare le risorse locali collegate. Prima della distribuzione, è necessario rimuovere le risorse collegate.
+ Quando si modifica una funzione Lambda dall'esecuzione senza containerizzazione all'esecuzione in un contenitore, la funzione Lambda perde l'accesso diretto al file system. È necessario definire un limite di memoria per ogni funzione oppure accettare il valore predefinito di 16 MB. Puoi configurare queste impostazioni per ogni funzione Lambda prima della distribuzione.<a name="change-containerization-lambda"></a>

**Per modificare le impostazioni di containerizzazione per una funzione Lambda**

1. <a name="console-gg-groups"></a>Nel riquadro di navigazione della AWS IoT console, in **Gestione**, espandi **i dispositivi Greengrass**, quindi scegli **Gruppi (V1**).

1. <a name="lambda-choose-group"></a>Scegliete il gruppo che contiene la funzione Lambda di cui desiderate modificare le impostazioni.

1. <a name="lambda-choose-lambdas"></a>Scegli la scheda **Funzioni Lambda**.

1. <a name="lambda-edit-lambda"></a>**Sulla funzione Lambda che desideri modificare, scegli i puntini di sospensione (**...**), quindi scegli Modifica configurazione.**

1. Modifica le impostazioni di containerizzazione. Se si configura la funzione Lambda per l'esecuzione in un contenitore Greengrass, è inoltre necessario impostare **Limite di memoria** e **accesso in lettura alla** directory /sys.

1. <a name="lambda-save-changes"></a>Scegli **Salva** e quindi **Conferma** per salvare le modifiche alla tua funzione Lambda.

Le modifiche diventano effettive quando il gruppo viene distribuito.

Puoi anche usare il comando [CreateFunctionDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/createfunctiondefinition-post.html)e [CreateFunctionDefinitionVersion](https://docs.aws.amazon.com/greengrass/v1/apireference/createfunctiondefinitionversion-post.html)nell'*AWS IoT Greengrass API Reference.* Se stai modificando l'impostazione di containerizzazione, assicurati di aggiornare anche gli altri parametri. Ad esempio, se state passando dall'esecuzione di una funzione Lambda in un contenitore Greengrass all'esecuzione senza containerizzazione, assicuratevi di cancellare il parametro. `MemorySize`

### Determinare le modalità di isolamento supportate dal dispositivo Greengrass in uso
<a name="dependency-checker-tests-isolation"></a>

È possibile utilizzare il correttore delle AWS IoT Greengrass dipendenze per determinare quali modalità di isolamento ( container/no contenitore Greengrass) sono supportate dal dispositivo Greengrass.

**Per eseguire il controllo delle dipendenze AWS IoT Greengrass**

1. [Scarica ed esegui il controllo delle AWS IoT Greengrass dipendenze dal repository. GitHub](https://github.com/aws-samples/aws-greengrass-samples)

   ```
   wget https://github.com/aws-samples/aws-greengrass-samples/raw/master/greengrass-dependency-checker-GGCv1.11.x.zip
   unzip greengrass-dependency-checker-GGCv1.11.x.zip
   cd greengrass-dependency-checker-GGCv1.11.x
   sudo modprobe configs
   sudo ./check_ggc_dependencies | more
   ```

1. Nel punto in cui viene visualizzato `more`, premi il tasto Spacebar per visualizzare un'altra pagina di testo.

Per informazioni sul comando **modprobe**, esegui **man modprobe** nel terminale. 

## Impostazione dell'identità di accesso predefinita per le funzioni Lambda in un gruppo
<a name="lambda-access-identity-groupsettings"></a>

Questa funzionalità è disponibile per AWS IoT Greengrass Core v1.8 e versioni successive.

Per un maggiore controllo sull'accesso alle risorse del dispositivo, puoi configurare l'identità di accesso predefinita utilizzata per eseguire le funzioni Lambda nel gruppo. Questa impostazione determina le autorizzazioni predefinite concesse alle funzioni Lambda quando vengono eseguite sul dispositivo principale. Per sovrascrivere l'impostazione per singole funzioni nel gruppo, puoi utilizzare la proprietà **Run as (Esegui come)** della funzione. Per ulteriori informazioni, consulta [Run as (Esegui come)](#lambda-access-identity).

Questa impostazione a livello di gruppo viene utilizzata anche per eseguire il software Core sottostante. AWS IoT Greengrass Si tratta di funzioni Lambda di sistema che gestiscono le operazioni, come il routing dei messaggi, la sincronizzazione degli shadow locali e il rilevamento automatico degli indirizzi IP.

L'identità di accesso predefinita può essere configurata per essere eseguita come account di AWS IoT Greengrass sistema standard (ggc\$1user e ggc\$1group) o utilizzare le autorizzazioni di un altro utente o gruppo. Si consiglia di configurare l'hardware Greengrass con limiti di risorse, autorizzazioni di file e quote disco appropriati per tutti gli utenti e i gruppi le cui autorizzazioni vengono utilizzate per eseguire funzioni Lambda definite dall'utente o di sistema.

**Per modificare l'identità di accesso predefinita per il gruppo AWS IoT Greengrass**

1. <a name="console-gg-groups"></a>Nel riquadro di navigazione della AWS IoT console, in **Gestione**, espandi **i dispositivi Greengrass**, quindi scegli **Gruppi (V1**).

1. <a name="group-choose-group"></a>Scegli il gruppo di cui desideri modificare le impostazioni.

1. **Scegli la scheda **Funzioni Lambda** e, nella sezione **Ambiente di runtime della funzione Lambda predefinito**, scegli Modifica.**

1. Nella pagina **Modifica ambiente di runtime della funzione Lambda predefinito**, in **Utente e gruppo di sistema predefiniti, scegli **Un altro ID utente/ID** gruppo**.

   Quando scegli questa opzione, vengono visualizzati i campi **ID utente di sistema (numero)** e **ID del gruppo di sistema (numero)**.

1. Inserire un ID utente, un ID gruppo o entrambi. Se si lascia un campo vuoto, viene utilizzato il rispettivo account di sistema Greengrass (ggc\$1user o ggc\$1group).
   + Per **ID utente di sistema (numero)**, inserisci l'ID utente dell'utente che dispone delle autorizzazioni che desideri utilizzare di default per eseguire le funzioni Lambda nel gruppo. È possibile utilizzare il comando **getent passwd** sul dispositivo AWS IoT Greengrass per cercare l'ID utente.
   + Per **ID gruppo di sistema (numero)**, inserisci l'ID del gruppo che dispone delle autorizzazioni che desideri utilizzare di default per eseguire le funzioni Lambda nel gruppo. È possibile utilizzare il comando **getent group** sul dispositivo AWS IoT Greengrass per cercare l'ID gruppo.
**Importante**  
L'esecuzione come utente radice aumenta rischi per i dati e il dispositivo. Non eseguire come radice (UID/GID = 0) a meno che non sia richiesto dal business case. Per ulteriori informazioni, consulta [Esecuzione di una funzione Lambda come utente root](#lambda-running-as-root).

Le modifiche diventano effettive quando il gruppo viene distribuito.

## Impostazione della containerizzazione predefinita per le funzioni Lambda in un gruppo
<a name="lambda-containerization-groupsettings"></a>

Questa funzionalità è disponibile per AWS IoT Greengrass Core v1.7 e versioni successive.

L'impostazione di containerizzazione per un gruppo Greengrass determina la containerizzazione predefinita per le funzioni Lambda nel gruppo.
+ In modalità **contenitore Greengrass**, per impostazione predefinita, le funzioni Lambda vengono eseguite in un ambiente di runtime isolato all'interno del AWS IoT Greengrass contenitore.
+ In modalità **No container**, le funzioni Lambda vengono eseguite come normali processi Linux per impostazione predefinita.

È possibile modificare le impostazioni del gruppo per specificare la containerizzazione predefinita per le funzioni Lambda nel gruppo. Puoi sovrascrivere questa impostazione per una o più funzioni Lambda nel gruppo se desideri che le funzioni Lambda vengano eseguite con una containerizzazione diversa da quella predefinita del gruppo. Prima di modificare le impostazioni di containerizzazione, consulta [Considerazioni sulla scelta della containerizzazione delle funzioni Lambda](#lambda-containerization-considerations).

**Importante**  
Se desideri modificare la containerizzazione predefinita per il gruppo, ma disponi di una o più funzioni che utilizzano una containerizzazione diversa, modifica le impostazioni per le funzioni Lambda prima di modificare l'impostazione del gruppo. Se modifichi prima l'impostazione di containerizzazione del gruppo, i valori delle impostazioni **Memory Limit (Limite memoria)** e **Read access to /sys directory (Accesso in lettura alla directory /sys)** vengono ignorati.

**Per modificare le impostazioni di containerizzazione per il tuo gruppo AWS IoT Greengrass**

1. <a name="console-gg-groups"></a>Nel riquadro di navigazione della AWS IoT console, in **Gestione**, espandi **i dispositivi Greengrass**, quindi scegli **Gruppi (V1**).

1. <a name="group-choose-group"></a>Scegli il gruppo di cui desideri modificare le impostazioni.

1. Scegli la scheda **Funzioni Lambda**.

1. **In **Ambiente di runtime della funzione Lambda predefinito**, scegli Modifica.**

1. Nella pagina **Modifica ambiente di runtime della funzione Lambda predefinito**, in Containerizzazione predefinita della **funzione Lambda, modificare l'impostazione di containerizzazione**.

1. Scegli **Save** (Salva).

Le modifiche diventano effettive quando il gruppo viene distribuito.

## Flussi di comunicazione per le funzioni Greengrass Lambda
<a name="lambda-communication"></a>

Le funzioni di Greengrass Lambda supportano diversi metodi di comunicazione con altri membri del AWS IoT Greengrass gruppo, servizi locali e servizi cloud (inclusi i servizi). AWS 

### Comunicazione tramite messaggi MQTT
<a name="lambda-messages"></a>

Le funzioni Lambda possono inviare e ricevere messaggi MQTT utilizzando un pattern di pubblicazione e sottoscrizione controllato dagli abbonamenti.

Questo flusso di comunicazione consente alle funzioni Lambda di scambiare messaggi con le seguenti entità:
+ Dispositivi client del gruppo.
+ Connettori nel gruppo.
+ Altre funzioni Lambda del gruppo.
+ AWS IoT.
+ Servizio Device Shadow locale

Una sottoscrizione definisce un'origine del messaggio, una destinazione del messaggio e un argomento (o oggetto) utilizzato per instradare i messaggi dall'origine alla destinazione. I messaggi pubblicati su una funzione Lambda vengono passati al gestore registrato della funzione. Le sottoscrizioni garantiscono maggiore sicurezza e consentono interazioni prevedibili. Per ulteriori informazioni, consulta [Sottoscrizioni gestite nel flusso di lavoro di messaggistica MQTT](gg-sec.md#gg-msg-workflow).

**Nota**  
Quando il core è offline, le funzioni di Greengrass Lambda possono scambiare messaggi con dispositivi client, connettori, altre funzioni e shadow locali, ma i messaggi vengono messi in coda. AWS IoT Per ulteriori informazioni, consulta [Coda di messaggi MQTT per destinazioni sul cloud](gg-core.md#mqtt-message-queue).

### Altri flussi di comunicazione
<a name="lambda-other-communication"></a>
+ Per interagire con le risorse locali di dispositivi e volumi e i modelli di machine learning su un dispositivo principale, le funzioni Greengrass Lambda utilizzano interfacce di sistema operativo specifiche della piattaforma. Ad esempio, puoi utilizzare il metodo `open` nel modulo [os](https://docs.python.org/2/library/os.html) nelle funzioni Python. Per poter accedere a una risorsa, una funzione deve essere *affiliata* alla risorsa e deve disporre dell'autorizzazione `read-only` o `read-write`. Per ulteriori informazioni, inclusa la disponibilità della versione AWS IoT Greengrass base, vedere e. [Accedi alle risorse locali con funzioni e connettori Lambda](access-local-resources.md) [Accesso alle risorse di machine learning dal codice della funzione Lambda](access-ml-resources.md#access-resource-function-code)
**Nota**  
Se esegui la funzione Lambda senza containerizzazione, non puoi utilizzare le risorse locali e di volume collegate e devi accedere direttamente a tali risorse.
+ Le funzioni Lambda possono utilizzare il `Lambda` client nell'SDK AWS IoT Greengrass Core per richiamare altre funzioni Lambda nel gruppo Greengrass.
+ Le funzioni Lambda possono utilizzare l' AWS SDK per comunicare con i servizi. AWS [Per ulteriori informazioni, consulta AWS SDK.](#aws-sdk)
+ Le funzioni Lambda possono utilizzare interfacce di terze parti per comunicare con servizi cloud esterni, in modo simile alle funzioni Lambda basate sul cloud.

**Nota**  
Le funzioni di Greengrass Lambda non possono comunicare con AWS altri servizi cloud quando il core è offline.

## Recupero dell'argomento MQTT di input (o oggetto)
<a name="lambda-get-mqtt-topic"></a>

AWS IoT Greengrass utilizza gli abbonamenti per controllare lo scambio di messaggi MQTT tra dispositivi client, funzioni Lambda e connettori in un gruppo e con AWS IoT o il servizio shadow locale. Le sottoscrizioni definiscono un'origine messaggio, destinazione messaggio e un argomento MQTT utilizzati per instradare i messaggi. Quando la destinazione è una funzione Lambda, il gestore della funzione viene richiamato quando l'origine pubblica un messaggio. Per ulteriori informazioni, consulta [Comunicazione tramite messaggi MQTT](#lambda-messages).

L'esempio seguente mostra come una funzione Lambda può ottenere l'argomento di input da `context` quello passato al gestore. A tale scopo, esegue l'accesso alla chiave `subject` dalla gerarchia del contesto (`context.client_context.custom['subject']`). Nell'esempio viene inoltre analizzato il messaggio JSON di input e quindi pubblicati l'argomento e il messaggio analizzati.

**Nota**  
Nell' AWS IoT Greengrass API, l'argomento di un [abbonamento](https://docs.aws.amazon.com/greengrass/v1/apireference/definitions-subscription.html) è rappresentato dalla `subject` proprietà.

```
import greengrasssdk
import logging

client = greengrasssdk.client('iot-data')

OUTPUT_TOPIC = 'test/topic_results'

def get_input_topic(context):
    try:
        topic = context.client_context.custom['subject']
    except Exception as e:
        logging.error('Topic could not be parsed. ' + repr(e))
    return topic
    
def get_input_message(event):
    try:
        message = event['test-key']
    except Exception as e:
        logging.error('Message could not be parsed. ' + repr(e))
    return message

def function_handler(event, context):
    try:
        input_topic = get_input_topic(context)
        input_message = get_input_message(event)
        response = 'Invoked on topic "%s" with message "%s"' % (input_topic, input_message)
        logging.info(response)
    except Exception as e:
        logging.error(e)

    client.publish(topic=OUTPUT_TOPIC, payload=response)

    return
```

Per testare la funzione, aggiungerlo al gruppo utilizzando le impostazioni di configurazione predefinite. Quindi, aggiungere le seguenti sottoscrizioni e distribuire il gruppo. Per istruzioni, consulta [Modulo 3 (parte 1): funzioni Lambda su AWS IoT Greengrass](module3-I.md).


****  

| Origine | Target | Filtro di argomenti | 
| --- | --- | --- | 
| IoT Cloud | Questa funzione | test/input\$1message | 
| Questa funzione | IoT Cloud | test/topic\$1results | 

Al termine della distribuzione, invoca la funzione.

1. Nella AWS IoT console, apri la pagina del **client di test MQTT**.

1. Effettuate la sottoscrizione all'`test/topic_results`argomento selezionando la scheda **Sottoscrivi a un argomento**.

1. Pubblica un messaggio sull'`test/input_message`argomento selezionando la scheda **Pubblica su un argomento**. Per questo esempio, devi includere la proprietà `test-key` nel messaggio JSON.

   ```
   {
     "test-key": "Some string value"
   }
   ```

   In caso di esito positivo, la funzione pubblica l'argomento di input e la stringa di messaggio nell'argomento `test/topic_results`.

## Configurazione del ciclo di vita per le funzioni Greengrass Lambda
<a name="lambda-lifecycle"></a>

Il ciclo di vita della funzione Greengrass Lambda determina quando una funzione viene avviata e come crea e utilizza i contenitori. Inoltre, il ciclo di vita determina il modo in cui vengono conservate le variabili e la logica di preelaborazione che sono al di fuori dell'handler della funzione.

AWS IoT Greengrass supporta i cicli di vita on-demand (impostazione predefinita) o di lunga durata:
+ Le funzioni **on demand** vengono avviate quando vengono richiamate e terminano quando non vi sono più attività da eseguire. Il richiamo di una funzione crea un container (o sandbox) separato per elaborare i richiami, a meno che un container esistente non sia disponibile per essere riutilizzato. I dati inviati alla funzione possono essere stati estratti da uno qualsiasi dei container.

  È possibile eseguire in parallelo più richiami di una funzione on demand.

  Le variabili e la logica di preelaborazione definite al di fuori dell'handler della funzione non vengono conservate quando vengono creati nuovi container.
+ Le funzioni di **lunga durata** (o *bloccate*) si avviano automaticamente all'avvio del AWS IoT Greengrass core e vengono eseguite in un unico contenitore. Tutti i dati inviati alla funzione vengono estratti dallo stesso container.

  Numerosi richiami vengono messi in coda finché non vengono eseguiti i richiami precedenti.

  Le variabili e la logica di preelaborazione definite al di fuori dell'handler della funzione vengono conservate per ogni richiamo dell'handler.

  Le funzioni Lambda di lunga durata sono utili quando è necessario iniziare a lavorare senza alcun input iniziale. Ad esempio, una funzione di lunga durata è in grado di caricare e avviare l'elaborazione di un modello ML in modo che sia pronto quando la funzione inizia a ricevere i dati del dispositivo.
**Nota**  
Ricorda che le funzioni di lunga durata dispongono di timeout associati ai richiami dell'handler. Per eseguire il codice in esecuzione a tempo indeterminato, è necessario avviarlo al di fuori dell'handler. Assicurati che al di fuori dell'handler non vi sia alcun codice di blocco che possa impedire il completamento dell'inizializzazione della funzione.  
 Queste funzioni vengono eseguite a meno che il core non si arresti (ad esempio, durante una distribuzione di gruppo o il riavvio di un dispositivo) o che la funzione non entri in uno stato di errore (come un timeout del gestore, un'eccezione non rilevata o quando supera i limiti di memoria).

Per ulteriori informazioni sul riutilizzo dei contenitori, consulta [Understanding Container Reuse nel blog di Compute](https://aws.amazon.com/blogs/compute/container-reuse-in-lambda/). AWS Lambda AWS 

## Eseguibili Lambda
<a name="lambda-executables"></a>

Questa funzionalità è disponibile per AWS IoT Greengrass Core v1.6 e versioni successive.

Un eseguibile Lambda è un tipo di funzione Greengrass Lambda che è possibile utilizzare per eseguire codice binario nell'ambiente principale. Consente di eseguire funzionalità specifiche del dispositivo in modo nativo e di sfruttare l'ingombro ridotto del codice compilato. Gli eseguibili Lambda possono essere richiamati da eventi, richiamare altre funzioni e accedere a risorse locali.

Gli eseguibili Lambda supportano solo il tipo di codifica binaria (non JSON), ma per il resto puoi gestirli nel tuo gruppo Greengrass e distribuirli come le altre funzioni di Greengrass Lambda. Tuttavia, il processo di creazione degli eseguibili Lambda è diverso dalla creazione delle funzioni Lambda Python, Java e Node.js:
+ Non puoi usare la AWS Lambda console per creare (o gestire) un eseguibile Lambda. Puoi creare un eseguibile Lambda solo utilizzando l' AWS Lambda API.
+ Carichi il codice della funzione AWS Lambda come eseguibile compilato che include [AWS IoT Greengrass Core SDK per C.](https://github.com/aws/aws-greengrass-core-sdk-c)
+ È necessario specificare il nome dell'eseguibile come handler della funzione.

Gli eseguibili Lambda devono implementare determinate chiamate e modelli di programmazione nel codice della funzione. Ad esempio, il metodo `main` deve effettuare le seguenti operazioni:
+ Eseguire una chiamata a `gg_global_init` per inizializzare le variabili globali interne Greengrass. Questa funzione deve essere chiamata prima di creare qualsiasi thread e prima di chiamare qualsiasi altra funzione AWS IoT Greengrass Core SDK.
+ Chiama `gg_runtime_start` per registrare il gestore di funzioni con il runtime Greengrass Lambda. Questa funzione deve essere chiamata durante l'inizializzazione. La chiamata di questa funzione fa sì che il thread corrente venga utilizzato dal runtime. Il parametro facoltativo `GG_RT_OPT_ASYNC` indica a questa funzione di non bloccare, ma di creare un nuovo thread per il runtime. Questa funzione utilizza un handler `SIGTERM`.

[Il frammento seguente è il `main` metodo tratto dall'esempio di codice simple\$1handler.c in poi.](https://github.com/aws/aws-greengrass-core-sdk-c/blob/master/aws-greengrass-core-sdk-c-example/simple_handler.c) GitHub

```
int main() {
    gg_error err = GGE_SUCCESS;

    err = gg_global_init(0);
    if(err) {
        gg_log(GG_LOG_ERROR, "gg_global_init failed %d", err);
        goto cleanup;
    }

    gg_runtime_start(handler, 0);

cleanup:
    return -1;
}
```

[Per ulteriori informazioni su requisiti, vincoli e altri dettagli di implementazione, consulta Core SDK for C.AWS IoT Greengrass](https://github.com/aws/aws-greengrass-core-sdk-c)

### Creare un file eseguibile Lambda
<a name="create-lambda-executable"></a>

Dopo aver compilato il codice insieme all'SDK, usa l' AWS Lambda API per creare una funzione Lambda e caricare l'eseguibile compilato.

**Nota**  
La funzione devono essere compilata utilizzando un compilatore compatibile con C89.

L'esempio seguente utilizza il comando [CLI create-function](https://docs.aws.amazon.com/cli/latest/reference/lambda/create-function.html) per creare un eseguibile Lambda. Il comando specifica:
+ Il nome dell'eseguibile per l'handler. Deve corrispondere al nome esatto dell'eseguibile compilato.
+ Il percorso del file `.zip` contenente l'eseguibile compilato.
+ `arn:aws:greengrass:::runtime/function/executable` per il runtime. Questo è il runtime per tutti gli eseguibili Lambda.

**Nota**  
Infatti`role`, puoi specificare l'ARN di qualsiasi ruolo di esecuzione Lambda. AWS IoT Greengrass non utilizza questo ruolo, ma il parametro è necessario per creare la funzione. *Per ulteriori informazioni sui ruoli di esecuzione Lambda, consulta il [modello di AWS Lambda autorizzazioni](https://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html) nella Guida per gli AWS Lambda sviluppatori.*

```
aws lambda create-function \
--region aws-region \
--function-name function-name \
--handler executable-name \
--role role-arn \
--zip-file fileb://file-name.zip \
--runtime arn:aws:greengrass:::runtime/function/executable
```

Successivamente, utilizza l' AWS Lambda API per pubblicare una versione e creare un alias.
+ Utilizza [publish-version](https://docs.aws.amazon.com/cli/latest/reference/lambda/publish-version.html) per pubblicare una versione della funzione.

  ```
  aws lambda publish-version \
  --function-name function-name \
  --region aws-region
  ```
+ Utilizza [create-alias](https://docs.aws.amazon.com/cli/latest/reference/lambda/create-alias.html) per creare un alias che punti alla versione appena pubblicata. Ti consigliamo di fare riferimento alle funzioni Lambda tramite alias quando le aggiungi a un gruppo Greengrass.

  ```
  aws lambda create-alias \
  --function-name function-name \
  --name alias-name \
  --function-version version-number \
  --region aws-region
  ```

**Nota**  
La AWS Lambda console non visualizza gli eseguibili Lambda. Per aggiornare il codice della funzione, è necessario utilizzare l' AWS Lambda API.

Quindi, aggiungi l'eseguibile Lambda a un gruppo Greengrass, configuralo per accettare dati di input binari nelle impostazioni specifiche del gruppo e distribuisci il gruppo. Puoi farlo nella AWS IoT Greengrass console o utilizzando l'API. AWS IoT Greengrass 

# Esecuzione AWS IoT Greengrass in un contenitore Docker
<a name="run-gg-in-docker-container"></a>

AWS IoT Greengrass [può essere configurato per l'esecuzione in un contenitore Docker.](https://www.docker.com/)

Puoi scaricare un Dockerfile tramite [Amazon su CloudFront](what-is-gg.md#gg-docker-download) cui sono installati il software AWS IoT Greengrass Core e le dipendenze. Per modificare l'immagine Docker per l'esecuzione su architetture della piattaforma diverse o ridurre la dimensione dell'immagine Docker, consulta il file `README` nel download del pacchetto Docker.

Per aiutarti a iniziare a sperimentare AWS IoT Greengrass, fornisce AWS anche immagini Docker predefinite su cui sono installati il AWS IoT Greengrass software Core e le dipendenze. Puoi scaricare un'immagine da [Docker Hub](https://hub.docker.com/r/amazon/aws-iot-greengrass) o [Amazon Elastic Container Registry](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) (Amazon ECR). Queste immagini predefinite utilizzano immagini di base Amazon Linux 2 (x86\$164) e Alpine Linux (x86\$164, ARMv7L o). AArch64

**Importante**  
<a name="docker-images-end-of-maintenance"></a>Il 30 giugno 2022, AWS IoT Greengrass è terminata la manutenzione delle immagini Docker del software AWS IoT Greengrass Core v1.x pubblicate su Amazon Elastic Container Registry (Amazon ECR) e Docker Hub. Puoi continuare a scaricare queste immagini Docker da Amazon ECR e Docker Hub fino al 30 giugno 2023, ovvero 1 anno dopo la fine della manutenzione. Tuttavia, le immagini Docker del software AWS IoT Greengrass Core v1.x non ricevono più patch di sicurezza o correzioni di bug dopo la fine della manutenzione il 30 giugno 2022. Se esegui un carico di lavoro di produzione che dipende da queste immagini Docker, ti consigliamo di creare le tue immagini Docker utilizzando i Dockerfile forniti. AWS IoT Greengrass  Per ulteriori informazioni, consulta [AWS IoT Greengrass Software Docker](what-is-gg.md#gg-docker-download).

Questo argomento descrive come scaricare l'immagine AWS IoT Greengrass Docker da Amazon ECR ed eseguirla su una piattaforma Windows, macOS o Linux (x86\$164). L’argomento include le seguenti fasi:

1. [Ottieni l'immagine del AWS IoT Greengrass contenitore da Amazon ECR](#docker-pull-image)

1. [Creazione e configurazione del gruppo e del core Greengrass](#docker-config-gg)

1. [Esegui AWS IoT Greengrass localmente](#docker-run-gg)

1. [Configurazione della containerizzazione "No container" per il gruppo](#docker-no-container)

1. [Distribuisci le funzioni Lambda nel contenitore Docker](#docker-add-lambdas)

1. [(Facoltativo) Implementa i dispositivi client che interagiscono con Greengrass nel contenitore Docker](#docker-add-devices)

Le seguenti funzionalità non sono supportate quando vengono eseguite in un contenitore Docker: AWS IoT Greengrass <a name="docker-image-unsupported-features"></a>
+ [Connettori](connectors.md) eseguiti in modalità **container Greengrass**. Per eseguire un connettore in un container Docker, il connettore deve essere eseguito in modalità **Nessun container**. Per trovare i connettori che supportano la modalità **Nessun container** consulta [AWS-connettori Greengrass forniti](connectors-list.md). Alcuni di questi connettori dispongono di un parametro della modalità di isolamento che devi impostare su **No container (Nessun contenitore)**.
+ [Risorse volume e dispositivo locale](access-local-resources.md). Le funzioni Lambda definite dall'utente che vengono eseguite nel contenitore Docker devono accedere direttamente ai dispositivi e ai volumi sul core.

Queste funzionalità non sono supportate quando l'ambiente di runtime Lambda per il gruppo Greengrass è impostato su [Nessun contenitore](lambda-group-config.md#no-container-mode), necessario per l'esecuzione AWS IoT Greengrass in un contenitore Docker.

## Prerequisiti
<a name="docker-image-prerequisites"></a>

Prima di iniziare questo tutorial, devi fare quanto segue.<a name="docker-image-prereq-list"></a>
+ È necessario installare il software e le versioni seguenti sul computer host in base alla versione AWS Command Line Interface (AWS CLI) scelta.

------
#### [ AWS CLI version 2 ]
  + [Docker](https://docs.docker.com/install/) versione 18.09 o successiva. Anche le versioni precedenti potrebbero funzionare, ma consigliamo 18.09 o successive.
  + AWS CLI versione 2.0.0 o successiva.
    + Per installare la AWS CLI versione 2, vedere [Installazione della AWS CLI versione](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) 2.
    + Per configurare AWS CLI, vedere [Configurazione di AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html).
**Nota**  
Per eseguire l'aggiornamento a una AWS CLI versione 2 successiva su un computer Windows, è necessario ripetere la procedura di [installazione MSI](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-windows.html).

------
#### [ AWS CLI version 1 ]
  + [Docker](https://docs.docker.com/install/) versione 18.09 o successiva. Anche le versioni precedenti potrebbero funzionare, ma consigliamo 18.09 o successive.
  + [Python](https://www.python.org/downloads/) versione 3.6 o successiva.
  + [pip](https://pip.pypa.io/en/stable/installing) versione 18.1 o successiva.
  + AWS CLI versione 1.17.10 o successiva
    + Per installare la AWS CLI versione 1, vedi [Installazione della AWS CLI versione](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html) 1.
    + Per configurare AWS CLI, vedere [Configurazione di AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html).
    + Per eseguire l'aggiornamento alla versione più recente della AWS CLI versione 1, esegui il comando seguente.

      ```
      pip install awscli --upgrade --user
      ```
**Nota**  
Se utilizzi l'[installazione MSI](https://docs.aws.amazon.com/cli/latest/userguide/install-windows.html#msi-on-windows) della AWS CLI versione 1 su Windows, tieni presente quanto segue:  
Se l'installazione della AWS CLI versione 1 non riesce a installare botocore, prova a utilizzare l'installazione di [Python](https://docs.aws.amazon.com/cli/latest/userguide/awscli-install-windows.html#awscli-install-windows-pip) e pip.
Per eseguire l'aggiornamento a una AWS CLI versione 1 successiva, è necessario ripetere il processo di installazione MSI.

------
+ Per accedere alle risorse di Amazon Elastic Container Registry (Amazon ECR), devi concedere la seguente autorizzazione. 
  + Amazon ECR richiede agli utenti di concedere l'`ecr:GetAuthorizationToken`autorizzazione tramite una policy AWS Identity and Access Management (IAM) prima di poter autenticarsi in un registro e inviare o estrarre immagini da 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](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security_iam_id-based-policy-examples.html#security_iam_id-based-policy-examples-access-one-bucket) *Elastic Container* Registry User Guide.

## Fase 1: ottenere l'immagine del AWS IoT Greengrass contenitore da Amazon ECR
<a name="docker-pull-image"></a>

AWS fornisce immagini Docker su cui è installato il software AWS IoT Greengrass Core.

**avvertimento**  <a name="docker-images-python-2.7-removal"></a>
A partire dalla v1.11.6 del software AWS IoT Greengrass Core, le immagini Greengrass Docker non includono più Python 2.7, perché Python 2.7 end-of-life è arrivato nel 2020 e non riceve più aggiornamenti di sicurezza. Se scegli di eseguire l'aggiornamento a queste immagini Docker, ti consigliamo di verificare che le tue applicazioni funzionino con le nuove immagini Docker prima di distribuire gli aggiornamenti sui dispositivi di produzione. Se hai bisogno di Python 2.7 per la tua applicazione che utilizza un'immagine Greengrass Docker, puoi modificare il Dockerfile Greengrass per includere Python 2.7 per la tua applicazione.

Per i passaggi che mostrano come estrarre l'`latest`immagine da Amazon ECR, scegli il tuo sistema operativo:

### Estrazione dell'immagine del container (Linux)
<a name="docker-pull-image-linux"></a>

Esegui i seguenti comandi nel terminale del computer.

1. <a name="docker-get-login"></a>Accedi al AWS IoT Greengrass registro in Amazon ECR.

   ```
   aws ecr get-login-password --region  us-west-2 | docker login --username AWS --password-stdin https://216483018798.dkr.ecr.us-west-2.amazonaws.com
   ```

   In caso di esito positivo, l'output stampa `Login Succeeded`.

1. <a name="docker-docker-pull"></a>Recupera l'immagine del AWS IoT Greengrass contenitore.

   ```
   docker pull 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```
**Nota**  
L'`latest`immagine contiene l'ultima versione stabile del software AWS IoT Greengrass Core installato su un'immagine base di Amazon Linux 2. È anche possibile estrarre altre versioni dall'archivio. Per trovare tutte le immagini disponibili, controlla la pagina **Tag** in [Docker Hub](https://hub.docker.com/r/amazon/aws-iot-greengrass) o usa il comando **aws ecr list-images**. Esempio:  

   ```
   aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
   ```

1. Abilita la protezione symlink e hardlink. Se stai sperimentando l'esecuzione AWS IoT Greengrass in un container, puoi abilitare le impostazioni solo per l'avvio corrente.
**Nota**  
Potresti dover utilizzare **sudo** per eseguire questi comandi.
   + Per abilitare le impostazioni solo per l'avvio corrente:

     ```
     echo 1 > /proc/sys/fs/protected_hardlinks
     echo 1 > /proc/sys/fs/protected_symlinks
     ```
   + Per rendere le impostazioni persistenti in caso di riavvio:

     ```
     echo '# AWS IoT Greengrass' >> /etc/sysctl.conf 
     echo 'fs.protected_hardlinks = 1' >> /etc/sysctl.conf 
     echo 'fs.protected_symlinks = 1' >> /etc/sysctl.conf
     
     sysctl -p
     ```

1. <a name="docker-linux-enable-ipv4"></a>Abilita l'inoltro di IPv4 rete, necessario per l'implementazione AWS IoT Greengrass cloud e le comunicazioni MQTT per funzionare su Linux. Nel file `/etc/sysctl.conf`, imposta `net.ipv4.ip_forward` su 1, quindi ricarica `sysctls`.

   ```
   sudo nano /etc/sysctl.conf
   # set this net.ipv4.ip_forward = 1
   sudo sysctl -p
   ```
**Nota**  
Puoi utilizzare l'editor che desideri al posto di nano.

### Estrazione dell'immagine del container (macOS)
<a name="docker-pull-image-mac"></a>

Esegui i seguenti comandi nel terminale del computer.

1. <a name="docker-get-login"></a>Accedi al AWS IoT Greengrass registro in Amazon ECR.

   ```
   aws ecr get-login-password --region  us-west-2 | docker login --username AWS --password-stdin https://216483018798.dkr.ecr.us-west-2.amazonaws.com
   ```

   In caso di esito positivo, l'output stampa `Login Succeeded`.

1. <a name="docker-docker-pull"></a>Recupera l'immagine del AWS IoT Greengrass contenitore.

   ```
   docker pull 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```
**Nota**  
L'`latest`immagine contiene l'ultima versione stabile del software AWS IoT Greengrass Core installato su un'immagine base di Amazon Linux 2. È anche possibile estrarre altre versioni dall'archivio. Per trovare tutte le immagini disponibili, controlla la pagina **Tag** in [Docker Hub](https://hub.docker.com/r/amazon/aws-iot-greengrass) o usa il comando **aws ecr list-images**. Esempio:  

   ```
   aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
   ```

### Estrazione dell'immagine del container (Windows)
<a name="docker-pull-image-windows"></a>

Esegui i comandi seguenti in un prompt di comandi. Prima di utilizzare i comandi di Docker su Windows, Docker Desktop deve essere in esecuzione.

1. <a name="docker-get-login"></a>Accedi al AWS IoT Greengrass registro in Amazon ECR.

   ```
   aws ecr get-login-password --region  us-west-2 | docker login --username AWS --password-stdin https://216483018798.dkr.ecr.us-west-2.amazonaws.com
   ```

   In caso di esito positivo, l'output stampa `Login Succeeded`.

1. <a name="docker-docker-pull"></a>Recupera l'immagine del AWS IoT Greengrass contenitore.

   ```
   docker pull 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```
**Nota**  
L'`latest`immagine contiene l'ultima versione stabile del software AWS IoT Greengrass Core installato su un'immagine base di Amazon Linux 2. È anche possibile estrarre altre versioni dall'archivio. Per trovare tutte le immagini disponibili, controlla la pagina **Tag** in [Docker Hub](https://hub.docker.com/r/amazon/aws-iot-greengrass) o usa il comando **aws ecr list-images**. Esempio:  

   ```
   aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
   ```

## Fase 2: creazione e configurazione del gruppo e del core Greengrass
<a name="docker-config-gg"></a>

Nell'immagine Docker è installato il software AWS IoT Greengrass Core, ma è necessario creare un gruppo e un core Greengrass. Questa operazione include il download dei certificati e del file di configurazione del core.
+ Segui la procedura riportata in [Modulo 2: Installazione del software AWS IoT Greengrass Core](module2.md). Salta i passaggi in cui scarichi ed esegui il AWS IoT Greengrass software Core. Il software e le dipendenze di runtime sono già impostati nell'immagine Docker.

## Passaggio 3: Esegui localmente AWS IoT Greengrass
<a name="docker-run-gg"></a>

Una volta configurato il gruppo, è possibile configurare e avviare il core. Per le fasi che mostrano come eseguire questa operazione, scegli il sistema operativo:

### Esecuzione di Greengrass in locale (Linux)
<a name="docker-run-gg-linux"></a>

Esegui i seguenti comandi nel terminale del computer.

1. <a name="docker-create-certs-folder"></a>Crea una cartella per le risorse di sicurezza del dispositivo e sposta il certificato e le chiavi in quella cartella. Esegui i comandi seguenti. Sostituiscila *path-to-security-files* con il percorso delle risorse di sicurezza e *certificateId* sostituiscila con l'ID del certificato nei nomi dei file.

   ```
   mkdir /tmp/certs
   mv path-to-security-files/certificateId-certificate.pem.crt /tmp/certs
   mv path-to-security-files/certificateId-public.pem.key /tmp/certs
   mv path-to-security-files/certificateId-private.pem.key /tmp/certs
   mv path-to-security-files/AmazonRootCA1.pem /tmp/certs
   ```

1. <a name="docker-create-config-folder"></a>Crea una cartella per la configurazione del dispositivo e sposta il file di configurazione AWS IoT Greengrass Core in quella cartella. Esegui i comandi seguenti. Sostituiscilo *path-to-config-file* con il percorso del file di configurazione.

   ```
   mkdir /tmp/config
   mv path-to-config-file/config.json /tmp/config
   ```

1. <a name="docker-docker-run"></a>Avvia AWS IoT Greengrass e installa i certificati e il file di configurazione nel contenitore Docker.

   Sostituisci `/tmp` con il percorso in cui hai decompresso i certificati e il file di configurazione.

   ```
   docker run --rm --init -it --name aws-iot-greengrass \
   --entrypoint /greengrass-entrypoint.sh \
   -v /tmp/certs:/greengrass/certs \
   -v /tmp/config:/greengrass/config \
   -p 8883:8883 \
   216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```

   L'output dovrebbe essere simile al seguente:

   ```
   Setting up greengrass daemon
   Validating hardlink/softlink protection
   Waiting for up to 30s for Daemon to start
   
   Greengrass successfully started with PID: 10
   ```

### Esecuzione di Greengrass in locale (macOS)
<a name="docker-run-gg-mac"></a>

Esegui i seguenti comandi nel terminale del computer.

1. <a name="docker-create-certs-folder"></a>Crea una cartella per le risorse di sicurezza del dispositivo e sposta il certificato e le chiavi in quella cartella. Esegui i comandi seguenti. Sostituiscila *path-to-security-files* con il percorso delle risorse di sicurezza e *certificateId* sostituiscila con l'ID del certificato nei nomi dei file.

   ```
   mkdir /tmp/certs
   mv path-to-security-files/certificateId-certificate.pem.crt /tmp/certs
   mv path-to-security-files/certificateId-public.pem.key /tmp/certs
   mv path-to-security-files/certificateId-private.pem.key /tmp/certs
   mv path-to-security-files/AmazonRootCA1.pem /tmp/certs
   ```

1. <a name="docker-create-config-folder"></a>Crea una cartella per la configurazione del dispositivo e sposta il file di configurazione AWS IoT Greengrass Core in quella cartella. Esegui i comandi seguenti. Sostituiscilo *path-to-config-file* con il percorso del file di configurazione.

   ```
   mkdir /tmp/config
   mv path-to-config-file/config.json /tmp/config
   ```

1. <a name="docker-docker-run"></a>Avvia AWS IoT Greengrass e installa i certificati e il file di configurazione nel contenitore Docker.

   Sostituisci `/tmp` con il percorso in cui hai decompresso i certificati e il file di configurazione.

   ```
   docker run --rm --init -it --name aws-iot-greengrass \
   --entrypoint /greengrass-entrypoint.sh \
   -v /tmp/certs:/greengrass/certs \
   -v /tmp/config:/greengrass/config \
   -p 8883:8883 \
   216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```

   L'output dovrebbe essere simile al seguente:

   ```
   Setting up greengrass daemon
   Validating hardlink/softlink protection
   Waiting for up to 30s for Daemon to start
   
   Greengrass successfully started with PID: 10
   ```

### Esecuzione di Greengrass in locale (Windows)
<a name="docker-run-gg-windows"></a>

1. Crea una cartella per le risorse di sicurezza del dispositivo e sposta il certificato e le chiavi in quella cartella. Esegui i comandi seguenti in un prompt di comandi. Sostituiscila *path-to-security-files* con il percorso delle risorse di sicurezza e *certificateId* sostituiscila con l'ID del certificato nei nomi dei file.

   ```
   mkdir C:\Users\%USERNAME%\Downloads\certs
   move path-to-security-files\certificateId-certificate.pem.crt C:\Users\%USERNAME%\Downloads\certs
   move path-to-security-files\certificateId-public.pem.key C:\Users\%USERNAME%\Downloads\certs
   move path-to-security-files\certificateId-private.pem.key C:\Users\%USERNAME%\Downloads\certs
   move path-to-security-files\AmazonRootCA1.pem C:\Users\%USERNAME%\Downloads\certs
   ```

1. Crea una cartella per la configurazione del dispositivo e sposta il file di configurazione AWS IoT Greengrass Core in quella cartella. Esegui i comandi seguenti in un prompt di comandi. Sostituiscilo *path-to-config-file* con il percorso del file di configurazione.

   ```
   mkdir C:\Users\%USERNAME%\Downloads\config
   move path-to-config-file\config.json C:\Users\%USERNAME%\Downloads\config
   ```

1. Avvia AWS IoT Greengrass e installa i certificati e il file di configurazione nel contenitore Docker. Esegui i comandi seguenti nel prompt di comandi.

   ```
   docker run --rm --init -it --name aws-iot-greengrass --entrypoint /greengrass-entrypoint.sh -v c:/Users/%USERNAME%/Downloads/certs:/greengrass/certs -v c:/Users/%USERNAME%/Downloads/config:/greengrass/config -p 8883:8883 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```

   Quando Docker ti richiede di condividere l'unità `C:\` con il daemon Docker, consenti di eseguire il montaggio vincolato della directory `C:\` all'interno del container Docker. Per ulteriori informazioni, consulta la sezione relativa alle [unità condivise](https://docs.docker.com/docker-for-windows/#shared-drives) nella documentazione Docker. 

   L'output dovrebbe essere simile al seguente:

   ```
   Setting up greengrass daemon
   Validating hardlink/softlink protection
   Waiting for up to 30s for Daemon to start
   
   Greengrass successfully started with PID: 10
   ```

**Nota**  
Se il container non apre la shell e si chiude immediatamente, puoi eseguire il debug del problema mediante il montaggio vincolato dei log di runtime di Greengrass all'avvio dell'immagine. Per ulteriori informazioni, consulta [Per rendere persistenti i log di runtime Greengrass all'interno del container Docker](#debugging-docker-persist-logs).

## Fase 4: configurazione della containerizzazione "No container" per il gruppo Greengrass
<a name="docker-no-container"></a>

Quando si esegue AWS IoT Greengrass in un contenitore Docker, tutte le funzioni Lambda devono essere eseguite senza containerizzazione. In questa fase, assicurati di aver impostato la containerizzazione predefinita per il gruppo su **No container (Nessun container)**. È necessario eseguire questa operazione prima di distribuire il gruppo per la prima volta.

1. <a name="console-gg-groups"></a>Nel riquadro di navigazione della AWS IoT console, in **Gestione**, espandi **i dispositivi Greengrass**, quindi scegli **Gruppi (V1**).

1. <a name="group-choose-group"></a>Scegli il gruppo di cui desideri modificare le impostazioni.

1. Scegli la scheda **Funzioni Lambda**.

1. **In **Ambiente di runtime della funzione Lambda predefinito**, scegli Modifica.**

1. Nell'**ambiente di runtime Modifica funzione Lambda predefinita**, in Containerizzazione predefinita della **funzione Lambda, modifica le impostazioni di containerizzazione**.

1. Scegli **Save** (Salva).

Le modifiche diventano effettive quando il gruppo viene distribuito.

Per ulteriori informazioni, consulta [Impostazione della containerizzazione predefinita per le funzioni Lambda in un gruppo](lambda-group-config.md#lambda-containerization-groupsettings).

**Nota**  
Per impostazione predefinita, le funzioni Lambda utilizzano l'impostazione di containerizzazione del gruppo. Se sovrascrivi l'impostazione **Nessun contenitore** per qualsiasi funzione Lambda AWS IoT Greengrass quando è in esecuzione in un contenitore Docker, la distribuzione non riesce.

## Fase 5: Implementazione delle funzioni Lambda nel contenitore Docker AWS IoT Greengrass
<a name="docker-add-lambdas"></a>

Puoi distribuire funzioni Lambda di lunga durata nel contenitore Greengrass Docker.
+ Segui i passaggi [Modulo 3 (parte 1): funzioni Lambda su AWS IoT Greengrass](module3-I.md) per distribuire una funzione Hello World Lambda di lunga durata nel contenitore.

## Passaggio 6: (Facoltativo) Implementa i dispositivi client che interagiscono con Greengrass in esecuzione nel contenitore Docker
<a name="docker-add-devices"></a>

Puoi anche distribuire dispositivi client con cui interagiscono AWS IoT Greengrass quando è in esecuzione in un contenitore Docker.
+ Segui i passaggi indicati [Modulo 4: Interazione con i dispositivi client in un gruppo AWS IoT Greengrass](module4.md) per distribuire dispositivi client che si connettono al core e inviano messaggi MQTT.

## Arresto del contenitore Docker AWS IoT Greengrass
<a name="docker-stop"></a>

Per fermare il contenitore AWS IoT Greengrass Docker, premi Ctrl\$1C nel terminale o nel prompt dei comandi. Questa azione invia `SIGTERM` al processo daemon Greengrass il compito di eliminare il processo daemon Greengrass e tutti i processi Lambda che sono stati avviati dal processo daemon. Il container Docker viene inizializzato con il processo `/dev/init` come PID 1 per facilitare la rimozione di eventuali processi zombie rimanenti. Per ulteriori informazioni, consulta la [pagina di riferimento per l'esecuzione del Docker](https://docs.docker.com/engine/reference/commandline/run/#options).

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

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

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

**Soluzione:** 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>

**Soluzione:** questo errore può verificarsi quando si esegue il comando `aws ecr get-login`. Assicurati di avere installata la AWS CLI versione più recente (ad esempio, esegui:`pip install awscli --upgrade --user`). Se utilizzi Windows e hai installato l'interfaccia a riga di comando utilizzando il programma di installazione di MSI, è necessario ripetere il processo di installazione. 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*.

### Attenzione: IPv4 è disattivata. Networking non funzionerà.
<a name="docker-troubleshooting-ipv4-disabled"></a>

**Soluzione:** è possibile che venga visualizzato questo avviso o un messaggio simile quando si esegue AWS IoT Greengrass su un computer Linux. [Abilita l'inoltro di IPv4 rete come descritto in questo passaggio.](#docker-linux-enable-ipv4) AWS IoT Greengrass l'implementazione nel cloud e le comunicazioni MQTT non funzionano quando l' IPv4 inoltro non è abilitato. Per ulteriori informazioni, consulta [Configurazione di parametri kernel associati a uno spazio dei nomi (sysctls) durante il runtime](https://docs.docker.com/engine/reference/commandline/run/#configure-namespaced-kernel-parameters-sysctls-at-runtime) nella documentazione Docker.

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

**Soluzione:** è possibile ricevere questo errore o un messaggio `Firewall Detected` quando viene eseguito 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/ <account-id><user-name>non è 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 [Esempi di policy per i repository di Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-policy-examples.html) e [Accesso a un repository Amazon ECR nella](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security_iam_id-based-policy-examples.html) *Amazon* ECR User Guide.

Per informazioni generali AWS IoT Greengrass sulla risoluzione dei problemi, consulta. [Risoluzione dei problemi AWS IoT Greengrass](gg-troubleshooting.md)

### Esecuzione del debug AWS IoT Greengrass in un contenitore Docker
<a name="debugging-docker-gg"></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.

#### Per rendere persistenti i log di runtime Greengrass all'interno del container Docker
<a name="debugging-docker-persist-logs"></a>

È possibile eseguire il contenitore AWS IoT Greengrass Docker dopo aver montato in bind la directory. `/greengrass/ggc/var/log` I log persistono anche dopo la chiusura o la rimozione del container.

**Su Linux o macOS**  
[Interrompi qualsiasi container Docker Greengrass](#docker-stop) in esecuzione sull'host, quindi esegui il comando seguente in un terminale. In questo modo viene eseguito il montaggio vincolato della directory `log` di Greengrass e viene avviata l'immagine Docker.   
Sostituisci `/tmp` con il percorso in cui hai decompresso i certificati e il file di configurazione.  

```
docker run --rm --init -it --name aws-iot-greengrass \
      --entrypoint /greengrass-entrypoint.sh \
      -v /tmp/certs:/greengrass/certs \
      -v /tmp/config:/greengrass/config \
      -v /tmp/log:/greengrass/ggc/var/log \
      -p 8883:8883 \
      216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
```
In seguito, puoi esaminare i log in `/tmp/log` sull'host per scoprire cosa è successo mentre Greengrass era in esecuzione all'interno del container Docker.

**Su Windows**  
[Interrompi qualsiasi container Docker Greengrass](#docker-stop) in esecuzione sull'host, quindi esegui il comando seguente in un prompt dei comandi. In questo modo viene eseguito il montaggio vincolato della directory `log` di Greengrass e viene avviata l'immagine Docker.  

```
cd C:\Users\%USERNAME%\Downloads
mkdir log
docker run --rm --init -it --name aws-iot-greengrass --entrypoint /greengrass-entrypoint.sh -v c:/Users/%USERNAME%/Downloads/certs:/greengrass/certs -v c:/Users/%USERNAME%/Downloads/config:/greengrass/config -v c:/Users/%USERNAME%/Downloads/log:/greengrass/ggc/var/log -p 8883:8883 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
```
In seguito, puoi esaminare i log in `C:/Users/%USERNAME%/Downloads/log` sull'host per scoprire cosa è successo mentre Greengrass era in esecuzione all'interno del container Docker.

#### Per collegare una shell interattiva al container Docker
<a name="debugging-docker-attach-shell"></a>

È possibile collegare una shell interattiva a un contenitore Docker in esecuzione. AWS IoT Greengrass Questo può essere utile per esaminare lo stato del container Docker Greengrass.

**Su Linux o macOS**  
Mentre il container Docker Greengrass è in esecuzione esegui il comando seguente in un terminale separato.  

```
docker exec -it $(docker ps -a -q -f "name=aws-iot-greengrass") /bin/bash
```

**Su Windows**  
Mentre il container Docker Greengrass è in esecuzione esegui i comandi seguenti in un prompt dei comandi separato.  

```
docker ps -a -q -f "name=aws-iot-greengrass"
```
Sostituisci *gg-container-id* con il `container_id` risultato del comando precedente.  

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