

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 AWS Lambda funzioni
<a name="run-lambda-functions"></a>

**Nota**  
AWS IoT Greengrass attualmente non supporta questa funzionalità sui dispositivi Windows core. 

È possibile importare AWS Lambda funzioni come componenti eseguibili sui dispositivi AWS IoT Greengrass principali. È possibile eseguire questa operazione nei seguenti casi:
+ Hai del codice applicativo nelle funzioni Lambda che desideri distribuire sui dispositivi principali.
+ Hai applicazioni AWS IoT Greengrass V1 che desideri eseguire sui AWS IoT Greengrass V2 dispositivi principali. Per ulteriori informazioni, consulta [Fase 2: Creare e distribuire componenti per migrare le applicazioni AWS IoT Greengrass V2 AWS IoT Greengrass V1](set-up-v2-test-device.md#run-v1-applications).

Le funzioni Lambda includono dipendenze dai seguenti componenti. Non è necessario definire questi componenti come dipendenze quando si importa la funzione. Quando si distribuisce il componente della funzione Lambda, la distribuzione include queste dipendenze dei componenti Lambda.
+ Il [componente di avvio Lambda](lambda-launcher-component.md) (`aws.greengrass.LambdaLauncher`) gestisce i processi e la configurazione dell'ambiente.
+ Il [componente Lambda manager](lambda-manager-component.md) (`aws.greengrass.LambdaManager`) gestisce la comunicazione e la scalabilità tra processi.
+ Il [componente Lambda runtimes](lambda-runtimes-component.md) (`aws.greengrass.LambdaRuntimes`) fornisce artefatti per ogni runtime Lambda supportato.

**Topics**
+ [Requisiti](#run-lambda-functions-requirements)
+ [Configura il ciclo di vita della funzione Lambda](#lambda-lifecycle)
+ [Configurare la containerizzazione delle funzioni Lambda](#lambda-containerization)
+ [Importa una funzione Lambda come componente (console)](import-lambda-function-console.md)
+ [Importa una funzione Lambda come componente ()AWS CLI](import-lambda-function-cli.md)

## Requisiti
<a name="run-lambda-functions-requirements"></a>

I dispositivi principali e le funzioni Lambda devono soddisfare i seguenti requisiti per poter eseguire le funzioni sul software AWS IoT Greengrass Core:
+ <a name="core-device-lambda-function-requirements"></a>Il dispositivo principale deve soddisfare i requisiti per eseguire le funzioni Lambda. Se desideri che il dispositivo principale esegua funzioni Lambda containerizzate, il dispositivo deve soddisfare i requisiti per farlo. Per ulteriori informazioni, consulta [Requisiti della funzione Lambda](setting-up.md#greengrass-v2-lambda-requirements).
+ È necessario installare i linguaggi di programmazione utilizzati dalla funzione Lambda sui dispositivi principali.
**Suggerimento**  
È possibile creare un componente che installa il linguaggio di programmazione e quindi specificare tale componente come dipendenza del componente della funzione Lambda. Greengrass supporta tutte le versioni supportate da Lambda dei runtime Python, Node.js e Java. Greengrass non applica alcuna restrizione aggiuntiva alle versioni di runtime Lambda obsolete. Puoi eseguire funzioni Lambda che utilizzano questi runtime obsoleti AWS IoT Greengrass, ma non puoi crearli in. AWS Lambda Per ulteriori informazioni sul AWS IoT Greengrass supporto per i runtime Lambda, consulta. [Esegui AWS Lambda funzioni](#run-lambda-functions)

## Configura il ciclo di vita della funzione 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. Il ciclo di vita determina anche il modo in cui il software AWS IoT Greengrass Core conserva le variabili e la logica di preelaborazione esterne al gestore delle funzioni.

AWS IoT Greengrass supporta cicli di vita on-demand (impostazione predefinita) e di lunga durata:
+ Le funzioni **su richiesta** si avviano quando vengono richiamate e si interrompono quando non ci sono più attività da eseguire. Ogni chiamata della funzione crea un contenitore separato, chiamato anche sandbox, per elaborare le chiamate, a meno che un contenitore esistente non sia disponibile per il riutilizzo. Qualsiasi contenitore potrebbe elaborare i dati inviati alla funzione.

  È possibile eseguire più chiamate di una funzione su richiesta contemporaneamente.

  Le variabili e la logica di preelaborazione definite al di fuori del gestore delle funzioni non vengono mantenute quando vengono creati nuovi contenitori.
+ Le funzioni di **lunga durata** (o *bloccate*) iniziano all'avvio del software AWS IoT Greengrass Core e vengono eseguite in un singolo contenitore. Lo stesso contenitore elabora tutti i dati inviati alla funzione.

  Le chiamate multiple vengono messe in coda finché il software AWS IoT Greengrass Core non esegue le chiamate precedenti.

  Le variabili e la logica di preelaborazione definite all'esterno del gestore di funzioni vengono mantenute per ogni chiamata del gestore.

  Usa le funzioni Lambda di lunga durata quando devi iniziare a lavorare senza alcun input iniziale. Ad esempio, una funzione di lunga durata può caricare e avviare l'elaborazione di un modello di machine learning per essere pronta quando la funzione riceve i dati del dispositivo.
**Nota**  
Le funzioni di lunga durata hanno dei timeout associati a ogni chiamata del relativo gestore. Se si desidera richiamare codice che viene eseguito all'infinito, è necessario avviarlo all'esterno del gestore. Assicuratevi che non vi sia alcun codice di blocco esterno al gestore che possa impedire l'inizializzazione della funzione.  
Queste funzioni vengono eseguite a meno che il software AWS IoT Greengrass Core non si arresti, ad esempio durante una distribuzione o un riavvio. Queste funzioni non verranno eseguite se la funzione rileva un'eccezione non rilevata, supera i limiti di memoria o entra in uno stato di errore, ad esempio un timeout del gestore.

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

## Configurare la containerizzazione delle funzioni Lambda
<a name="lambda-containerization"></a>

Per impostazione predefinita, le funzioni Lambda vengono eseguite all'interno di un AWS IoT Greengrass contenitore. I contenitori Greengrass garantiscono l'isolamento tra le funzioni e l'host. Questo isolamento aumenta la sicurezza sia per l'host che per le funzioni nel contenitore.

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 su come limitare l'accesso alle risorse.

È possibile eseguire una funzione Lambda senza containerizzazione nei seguenti casi:
+ Vuoi eseguirlo AWS IoT Greengrass su un dispositivo che non supporta la modalità contenitore. Un esempio potrebbe essere se si desidera utilizzare una distribuzione Linux speciale o disporre di una versione precedente del kernel non aggiornata.
+ 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 i cui percorsi possono cambiare dopo la distribuzione. Un esempio di questa risorsa potrebbe essere un dispositivo collegabile.
+ Hai un'applicazione precedente che è stata scritta come processo e riscontri problemi quando la esegui in un contenitore Greengrass.


**Differenze nella containerizzazione**  

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

Se si modifica la containerizzazione di una funzione Lambda al momento della distribuzione, la funzione potrebbe non funzionare come previsto. Se la funzione Lambda utilizza risorse locali che non sono più disponibili con la nuova impostazione di containerizzazione, la distribuzione fallisce.
+ Quando si modifica una funzione Lambda dall'esecuzione in un contenitore Greengrass all'esecuzione senza containerizzazione, i limiti di memoria della funzione vengono eliminati. È necessario accedere direttamente al file system anziché utilizzare le risorse locali collegate. È necessario rimuovere tutte le risorse collegate prima di distribuire la funzione Lambda.
+ 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 o accettare il limite di memoria predefinito di 16 MB. Puoi configurare queste impostazioni per ogni funzione Lambda al momento della distribuzione.

Per modificare le impostazioni di containerizzazione per un componente della funzione Lambda, imposta il valore del parametro di `containerMode` configurazione su una delle seguenti opzioni quando distribuisci il componente.<a name="lambda-function-component-container-mode-parameter"></a>
+ `NoContainer`— Il componente non viene eseguito in un ambiente di runtime isolato.
+ `GreengrassContainer`— Il componente viene eseguito in un ambiente di runtime isolato all'interno del AWS IoT Greengrass contenitore.

Per ulteriori informazioni su come distribuire e configurare i componenti, vedere [Implementazione AWS IoT Greengrass dei componenti sui dispositivi](manage-deployments.md) e[Aggiornamento delle configurazioni dei componenti](update-component-configurations.md).

# Importa una funzione Lambda come componente (console)
<a name="import-lambda-function-console"></a>

Quando usi la [AWS IoT Greengrass console](https://console.aws.amazon.com/greengrass) per creare un componente della funzione Lambda, importi una AWS Lambda funzione esistente e quindi la configuri per creare un componente che funzioni sul tuo dispositivo Greengrass.

Prima di iniziare, esamina i [requisiti](https://docs.aws.amazon.com/greengrass/v2/developerguide/run-lambda-functions.html#run-lambda-functions-requirements) per eseguire le funzioni Lambda sui dispositivi Greengrass.

**Topics**
+ [Fase 1: Scegli una funzione Lambda da importare](#import-lambda-console-choose-function)
+ [Fase 2: Configurazione dei parametri della funzione Lambda](#import-lambda-console-configure-function-parameters)
+ [Fase 3: (Facoltativo) Specificare le piattaforme supportate per la funzione Lambda](#import-lambda-console-configure-platforms)
+ [Fase 4: (Facoltativo) Specificare le dipendenze dei componenti per la funzione Lambda](#import-lambda-console-configure-dependencies)
+ [Fase 5: (Facoltativo) Eseguire la funzione Lambda in un contenitore](#import-lambda-console-run-isolated)
+ [Fase 6: Creare il componente della funzione Lambda](#import-lambda-console-create-deploy)

## Fase 1: Scegli una funzione Lambda da importare
<a name="import-lambda-console-choose-function"></a>

1. Nel menu di navigazione [AWS IoT Greengrass della console](https://console.aws.amazon.com/greengrass), scegli **Componenti**.

1. Nella pagina **Componenti**, scegli **Crea componente**.

1. Nella pagina **Crea componente**, in **Informazioni sui componenti**, scegli **Importa funzione Lambda**.

1. Nella **funzione Lambda**, cerca e scegli la funzione Lambda che desideri importare. 

   AWS IoT Greengrass crea il componente con il nome della funzione Lambda.

1. Nella **versione della funzione Lambda**, scegli la versione da importare. Non puoi scegliere alias Lambda come. `$LATEST`

   AWS IoT Greengrass crea il componente con la versione della funzione Lambda come versione semantica valida. Ad esempio, se la versione della funzione è `3`, la versione del componente diventa `3.0.0`.

## Fase 2: Configurazione dei parametri della funzione Lambda
<a name="import-lambda-console-configure-function-parameters"></a>

Nella pagina **Crea componente**, in **Configurazione della funzione Lambda**, configura i seguenti parametri da utilizzare per eseguire la funzione Lambda.

1. (Facoltativo) Aggiungi l'elenco delle fonti di eventi a cui la funzione Lambda si iscrive per i messaggi di lavoro. È possibile specificare le fonti di eventi per sottoscrivere questa funzione ai publish/subscribe messaggi locali e ai messaggi AWS IoT Core MQTT. La funzione Lambda viene chiamata quando riceve un messaggio da un'origine di eventi.
**Nota**  
Per sottoscrivere questa funzione ai messaggi di altre funzioni o componenti Lambda, distribuisci il componente [precedente del router di sottoscrizione quando distribuisci questo componente](legacy-subscription-router-component.md) della funzione Lambda. Quando distribuisci il componente legacy del router di sottoscrizione, specifica gli abbonamenti utilizzati dalla funzione Lambda.

   In **Origini di eventi**, procedi come segue per aggiungere una fonte di eventi:

   1. Per ogni fonte di eventi che aggiungi, specifica le seguenti opzioni: 
      + **Argomento**: l'argomento a cui sottoscrivere i messaggi.
      + **Tipo**: il tipo di origine dell'evento. Seleziona una delle opzioni seguenti:
        + **Pubblicazione/sottoscrizione locale: sottoscrizione** ai messaggi locali. publish/subscribe 

          **Se si utilizza [Greengrass nucleus](greengrass-nucleus-component.md) v2.6.0 o versione successiva e [Lambda](lambda-manager-component.md) manager v2.2.5 o versione successiva, è possibile utilizzare i caratteri jolly dell'argomento MQTT (and) nell'argomento quando si specifica questo tipo. `+` `#`**
        + **AWS IoT Core AWS IoT Core MQTT: sottoscrizione ai messaggi MQTT.**

          È possibile utilizzare i caratteri jolly degli argomenti MQTT (`+`and`#`) nell'**argomento quando si specifica questo** tipo.

   1. Per aggiungere un'altra fonte di eventi, scegliete **Aggiungi origine evento** e ripetete il passaggio precedente. Per rimuovere una fonte di evento, scegli **Rimuovi** accanto alla fonte dell'evento che desideri rimuovere.

1. Per **Timeout (secondi)**, inserisci il periodo di tempo massimo, in secondi, che una funzione Lambda non bloccata può eseguire prima del timeout. Il valore predefinito è 3 secondi.

1. Per **Bloccato**, scegli se il componente della funzione Lambda è bloccato. **L'impostazione predefinita è True.**<a name="lambda-function-lifecycle-type"></a>
   + Una funzione Lambda bloccata (o di lunga durata) si AWS IoT Greengrass avvia all'avvio e continua a funzionare nel proprio contenitore.
   + Una funzione Lambda non bloccata (o su richiesta) si avvia solo quando riceve un elemento di lavoro e esce dopo che è rimasto inattivo per un periodo di inattività massimo specificato. Se la funzione ha più elementi di lavoro, il software AWS IoT Greengrass Core crea più istanze della funzione.

1. (Facoltativo) In **Parametri aggiuntivi**, imposta i seguenti parametri della funzione Lambda.
   + **Timeout di stato (secondi)**: l'intervallo in secondi in cui il componente della funzione Lambda invia aggiornamenti di stato al componente Lambda manager. Questo parametro si applica solo alle funzioni bloccate. Il valore predefinito è 60 secondi.
   + Dimensione **massima della coda: la dimensione** massima della coda dei messaggi per il componente della funzione Lambda. Il software AWS IoT Greengrass Core archivia i messaggi in una coda FIFO (first-in, first-out) fino a quando non può eseguire la funzione Lambda per consumare ogni messaggio. L'impostazione predefinita è 1.000 messaggi.
   + **Numero massimo di istanze**: il numero massimo di istanze che una funzione Lambda non bloccata può eseguire contemporaneamente. L'impostazione predefinita è 100 istanze.
   + **Tempo di inattività massimo (secondi)**: il periodo di inattività massimo, in secondi, che una funzione Lambda non bloccata può rimanere inattiva prima che il software Core interrompa AWS IoT Greengrass il processo. Il valore predefinito è 60 secondi.
   + **Tipo di codifica**: il tipo di payload supportato dalla funzione Lambda. Seleziona una delle opzioni seguenti:
     + **JSON**
     + **Binary**

     Il valore predefinito è JSON.

1. (Facoltativo) Specificate l'elenco degli argomenti della riga di comando da passare alla funzione Lambda durante l'esecuzione. 

   1. In **Parametri aggiuntivi, Elabora argomenti**, scegli **Aggiungi argomento**.

   1. Per ogni argomento che aggiungi, inserisci l'argomento che desideri passare alla funzione.

   1. Per rimuovere un argomento, scegliete **Rimuovi** accanto all'argomento che desiderate rimuovere.

1. (Facoltativo) Specificate le variabili di ambiente disponibili per la funzione Lambda quando viene eseguita. Le variabili di ambiente consentono di memorizzare e aggiornare le impostazioni di configurazione senza la necessità di modificare il codice della funzione.

   1. In **Parametri aggiuntivi, Variabili di ambiente**, scegli **Aggiungi variabile di ambiente**.

   1. Per ogni variabile di ambiente che aggiungi, specifica le seguenti opzioni:
      + **Chiave**: il nome della variabile.
      + **Valore**: il valore predefinito per questa variabile.

   1. Per rimuovere una variabile di ambiente, scegli **Rimuovi** accanto alla variabile di ambiente che desideri rimuovere.

## Fase 3: (Facoltativo) Specificare le piattaforme supportate per la funzione Lambda
<a name="import-lambda-console-configure-platforms"></a>

Tutti i dispositivi principali hanno attributi per il sistema operativo e l'architettura. Quando si distribuisce il componente della funzione Lambda, AWS IoT Greengrass il software Core confronta i valori della piattaforma specificati con gli attributi della piattaforma sul dispositivo principale per determinare se la funzione Lambda è supportata su quel dispositivo. 

**Nota**  
È inoltre possibile specificare attributi di piattaforma personalizzati quando si distribuisce il componente Greengrass nucleus su un dispositivo principale. Per ulteriori informazioni, consulta il [parametro platform overrides del componente](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration-platform-overrides) [Greengrass](greengrass-nucleus-component.md) nucleus. 

In **Configurazione della funzione Lambda, Parametri aggiuntivi, Piattaforme**, procedi come segue per specificare le piattaforme supportate da questa funzione Lambda.

1. Per ogni piattaforma, specifica le seguenti opzioni: 
   + **Sistema operativo**: il nome del sistema operativo per la piattaforma. Attualmente, l'unico valore supportato è `linux`.
   + **Architettura**: l'architettura del processore per la piattaforma. I valori supportati sono:
     + `amd64`
     + `arm`
     + `aarch64`
     + `x86`

1. Per aggiungere un'altra piattaforma, scegli **Aggiungi piattaforma** e ripeti il passaggio precedente. Per rimuovere una piattaforma supportata, scegli **Rimuovi** accanto alla piattaforma che desideri rimuovere.

## Fase 4: (Facoltativo) Specificare le dipendenze dei componenti per la funzione Lambda
<a name="import-lambda-console-configure-dependencies"></a>

Le dipendenze dei componenti identificano i componenti aggiuntivi AWS forniti o i componenti personalizzati utilizzati dalla funzione. Quando si distribuisce il componente della funzione Lambda, la distribuzione include queste dipendenze per l'esecuzione della funzione.

**Importante**  <a name="import-v1-lambda-note"></a>
Per importare una funzione Lambda creata per l'esecuzione su AWS IoT Greengrass V1, è necessario definire le dipendenze dei singoli componenti per le funzionalità utilizzate dalla funzione, come segreti, ombre locali e gestore di flussi. Definisci questi componenti come [dipendenze rigide](component-recipe-reference.md) in modo che il componente della funzione Lambda si riavvii se la dipendenza cambia stato. Per ulteriori informazioni, consulta [Importa funzioni Lambda V1](set-up-v2-test-device.md#run-v1-lambda-functions).

In **Configurazione della funzione Lambda, Parametri aggiuntivi, Dipendenze dei componenti**, completa i seguenti passaggi per specificare le dipendenze dei componenti per la tua funzione Lambda.

1.  **Scegli Aggiungi dipendenza.**

1. Per ogni dipendenza dal componente che aggiungi, specifica le seguenti opzioni: 
   + **Nome del componente**: il nome del componente. Ad esempio, immettete **aws.greengrass.StreamManager** per includere il [componente stream manager](stream-manager-component.md).
   + **Requisito di versione**: il vincolo di versione semantica in stile npm che identifica le versioni compatibili di questa dipendenza dal componente. È possibile specificare una singola versione o un intervallo di versioni. Ad esempio, immettere **^1.0.0** per specificare che questa funzione Lambda dipende da qualsiasi versione della prima versione principale del componente stream manager. [Per ulteriori informazioni sui vincoli di versione semantica, consulta il calcolatore semver npm.](https://semver.npmjs.com/) 
   + **Tipo: il tipo di dipendenza**. Seleziona una delle opzioni seguenti:
     + **Difficile**: il componente della funzione Lambda si riavvia se la dipendenza cambia stato. Questa è la selezione predefinita.
     + **Soft**: il componente della funzione Lambda non si riavvia se la dipendenza cambia stato.

1. Per rimuovere una dipendenza da un componente, scegli **Rimuovi** accanto alla dipendenza del componente

## Fase 5: (Facoltativo) Eseguire la funzione Lambda in un contenitore
<a name="import-lambda-console-run-isolated"></a>

Per impostazione predefinita, le funzioni Lambda vengono eseguite in un ambiente di runtime isolato all'interno del software AWS IoT Greengrass Core. Puoi anche scegliere di eseguire la funzione Lambda come processo senza alcun isolamento (ovvero in modalità **No container**). 

In **Configurazione del processo Linux**, per la **modalità Isolamento**, scegli tra le seguenti opzioni per selezionare la containerizzazione per la tua funzione Lambda:
+ **Contenitore Greengrass**: la funzione Lambda viene eseguita in un contenitore. Questa è la selezione predefinita.
+ **Nessun contenitore**: la funzione Lambda viene eseguita come processo senza alcun isolamento.

Se esegui la funzione Lambda in un contenitore, completa i seguenti passaggi per configurare la configurazione del processo per la funzione Lambda. 

1. Configura la quantità di memoria e le risorse di sistema, come volumi e dispositivi, da rendere disponibili al contenitore.

   In **Parametri del contenitore**, procedi come segue.

   1. In **Dimensione della memoria**, inserisci la dimensione della memoria che desideri allocare al contenitore. È possibile specificare la dimensione della memoria in **MB** o **kB**.

   1. Per la **cartella sys di sola lettura**, scegliete se il contenitore può leggere o meno le informazioni dalla cartella del dispositivo. `/sys` **L'impostazione predefinita è False.**

1. (Facoltativo) Configura i volumi locali a cui può accedere la funzione Lambda containerizzata. Quando definisci un volume, il software AWS IoT Greengrass Core monta i file di origine nella destinazione all'interno del contenitore. 

   1. In **Volumi**, scegli **Aggiungi volume**. 

   1. Per ogni volume che aggiungi, specifica le seguenti opzioni:
      + **Volume fisico**: il percorso della cartella di origine sul dispositivo principale.
      + **Volume logico**: il percorso della cartella di destinazione nel contenitore.
      + **Autorizzazione**: (Facoltativo) L'autorizzazione ad accedere alla cartella di origine dal contenitore. Seleziona una delle opzioni seguenti:
        + **Sola lettura**: la funzione Lambda ha accesso in sola lettura alla cartella di origine. Questa è la selezione predefinita.
        + **Lettura/scrittura**: la funzione Lambda ha accesso in lettura/scrittura alla cartella di origine.
      + **Aggiungi proprietario del gruppo** - (Facoltativo) Se aggiungere o meno il gruppo di sistema che esegue il componente della funzione Lambda come proprietario della cartella di origine. L'impostazione predefinita è **False**.

   1. Per rimuovere un volume, scegli **Rimuovi** accanto al volume che desideri rimuovere.

1. (Facoltativo) Configura i dispositivi del sistema locale a cui può accedere la funzione Lambda containerizzata.

   1. **In **Dispositivi, scegli Aggiungi dispositivo**.** 

   1. Per ogni dispositivo che aggiungi, specifica le seguenti opzioni:
      + **Percorso di montaggio**: il percorso verso il dispositivo di sistema sul dispositivo principale.
      + **Autorizzazione**: (Facoltativo) L'autorizzazione ad accedere al dispositivo di sistema dal contenitore. Seleziona una delle opzioni seguenti:
        + **Sola lettura**: la funzione Lambda ha accesso in sola lettura al dispositivo di sistema. Questa è la selezione predefinita.
        + **Lettura/scrittura**: la funzione Lambda ha accesso in lettura/scrittura alla cartella di origine.
      + **Aggiungi proprietario del gruppo** - (Facoltativo) Se aggiungere o meno il gruppo di sistema che esegue il componente della funzione Lambda come proprietario del dispositivo di sistema. L'impostazione predefinita è **False**.

## Fase 6: Creare il componente della funzione Lambda
<a name="import-lambda-console-create-deploy"></a>

Dopo aver configurato le impostazioni per il componente della funzione Lambda, scegli **Crea** per completare la creazione del nuovo componente. 

Per eseguire la funzione Lambda sul dispositivo principale, è quindi possibile distribuire il nuovo componente sui dispositivi principali. Per ulteriori informazioni, consulta [Implementazione AWS IoT Greengrass dei componenti sui dispositivi](manage-deployments.md).

# Importa una funzione Lambda come componente ()AWS CLI
<a name="import-lambda-function-cli"></a>

Usa l'[CreateComponentVersion](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_CreateComponentVersion.html)operazione per creare componenti dalle funzioni Lambda. Quando chiamate questa operazione, specificate di `lambdaFunction` importare una funzione Lambda. 

**Topics**
+ [Fase 1: Definire la configurazione della funzione Lambda](#create-lambda-function-configuration-cli)
+ [Fase 2: Creare il componente della funzione Lambda](#create-lambda-component-cli)

## Fase 1: Definire la configurazione della funzione Lambda
<a name="create-lambda-function-configuration-cli"></a>

1. Create un file chiamato`lambda-function-component.json`, quindi copiate il seguente oggetto JSON nel file. Sostituisci `lambdaArn` con l'ARN della funzione Lambda da importare.

   ```
   {
     "lambdaFunction": {
       "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1"
     }
   }
   ```
**Importante**  
È necessario specificare un ARN che includa la versione della funzione da importare. Non è possibile utilizzare alias di versione come `$LATEST`.

1. (Facoltativo) Specificate il nome (`componentName`) del componente. Se ometti questo parametro, AWS IoT Greengrass crea il componente con il nome della funzione Lambda.

   ```
   {
     "lambdaFunction": {
       "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
       "componentName": "com.example.HelloWorldLambda"
     }
   }
   ```

1. (Facoltativo) Specificate la versione (`componentVersion`) per il componente. Se ometti questo parametro, AWS IoT Greengrass crea il componente con la versione della funzione Lambda come versione semantica valida. Ad esempio, se la versione della funzione è `3`, la versione del componente diventa `3.0.0`.
**Nota**  
<a name="component-version-uniqueness-para"></a>Ogni versione del componente che carichi deve essere unica. Assicurati di caricare la versione corretta del componente, perché non puoi modificarla dopo averla caricata.  
<a name="semver-para"></a>AWS IoT Greengrass utilizza versioni semantiche per i componenti. *Le versioni semantiche seguono una delle principali.* *minore*. sistema di numerazione delle *patch*. Ad esempio, la versione `1.0.0` rappresenta la prima release principale di un componente. Per ulteriori informazioni, consultate la [specifica della versione semantica](https://semver.org/).

   ```
   {
     "lambdaFunction": {
       "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
       "componentName": "com.example.HelloWorldLambda",
       "componentVersion": "1.0.0"
     }
   }
   ```

1. (Facoltativo) Specificate le piattaforme supportate da questa funzione Lambda. Ogni piattaforma contiene una mappa di attributi che identificano una piattaforma. Tutti i dispositivi principali hanno attributi per il sistema operativo (`os`) e l'architettura (`architecture`). Il software AWS IoT Greengrass Core può aggiungere altri attributi della piattaforma. È inoltre possibile specificare attributi di piattaforma personalizzati quando si distribuisce il componente [Greengrass nucleus](greengrass-nucleus-component.md) su un dispositivo principale. Esegui questa operazione:

   1. Aggiungi un elenco di piattaforme (`componentPlatforms`) alla funzione Lambda in. `lambda-function-component.json`

      ```
      {
        "lambdaFunction": {
          "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
          "componentName": "com.example.HelloWorldLambda",
          "componentVersion": "1.0.0",
          "componentPlatforms": [
          
          ]
        }
      }
      ```

   1. Aggiungi ogni piattaforma supportata all'elenco. Ogni piattaforma dispone di un'interfaccia intuitiva `name` per identificarla e di una mappa di attributi. L'esempio seguente specifica che questa funzione supporta i dispositivi x86 che eseguono Linux.

      ```
      {
        "name": "Linux x86",
        "attributes": {
          "os": "linux",
          "architecture": "x86"
        }
      }
      ```

      È `lambda-function-component.json` possibile che contenga un documento simile all'esempio seguente.

      ```
      {
        "lambdaFunction": {
          "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
          "componentName": "com.example.HelloWorldLambda",
          "componentVersion": "1.0.0",
          "componentPlatforms": [
            {
              "name": "Linux x86",
              "attributes": {
                "os": "linux",
                "architecture": "x86"
              }
            }
          ]
        }
      }
      ```

1. (Facoltativo) Specificate le dipendenze dei componenti per la funzione Lambda. Quando si distribuisce il componente della funzione Lambda, la distribuzione include queste dipendenze per l'esecuzione della funzione.
**Importante**  <a name="import-v1-lambda-note"></a>
Per importare una funzione Lambda creata per l'esecuzione su AWS IoT Greengrass V1, è necessario definire le dipendenze dei singoli componenti per le funzionalità utilizzate dalla funzione, come segreti, ombre locali e gestore di flussi. Definisci questi componenti come [dipendenze rigide](component-recipe-reference.md) in modo che il componente della funzione Lambda si riavvii se la dipendenza cambia stato. Per ulteriori informazioni, consulta [Importa funzioni Lambda V1](set-up-v2-test-device.md#run-v1-lambda-functions).

   Esegui questa operazione:

   1. Aggiungi una mappa delle dipendenze dei componenti (`componentDependencies`) alla funzione Lambda in. `lambda-function-component.json`

      ```
      {
        "lambdaFunction": {
          "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
          "componentName": "com.example.HelloWorldLambda",
          "componentVersion": "1.0.0",
          "componentPlatforms": [
            {
              "name": "Linux x86",
              "attributes": {
                "os": "linux",
                "architecture": "x86"
              }
            }
          ],
          "componentDependencies": {
            
          }
        }
      }
      ```

   1. Aggiungi la dipendenza di ogni componente alla mappa. Specificate il nome del componente come chiave e specificate un oggetto con i seguenti parametri:
      + `versionRequirement`— Il vincolo di versione semantica in stile npm che identifica le versioni compatibili della dipendenza del componente. È possibile specificare una singola versione o un intervallo di versioni. Per ulteriori informazioni sui vincoli di versione semantica, consulta il calcolatore semver [npm](https://semver.npmjs.com/).
      + `dependencyType`— (Facoltativo) Il tipo di dipendenza. Scegli tra le seguenti opzioni:
        + `SOFT`— Il componente della funzione Lambda non si riavvia se la dipendenza cambia stato.
        + `HARD`— Il componente della funzione Lambda si riavvia se la dipendenza cambia stato.

        Il valore predefinito è `HARD`.

      L'esempio seguente specifica che questa funzione Lambda dipende da qualsiasi versione della prima versione principale [del componente stream manager](stream-manager-component.md). Il componente della funzione Lambda si riavvia quando lo stream manager si riavvia o si aggiorna.

      ```
      {
        "aws.greengrass.StreamManager": {
          "versionRequirement": "^1.0.0",
          "dependencyType": "HARD"
        }
      }
      ```

      È `lambda-function-component.json` possibile che contenga un documento simile all'esempio seguente.

      ```
      {
        "lambdaFunction": {
          "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
          "componentName": "com.example.HelloWorldLambda",
          "componentVersion": "1.0.0",
          "componentPlatforms": [
            {
              "name": "Linux x86",
              "attributes": {
                "os": "linux",
                "architecture": "x86"
              }
            }
          ],
          "componentDependencies": {
            "aws.greengrass.StreamManager": {
              "versionRequirement": "^1.0.0",
              "dependencyType": "HARD"
            }
          }
        }
      }
      ```

1. (Facoltativo) Configura i parametri della funzione Lambda da utilizzare per eseguire la funzione. È possibile configurare opzioni quali variabili di ambiente, origini degli eventi dei messaggi, timeout e impostazioni del contenitore. Esegui questa operazione:

   1. Aggiungi l'oggetto dei parametri Lambda (`componentLambdaParameters`) alla funzione Lambda in. `lambda-function-component.json`

      ```
      {
        "lambdaFunction": {
          "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
          "componentName": "com.example.HelloWorldLambda",
          "componentVersion": "1.0.0",
          "componentPlatforms": [
            {
              "name": "Linux x86",
              "attributes": {
                "os": "linux",
                "architecture": "x86"
              }
            }
          ],
          "componentDependencies": {
            "aws.greengrass.StreamManager": {
              "versionRequirement": "^1.0.0",
              "dependencyType": "HARD"
            }
          },
          "componentLambdaParameters": {
          
          }
        }
      }
      ```

   1. (Facoltativo) Specificate le fonti di eventi a cui la funzione Lambda si iscrive per i messaggi di lavoro. È possibile specificare le fonti di eventi per sottoscrivere questa funzione ai publish/subscribe messaggi locali e ai messaggi AWS IoT Core MQTT. La funzione Lambda viene chiamata quando riceve un messaggio da un'origine di eventi.
**Nota**  
Per sottoscrivere questa funzione ai messaggi di altre funzioni o componenti Lambda, distribuisci il componente [precedente del router di sottoscrizione quando distribuisci questo componente](legacy-subscription-router-component.md) della funzione Lambda. Quando distribuisci il componente legacy del router di sottoscrizione, specifica gli abbonamenti utilizzati dalla funzione Lambda.

      Esegui questa operazione:

      1. Aggiungi l'elenco delle fonti di eventi (`eventSources`) ai parametri della funzione Lambda.

         ```
         {
           "lambdaFunction": {
             "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
             "componentName": "com.example.HelloWorldLambda",
             "componentVersion": "1.0.0",
             "componentPlatforms": [
               {
                 "name": "Linux x86",
                 "attributes": {
                   "os": "linux",
                   "architecture": "x86"
                 }
               }
             ],
             "componentDependencies": {
               "aws.greengrass.StreamManager": {
                 "versionRequirement": "^1.0.0",
                 "dependencyType": "HARD"
               }
             },
             "componentLambdaParameters": {
               "eventSources": [
               
               ]
             }
           }
         }
         ```

      1. Aggiungi ogni fonte di eventi all'elenco. Ogni fonte di eventi ha i seguenti parametri:
         + `topic`— L'argomento a cui sottoscrivere i messaggi.
         + `type`— Il tipo di origine dell'evento. Seleziona una delle opzioni seguenti:
           + `PUB_SUB`: iscriviti ai messaggi di pubblicazione/sottoscrizione locali.

             Se si utilizza [Greengrass nucleus](greengrass-nucleus-component.md) v2.6.0 o versione successiva e [Lambda](lambda-manager-component.md) manager v2.2.5 o versione successiva, è possibile utilizzare i caratteri jolly `+` (and) dell'argomento MQTT quando si specifica questo tipo. `#` `topic`
           + `IOT_CORE` AWS IoT Core — Abbonarsi ai messaggi MQTT.

             È possibile utilizzare i caratteri jolly (`+`e`#`) degli argomenti MQTT `topic` quando si specifica questo tipo.

           L'esempio seguente sottoscrive AWS IoT Core MQTT su argomenti che corrispondono al filtro degli argomenti. `hello/world/+`

           ```
           {
             "topic": "hello/world/+",
             "type": "IOT_CORE"
           }
           ```

           Il tuo `lambda-function-component.json` potrebbe essere simile all'esempio seguente.

           ```
           {
             "lambdaFunction": {
               "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
               "componentName": "com.example.HelloWorldLambda",
               "componentVersion": "1.0.0",
               "componentPlatforms": [
                 {
                   "name": "Linux x86",
                   "attributes": {
                     "os": "linux",
                     "architecture": "x86"
                   }
                 }
               ],
               "componentDependencies": {
                 "aws.greengrass.StreamManager": {
                   "versionRequirement": "^1.0.0",
                   "dependencyType": "HARD"
                 }
               },
               "componentLambdaParameters": {
                 "eventSources": [
                   {
                     "topic": "hello/world/+",
                     "type": "IOT_CORE"
                   }
                 ]
               }
             }
           }
           ```

   1. (Facoltativo) Specificate uno dei seguenti parametri nell'oggetto parametri della funzione Lambda:
      + `environmentVariables`— La mappa delle variabili di ambiente disponibili per la funzione Lambda durante l'esecuzione.
      + `execArgs`— L'elenco di argomenti da passare alla funzione Lambda durante l'esecuzione.
      + `inputPayloadEncodingType`— Il tipo di payload supportato dalla funzione Lambda. Seleziona una delle opzioni seguenti:
        +  `json` 
        +  `binary` 

        Impostazione predefinita: `json`
      + `pinned`— Se la funzione Lambda è bloccata o meno. Il valore predefinito è `true`.<a name="lambda-function-lifecycle-type"></a>
        + Una funzione Lambda bloccata (o di lunga durata) si AWS IoT Greengrass avvia all'avvio e continua a funzionare nel proprio contenitore.
        + Una funzione Lambda non bloccata (o su richiesta) si avvia solo quando riceve un elemento di lavoro e esce dopo che è rimasto inattivo per un periodo di inattività massimo specificato. Se la funzione ha più elementi di lavoro, il software AWS IoT Greengrass Core crea più istanze della funzione.

        `maxIdleTimeInSeconds`Utilizzatelo per impostare il tempo massimo di inattività per la vostra funzione.
      + `timeoutInSeconds`— Il periodo di tempo massimo, in secondi, che la funzione Lambda può eseguire prima del timeout. Il valore predefinito è 3 secondi.
      + `statusTimeoutInSeconds`— L'intervallo in secondi con cui il componente della funzione Lambda invia gli aggiornamenti di stato al componente Lambda manager. Questo parametro si applica solo alle funzioni bloccate. Il valore predefinito è 60 secondi.
      + `maxIdleTimeInSeconds`— Il tempo massimo, in secondi, in cui una funzione Lambda non bloccata può rimanere inattiva prima che il software AWS IoT Greengrass Core interrompa il processo. Il valore predefinito è 60 secondi.
      + `maxInstancesCount`— Il numero massimo di istanze che una funzione Lambda non bloccata può eseguire contemporaneamente. L'impostazione predefinita è 100 istanze.
      + `maxQueueSize`— La dimensione massima della coda di messaggi per il componente della funzione Lambda. Il software AWS IoT Greengrass Core archivia i messaggi in una coda FIFO (first-in-first-out) fino a quando non può eseguire la funzione Lambda per consumare ogni messaggio. L'impostazione predefinita è 1.000 messaggi.

      È `lambda-function-component.json` possibile che contenga un documento simile al seguente esempio.

      ```
      {
        "lambdaFunction": {
          "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
          "componentName": "com.example.HelloWorldLambda",
          "componentVersion": "1.0.0",
          "componentPlatforms": [
            {
              "name": "Linux x86",
              "attributes": {
                "os": "linux",
                "architecture": "x86"
              }
            }
          ],
          "componentDependencies": {
            "aws.greengrass.StreamManager": {
              "versionRequirement": "^1.0.0",
              "dependencyType": "HARD"
            }
          },
          "componentLambdaParameters": {
            "eventSources": [
              {
                "topic": "hello/world/+",
                "type": "IOT_CORE"
              }
            ],
            "environmentVariables": {
              "LIMIT": "300"
            },
            "execArgs": [
              "-d"
            ],
            "inputPayloadEncodingType": "json",
            "pinned": true,
            "timeoutInSeconds": 120,
            "statusTimeoutInSeconds": 30,
            "maxIdleTimeInSeconds": 30,
            "maxInstancesCount": 50,
            "maxQueueSize": 500
          }
        }
      }
      ```

   1. (Facoltativo) Configura le impostazioni del contenitore per la funzione Lambda. Per impostazione predefinita, le funzioni Lambda vengono eseguite in un ambiente di runtime isolato all'interno del software AWS IoT Greengrass Core. Puoi anche scegliere di eseguire la funzione Lambda come processo senza alcun isolamento. Se si esegue la funzione Lambda in un contenitore, si configura la dimensione della memoria del contenitore e le risorse di sistema disponibili per la funzione Lambda. Esegui questa operazione:

      1. Aggiungi l'oggetto dei parametri del processo Linux (`linuxProcessParams`) all'oggetto parametri Lambda in. `lambda-function-component.json`

         ```
         {
           "lambdaFunction": {
             "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
             "componentName": "com.example.HelloWorldLambda",
             "componentVersion": "1.0.0",
             "componentPlatforms": [
               {
                 "name": "Linux x86",
                 "attributes": {
                   "os": "linux",
                   "architecture": "x86"
                 }
               }
             ],
             "componentDependencies": {
               "aws.greengrass.StreamManager": {
                 "versionRequirement": "^1.0.0",
                 "dependencyType": "HARD"
               }
             },
             "componentLambdaParameters": {
               "eventSources": [
                 {
                   "topic": "hello/world/+",
                   "type": "IOT_CORE"
                 }
               ],
               "environmentVariables": {
                 "LIMIT": "300"
               },
               "execArgs": [
                 "-d"
               ],
               "inputPayloadEncodingType": "json",
               "pinned": true,
               "timeoutInSeconds": 120,
               "statusTimeoutInSeconds": 30,
               "maxIdleTimeInSeconds": 30,
               "maxInstancesCount": 50,
               "maxQueueSize": 500,
               "linuxProcessParams": {
               
               }
             }
           }
         }
         ```

      1. (Facoltativo) Specificate se la funzione Lambda viene eseguita o meno in un contenitore. Aggiungete il `isolationMode` parametro all'oggetto dei parametri di processo e scegliete una delle seguenti opzioni:
         + `GreengrassContainer`— La funzione Lambda viene eseguita in un contenitore.
         + `NoContainer`— La funzione Lambda viene eseguita come processo senza alcun isolamento.

         Il valore predefinito è `GreengrassContainer`.

      1. (Facoltativo) Se si esegue la funzione Lambda in un contenitore, è possibile configurare la quantità di memoria e le risorse di sistema, come volumi e dispositivi, da rendere disponibili al contenitore. Esegui questa operazione:

         1. Aggiungete l'oggetto dei parametri del contenitore (`containerParams`) all'oggetto dei parametri del processo Linux in`lambda-function-component.json`.

            ```
            {
              "lambdaFunction": {
                "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
                "componentName": "com.example.HelloWorldLambda",
                "componentVersion": "1.0.0",
                "componentPlatforms": [
                  {
                    "name": "Linux x86",
                    "attributes": {
                      "os": "linux",
                      "architecture": "x86"
                    }
                  }
                ],
                "componentDependencies": {
                  "aws.greengrass.StreamManager": {
                    "versionRequirement": "^1.0.0",
                    "dependencyType": "HARD"
                  }
                },
                "componentLambdaParameters": {
                  "eventSources": [
                    {
                      "topic": "hello/world/+",
                      "type": "IOT_CORE"
                    }
                  ],
                  "environmentVariables": {
                    "LIMIT": "300"
                  },
                  "execArgs": [
                    "-d"
                  ],
                  "inputPayloadEncodingType": "json",
                  "pinned": true,
                  "timeoutInSeconds": 120,
                  "statusTimeoutInSeconds": 30,
                  "maxIdleTimeInSeconds": 30,
                  "maxInstancesCount": 50,
                  "maxQueueSize": 500,
                  "linuxProcessParams": {
                    "containerParams": {
                    
                    }
                  }
                }
              }
            }
            ```

         1. (Facoltativo) Aggiungete il `memorySizeInKB` parametro per specificare la dimensione della memoria del contenitore. L'impostazione predefinita è 16.384 KB (16 MB).

         1. (Facoltativo) Aggiungi il `mountROSysfs` parametro per specificare se il contenitore può leggere o meno le informazioni dalla cartella del `/sys` dispositivo. Il valore predefinito è `false`.

         1. (Facoltativo) Configura i volumi locali a cui può accedere la funzione Lambda containerizzata. Quando definisci un volume, il software AWS IoT Greengrass Core monta i file di origine nella destinazione all'interno del contenitore. Esegui questa operazione:

            1. Aggiungete l'elenco dei volumi (`volumes`) ai parametri del contenitore.

               ```
               {
                 "lambdaFunction": {
                   "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
                   "componentName": "com.example.HelloWorldLambda",
                   "componentVersion": "1.0.0",
                   "componentPlatforms": [
                     {
                       "name": "Linux x86",
                       "attributes": {
                         "os": "linux",
                         "architecture": "x86"
                       }
                     }
                   ],
                   "componentDependencies": {
                     "aws.greengrass.StreamManager": {
                       "versionRequirement": "^1.0.0",
                       "dependencyType": "HARD"
                     }
                   },
                   "componentLambdaParameters": {
                     "eventSources": [
                       {
                         "topic": "hello/world/+",
                         "type": "IOT_CORE"
                       }
                     ],
                     "environmentVariables": {
                       "LIMIT": "300"
                     },
                     "execArgs": [
                       "-d"
                     ],
                     "inputPayloadEncodingType": "json",
                     "pinned": true,
                     "timeoutInSeconds": 120,
                     "statusTimeoutInSeconds": 30,
                     "maxIdleTimeInSeconds": 30,
                     "maxInstancesCount": 50,
                     "maxQueueSize": 500,
                     "linuxProcessParams": {
                       "containerParams": {
                         "memorySizeInKB": 32768,
                         "mountROSysfs": true,
                         "volumes": [
                         
                         ]
                       }
                     }
                   }
                 }
               }
               ```

            1. Aggiungi ogni volume all'elenco. Ogni volume presenta i seguenti parametri:
               + `sourcePath`— Il percorso della cartella di origine sul dispositivo principale.
               + `destinationPath`— Il percorso della cartella di destinazione nel contenitore.
               + `permission`— (Facoltativo) L'autorizzazione ad accedere alla cartella di origine dal contenitore. Seleziona una delle opzioni seguenti:
                 + `ro`— La funzione Lambda ha accesso in sola lettura alla cartella di origine.
                 + `rw`— La funzione Lambda ha accesso in lettura/scrittura alla cartella di origine.

                 Il valore predefinito è `ro`.
               + `addGroupOwner`— (Facoltativo) Se aggiungere o meno il gruppo di sistema che esegue il componente della funzione Lambda come proprietario della cartella di origine. Il valore predefinito è `false`.

               È `lambda-function-component.json` possibile che contenga un documento simile al seguente esempio.

               ```
               {
                 "lambdaFunction": {
                   "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
                   "componentName": "com.example.HelloWorldLambda",
                   "componentVersion": "1.0.0",
                   "componentPlatforms": [
                     {
                       "name": "Linux x86",
                       "attributes": {
                         "os": "linux",
                         "architecture": "x86"
                       }
                     }
                   ],
                   "componentDependencies": {
                     "aws.greengrass.StreamManager": {
                       "versionRequirement": "^1.0.0",
                       "dependencyType": "HARD"
                     }
                   },
                   "componentLambdaParameters": {
                     "eventSources": [
                       {
                         "topic": "hello/world/+",
                         "type": "IOT_CORE"
                       }
                     ],
                     "environmentVariables": {
                       "LIMIT": "300"
                     },
                     "execArgs": [
                       "-d"
                     ],
                     "inputPayloadEncodingType": "json",
                     "pinned": true,
                     "timeoutInSeconds": 120,
                     "statusTimeoutInSeconds": 30,
                     "maxIdleTimeInSeconds": 30,
                     "maxInstancesCount": 50,
                     "maxQueueSize": 500,
                     "linuxProcessParams": {
                       "containerParams": {
                         "memorySizeInKB": 32768,
                         "mountROSysfs": true,
                         "volumes": [
                           {
                             "sourcePath": "/var/data/src",
                             "destinationPath": "/var/data/dest",
                             "permission": "rw",
                             "addGroupOwner": true
                           }
                         ]
                       }
                     }
                   }
                 }
               }
               ```

         1. (Facoltativo) Configura i dispositivi del sistema locale a cui può accedere la funzione Lambda containerizzata. Esegui questa operazione:

            1. Aggiungi l'elenco dei dispositivi di sistema (`devices`) ai parametri del contenitore.

               ```
               {
                 "lambdaFunction": {
                   "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
                   "componentName": "com.example.HelloWorldLambda",
                   "componentVersion": "1.0.0",
                   "componentPlatforms": [
                     {
                       "name": "Linux x86",
                       "attributes": {
                         "os": "linux",
                         "architecture": "x86"
                       }
                     }
                   ],
                   "componentDependencies": {
                     "aws.greengrass.StreamManager": {
                       "versionRequirement": "^1.0.0",
                       "dependencyType": "HARD"
                     }
                   },
                   "componentLambdaParameters": {
                     "eventSources": [
                       {
                         "topic": "hello/world/+",
                         "type": "IOT_CORE"
                       }
                     ],
                     "environmentVariables": {
                       "LIMIT": "300"
                     },
                     "execArgs": [
                       "-d"
                     ],
                     "inputPayloadEncodingType": "json",
                     "pinned": true,
                     "timeoutInSeconds": 120,
                     "statusTimeoutInSeconds": 30,
                     "maxIdleTimeInSeconds": 30,
                     "maxInstancesCount": 50,
                     "maxQueueSize": 500,
                     "linuxProcessParams": {
                       "containerParams": {
                         "memorySizeInKB": 32768,
                         "mountROSysfs": true,
                         "volumes": [
                           {
                             "sourcePath": "/var/data/src",
                             "destinationPath": "/var/data/dest",
                             "permission": "rw",
                             "addGroupOwner": true
                           }
                         ],
                         "devices": [
                         
                         ]
                       }
                     }
                   }
                 }
               }
               ```

            1. Aggiungi ogni dispositivo di sistema all'elenco. Ogni dispositivo di sistema presenta i seguenti parametri:
               + `path`— Il percorso verso il dispositivo di sistema sul dispositivo principale.
               + `permission`— (Facoltativo) L'autorizzazione ad accedere al dispositivo di sistema dal contenitore. Seleziona una delle opzioni seguenti:
                 + `ro`— La funzione Lambda ha accesso in sola lettura al dispositivo di sistema.
                 + `rw`— La funzione Lambda ha accesso in lettura/scrittura al dispositivo di sistema.

                 Il valore predefinito è `ro`.
               + `addGroupOwner`— (Facoltativo) Se aggiungere o meno il gruppo di sistema che esegue il componente della funzione Lambda come proprietario del dispositivo di sistema. Il valore predefinito è `false`.

            Il tuo `lambda-function-component.json` potrebbe contenere un documento simile al seguente esempio.

            ```
            {
              "lambdaFunction": {
                "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
                "componentName": "com.example.HelloWorldLambda",
                "componentVersion": "1.0.0",
                "componentPlatforms": [
                  {
                    "name": "Linux x86",
                    "attributes": {
                      "os": "linux",
                      "architecture": "x86"
                    }
                  }
                ],
                "componentDependencies": {
                  "aws.greengrass.StreamManager": {
                    "versionRequirement": "^1.0.0",
                    "dependencyType": "HARD"
                  }
                },
                "componentLambdaParameters": {
                  "eventSources": [
                    {
                      "topic": "hello/world/+",
                      "type": "IOT_CORE"
                    }
                  ],
                  "environmentVariables": {
                    "LIMIT": "300"
                  },
                  "execArgs": [
                    "-d"
                  ],
                  "inputPayloadEncodingType": "json",
                  "pinned": true,
                  "timeoutInSeconds": 120,
                  "statusTimeoutInSeconds": 30,
                  "maxIdleTimeInSeconds": 30,
                  "maxInstancesCount": 50,
                  "maxQueueSize": 500,
                  "linuxProcessParams": {
                    "containerParams": {
                      "memorySizeInKB": 32768,
                      "mountROSysfs": true,
                      "volumes": [
                        {
                          "sourcePath": "/var/data/src",
                          "destinationPath": "/var/data/dest",
                          "permission": "rw",
                          "addGroupOwner": true
                        }
                      ],
                      "devices": [
                        {
                          "path": "/dev/sda3",
                          "permission": "rw",
                          "addGroupOwner": true
                        }
                      ]
                    }
                  }
                }
              }
            }
            ```

1. (Facoltativo) Aggiungi tag (`tags`) per il componente. Per ulteriori informazioni, consulta [Tagga le tue AWS IoT Greengrass Version 2 risorse](tag-resources.md).

## Fase 2: Creare il componente della funzione Lambda
<a name="create-lambda-component-cli"></a>

1. Esegui il comando seguente per creare il componente della funzione Lambda da. `lambda-function-component.json`

   ```
   aws greengrassv2 create-component-version --cli-input-json file://lambda-function-component.json
   ```

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

   ```
   {
     "arn": "arn:aws:greengrass:region:123456789012:components:com.example.HelloWorldLambda:versions:1.0.0",
     "componentName": "com.example.HelloWorldLambda",
     "componentVersion": "1.0.0",
     "creationTimestamp": "Mon Dec 15 20:56:34 UTC 2020",
     "status": {
       "componentState": "REQUESTED",
       "message": "NONE",
       "errors": {}
     }
   }
   ```

   Copia il file `arn` dall'output per verificare lo stato del componente nel passaggio successivo.

1. Quando si crea un componente, il suo stato è`REQUESTED`. Quindi, AWS IoT Greengrass verifica che il componente sia implementabile. È possibile eseguire il comando seguente per interrogare lo stato del componente e verificare che il componente sia distribuibile. Sostituisci `arn` con l'ARN del passaggio precedente.

   ```
   aws greengrassv2 describe-component \
     --arn "arn:aws:greengrass:region:account-id:components:com.example.HelloWorldLambda:versions:1.0.0"
   ```

   Se il componente viene convalidato, la risposta indica che lo stato del componente è. `DEPLOYABLE`

   ```
   {
     "arn": "arn:aws:greengrass:region:account-id:components:com.example.HelloWorldLambda:versions:1.0.0",
     "componentName": "com.example.HelloWorldLambda",
     "componentVersion": "1.0.0",
     "creationTimestamp": "2020-12-15T20:56:34.376000-08:00",
     "publisher": "AWS Lambda",
     "status": {
       "componentState": "DEPLOYABLE",
       "message": "NONE",
       "errors": {}
     },
     "platforms": [
       {
         "name": "Linux x86",
         "attributes": {
           "architecture": "x86",
           "os": "linux"
         }
       }
     ]
   }
   ```

   Dopo aver installato il componente`DEPLOYABLE`, puoi distribuire la funzione Lambda sui tuoi dispositivi principali. Per ulteriori informazioni, consulta [Implementazione AWS IoT Greengrass dei componenti sui dispositivi](manage-deployments.md).