

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

# Accedi alle risorse locali con funzioni e connettori Lambda
<a name="access-local-resources"></a>

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

Con AWS IoT Greengrass, puoi creare AWS Lambda funzioni e configurare [connettori](connectors.md) nel cloud e distribuirli sui dispositivi principali per l'esecuzione locale. Sui core Greengrass che eseguono Linux, queste funzioni e connettori Lambda distribuiti localmente possono accedere alle risorse locali fisicamente presenti sul dispositivo principale Greengrass. Ad esempio, per comunicare con dispositivi collegati tramite Modbus oppure CANbus, è possibile abilitare la funzione Lambda per accedere alla porta seriale del dispositivo principale. Per configurare l'accesso sicuro alle risorse locali, è necessario garantire la sicurezza dell'hardware fisico e del sistema operativo del dispositivo core Greengrass.

Per iniziare l'accesso alle risorse locali, consulta i seguenti tutorial:
+ [Come configurare l'accesso alle risorse locali utilizzando l'interfaccia AWS a riga di comando](lra-cli.md)
+ [Come configurare l'accesso alle risorse locali utilizzando il Console di gestione AWS](lra-console.md)

## Tipi di risorse supportati
<a name="lra-resource-types"></a>

È possibile accedere a due tipi di risorse locali: risorse di volume e risorse di dispositivo.

**Risorse volume**  
I file o le directory per il file system radice (fatta eccezione in `/sys`, `/dev` o `/var`). Ciò include:  
+ Cartelle o file utilizzati per leggere o scrivere informazioni tra le funzioni di Greengrass Lambda (ad esempio,). `/usr/lib/python2.x/site-packages/local`
+ Cartelle o file sotto il file system /proc dell'host (ad esempio, `/proc/net` o `/proc/stat`). Supportato nella versione 1.6 o successiva. Per i requisiti aggiuntivi, consultare [Risorse di volume nella directory /proc](#lra-proc-resources).
Per configurare le directory `/var`, `/var/run` e `/var/lib` come risorse di volume, monta prima la directory in una cartella diversa e poi configura la cartella come risorsa di volume.
Quando configuri le risorse di volume, specifichi un percorso *origine* e un percorso di *destinazione*. Il percorso di origine è il percorso assoluto della risorsa nell'host. Il percorso di destinazione è il percorso assoluto della risorsa all'interno dell'ambiente dello spazio dei nomi Lambda. Questo è il contenitore in cui viene eseguita una funzione o un connettore Greengrass Lambda. Le eventuali modifiche apportate al percorso di destinazione vengono applicate al percorso di origine nel file system host.  
I file nel percorso di destinazione sono visibili solo nello spazio dei nomi Lambda. Non è possibile visualizzarli in un normale spazio dei nomi Linux.

**Risorse di dispositivo**  
I file in `/dev`. Solo i dispositivi a caratteri o a blocchi in `/dev` sono consentiti per le risorse del dispositivo. Ciò include:  
+ Porte seriali utilizzate per comunicare con i dispositivi connessi tramite le porte seriali (ad esempio `/dev/ttyS0`, `/dev/ttyS1`).
+ USB utilizzato per connettere periferiche USB (ad esempio, `/dev/ttyUSB0` o `/dev/bus/usb`).
+ GPIOs utilizzato per sensori e attuatori tramite GPIO (ad esempio,). `/dev/gpiomem`
+ GPUs utilizzato per accelerare l'apprendimento automatico utilizzando sistemi di bordo GPUs (ad esempio,). `/dev/nvidia0`
+ Fotocamere utilizzate per acquisire immagini e video (ad esempio, `/dev/video0`).
`/dev/shm` è un'eccezione. Può essere configurato esclusivamente come risorsa di volume. Alle risorse in `/dev/shm` deve essere concessa l'autorizzazione `rw`.

AWS IoT Greengrass supporta anche i tipi di risorse utilizzati per eseguire l'inferenza dell'apprendimento automatico. Per ulteriori informazioni, consulta [Esecuzione dell'inferenza di Machine Learning](ml-inference.md).

## Requisiti
<a name="lra-requirements"></a>

I seguenti requisiti si applicano alla configurazione dell'accesso sicuro alle risorse locali:
+ È necessario utilizzare AWS IoT Greengrass Core Software v1.3 o versione successiva. Per creare risorse per la directory /proc dell'host, è necessario utilizzare la versione 1.6 o successiva.
+ La risorsa locale (inclusi i driver e le librerie necessarie) deve essere installata correttamente sul dispositivo core di Greengrass ed essere disponibile in modo coerente durante l'uso.
+ L'operazione desiderata della risorsa e l'accesso alla risorsa non devono richiedere privilegi root. 
+ Sono disponibili solo le autorizzazioni `read` o `read and write`. Le funzioni Lambda non sono in grado di eseguire operazioni privilegiate sulle risorse.
+ È necessario fornire il percorso completo della risorsa locale sul sistema operativo del dispositivo core di Greengrass.
+ Un nome o ID di risorsa deve avere un massimo di 128 caratteri e deve utilizzare il modello `[a-zA-Z0-9:_-]+`.

### Risorse di volume nella directory /proc
<a name="lra-proc-resources"></a>

Le seguenti considerazioni si applicano alle risorse di volume che si trovano nella directory /proc dell'host.
+ È necessario utilizzare AWS IoT Greengrass Core Software v1.6 o versione successiva.
+ È possibile consentire l'accesso in sola lettura per le funzioni Lambda, ma non l'accesso in lettura/scrittura. Questo livello di accesso è gestito da. AWS IoT Greengrass
+ Potrebbe anche essere necessario concedere autorizzazioni di gruppo del sistema operativo per abilitare l'accesso in lettura nel file system. Ad esempio, supponiamo che la directory o il file sorgente abbiano un'autorizzazione per i file 660, indicando che solo il proprietario o un utente del gruppo hanno accesso in lettura (e scrittura). In questo caso, è necessario aggiungere le autorizzazioni del proprietario del gruppo di sistema operativo alla risorsa. Per ulteriori informazioni, consulta [Autorizzazione di accesso ai file dell'owner del gruppo](#lra-group-owner).
+ L'ambiente host e lo spazio dei nomi Lambda contengono entrambi una directory /proc, quindi assicurati di evitare conflitti di denominazione quando specifichi il percorso di destinazione. Ad esempio, se /proc è il percorso di origine, è possibile specificare /host-proc come percorso di destinazione (o qualsiasi altro nome di percorso diverso da "*/proc*").

## Autorizzazione di accesso ai file dell'owner del gruppo
<a name="lra-group-owner"></a>

Un processo funzionale AWS IoT Greengrass Lambda normalmente viene eseguito come e`ggc_user`. `ggc_group` Tuttavia, puoi concedere autorizzazioni di accesso ai file aggiuntive al processo della funzione Lambda nella definizione della risorsa locale, come segue:
+ Per aggiungere le autorizzazioni del gruppo Linux proprietario della risorsa, utilizzate il `GroupOwnerSetting#AutoAddGroupOwner` parametro o l'opzione **Aggiungi automaticamente le autorizzazioni del file system del gruppo di sistema proprietario dell'opzione Resource Console**.
+ Per aggiungere le autorizzazioni di un altro gruppo Linux, usa il `GroupOwnerSetting#GroupOwner` parametro o l'**opzione Specificare un altro gruppo di sistema per aggiungere le autorizzazioni del file system**. Il valore `GroupOwner` viene ignorato se `GroupOwnerSetting#AutoAddGroupOwner` è "true".

Un processo funzionale AWS IoT Greengrass Lambda eredita tutte le autorizzazioni del file system di e del `ggc_user` gruppo Linux (se aggiunto). `ggc_group` Affinché la funzione Lambda possa accedere a una risorsa, il processo della funzione Lambda deve disporre delle autorizzazioni richieste per la risorsa. È possibile utilizzare il comando `chmod(1)` per modificare l'autorizzazione della risorsa, se necessario.

## Consulta anche
<a name="lra-seealso"></a>
+ [Quote di servizio](https://docs.aws.amazon.com/general/latest/gr/greengrass.html#limits_greengrass) per le risorse in *Riferimenti generali di Amazon Web Services*

# Come configurare l'accesso alle risorse locali utilizzando l'interfaccia AWS a riga di comando
<a name="lra-cli"></a>

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

Per utilizzare una risorsa locale, è necessario aggiungere una definizione di risorsa alla definizione di gruppo che viene distribuita sul dispositivo core di Greengrass. La definizione di gruppo deve contenere anche una definizione di funzione Lambda in cui si concedono le autorizzazioni di accesso per le risorse locali alle funzioni Lambda. Per ulteriori informazioni, inclusi i requisiti e i vincoli, consulta [Accedi alle risorse locali con funzioni e connettori Lambda](access-local-resources.md).

Questo tutorial descrive il processo per creare una risorsa locale e configurare l'accesso ad essa utilizzando AWS Command Line Interface (CLI). Per seguire i passaggi del tutorial, devi aver già creato un gruppo Greengrass come descritto in [Iniziare con AWS IoT Greengrass](gg-gs.md). 

Per un tutorial che utilizza il Console di gestione AWS, vedi. [Come configurare l'accesso alle risorse locali utilizzando il Console di gestione AWS](lra-console.md)

## Creazione di risorse locali
<a name="lra-cli-create-resources"></a>

In primo luogo, puoi usare il comando `[CreateResourceDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/createresourcedefinition-post.html)` per creare una definizione di risorsa che specifica le risorse a cui accedere. In questo esempio, creiamo due risorse, `TestDirectory` e `TestCamera`:

```
aws greengrass create-resource-definition  --cli-input-json '{
    "Name": "MyLocalVolumeResource",
    "InitialVersion": {
        "Resources": [
            {
                "Id": "data-volume",
                "Name": "TestDirectory",
                "ResourceDataContainer": {
                    "LocalVolumeResourceData": {
                        "SourcePath": "/src/LRAtest",
                        "DestinationPath": "/dest/LRAtest",
                        "GroupOwnerSetting": {
                            "AutoAddGroupOwner": true,
                            "GroupOwner": ""
                        }
                    }
                }
            },
            {
                "Id": "data-device",
                "Name": "TestCamera",
                "ResourceDataContainer": {
                    "LocalDeviceResourceData": {
                        "SourcePath": "/dev/video0",
                        "GroupOwnerSetting": {
                            "AutoAddGroupOwner": true,
                            "GroupOwner": ""
                        }
                    }
                }
            }
        ]
    }
}'
```

**Resources**: un elenco di oggetti `Resource` nel gruppo Greengrass. Un gruppo Greengrass può avere fino a 50 risorse.

**Resource\$1Id**: identificatore univoco della risorsa. L'ID è usato per riferirsi a una risorsa nella configurazione della funzione Lambda. Limitazioni della lunghezza: 128 caratteri. Modello: [a-zA-Z0-9:\$1-]\$1. 

**Resource\$1Name**: il nome della risorsa. Il nome della risorsa viene visualizzato nella console Greengrass. Limitazioni della lunghezza: 128 caratteri. Modello: [a-zA-Z0-9:\$1-]\$1.

**LocalDeviceResourceData\$1 SourcePath**: Il percorso assoluto locale della risorsa del dispositivo. Il percorso di origine di una risorsa di dispositivo può riferirsi solo a un dispositivo a caratteri o a blocchi in `/dev`.

**LocalVolumeResourceData\$1 SourcePath**: Il percorso assoluto locale della risorsa di volume sul dispositivo principale Greengrass. Questa posizione è esterna al [container](lambda-group-config.md#lambda-function-containerization) in cui viene eseguita la funzione. Il percorso di origine per un tipo di risorsa di volume non può iniziare con `/sys`.

**LocalVolumeResourceData\$1 DestinationPath**: il percorso assoluto della risorsa di volume all'interno dell'ambiente Lambda. Questa posizione è interna al container in cui viene eseguita la funzione.

**GroupOwnerSetting**: consente di configurare privilegi di gruppo aggiuntivi per il processo Lambda. Questo campo è facoltativo. Per ulteriori informazioni, consulta [Autorizzazione di accesso ai file dell'owner del gruppo](access-local-resources.md#lra-group-owner).

**GroupOwnerSetting\$1 AutoAddGroupOwner**: Se vero, Greengrass aggiunge automaticamente il proprietario del gruppo del sistema operativo Linux specificato della risorsa ai privilegi del processo Lambda. In questo modo il processo Lambda dispone delle autorizzazioni di accesso ai file del gruppo Linux aggiunto.

**GroupOwnerSetting\$1 GroupOwner**: specifica il nome del gruppo di sistemi operativi Linux i cui privilegi vengono aggiunti al processo Lambda. Questo campo è facoltativo. 

Un ARN di versione della definizione di risorsa viene restituito da `[CreateResourceDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/createresourcedefinition-post.html)`. L'ARN deve essere utilizzato quando si aggiorna una definizione di gruppo.

```
{
    "LatestVersionArn": "arn:aws:greengrass:us-west-2:012345678901:/greengrass/definition/resources/ab14d0b5-116e-4951-a322-9cde24a30373/versions/a4d9b882-d025-4760-9cfe-9d4fada5390d",
    "Name": "MyLocalVolumeResource",
    "LastUpdatedTimestamp": "2017-11-15T01:18:42.153Z",
    "LatestVersion": "a4d9b882-d025-4760-9cfe-9d4fada5390d",
    "CreationTimestamp": "2017-11-15T01:18:42.153Z",
    "Id": "ab14d0b5-116e-4951-a322-9cde24a30373",
    "Arn": "arn:aws:greengrass:us-west-2:123456789012:/greengrass/definition/resources/ab14d0b5-116e-4951-a322-9cde24a30373"
}
```

## Creazione della funzione Greengrass
<a name="lra-cli-create-function"></a>

Dopo che le risorse sono state create, utilizzare il comando `[CreateFunctionDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/createfunctiondefinition-post.html)` per creare la funzione Greengrass e concedere alla funzione l'accesso alla risorsa: 

```
aws greengrass create-function-definition --cli-input-json '{
    "Name": "MyFunctionDefinition",
    "InitialVersion": {
        "Functions": [
            {
                "Id": "greengrassLraTest",
                "FunctionArn": "arn:aws:lambda:us-west-2:012345678901:function:lraTest:1",
                "FunctionConfiguration": {
                    "Pinned": false,
                    "MemorySize": 16384,
                    "Timeout": 30,
                    "Environment": {
                        "ResourceAccessPolicies": [
                            {
                                "ResourceId": "data-volume",
                                "Permission": "rw"
                            },
                            {
                                "ResourceId": "data-device",
                                "Permission": "ro"
                            }                            
                        ],
                        "AccessSysfs": true
                    }
                }
            }
        ]
    }
}'
```

**ResourceAccessPolicies**: contiene gli `resourceId` e `permission` che garantiscono alla funzione Lambda l'accesso alla risorsa. Una funzione Lambda può accedere a un massimo di 20 risorse.

**ResourceAccessPolicy\$1Permission**: specifica quali autorizzazioni ha la funzione Lambda sulla risorsa. Le opzioni disponibili sono `rw` (lettura/scrittura) o `ro` (solo lettura). 

**AccessSysfs**: Se impostato su true, il processo Lambda può avere accesso in lettura alla `/sys` cartella sul dispositivo principale Greengrass. Viene utilizzato nei casi in cui la funzione Greengrass Lambda deve leggere le informazioni sul dispositivo. `/sys`

Come in precedenza, `[CreateFunctionDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/createfunctiondefinition-post.html)` restituisce un ARN di versione della definizione della funzione. L'ARN deve essere usato nella versione di definizione del gruppo. 

```
{
    "LatestVersionArn": "arn:aws:greengrass:us-west-2:012345678901:/greengrass/definition/functions/3c9b1685-634f-4592-8dfd-7ae1183c28ad/versions/37f0d50e-ef50-4faf-b125-ade8ed12336e", 
    "Name": "MyFunctionDefinition", 
    "LastUpdatedTimestamp": "2017-11-22T02:28:02.325Z", 
    "LatestVersion": "37f0d50e-ef50-4faf-b125-ade8ed12336e", 
    "CreationTimestamp": "2017-11-22T02:28:02.325Z", 
    "Id": "3c9b1685-634f-4592-8dfd-7ae1183c28ad", 
    "Arn": "arn:aws:greengrass:us-west-2:123456789012:/greengrass/definition/functions/3c9b1685-634f-4592-8dfd-7ae1183c28ad"
}
```

## Aggiungere la funzione Lambda al gruppo
<a name="lra-cli-add-function"></a>

Infine, utilizzare `[CreateGroupVersion](https://docs.aws.amazon.com/greengrass/v1/apireference/creategroupversion-post.html)` per aggiungere la funzione al gruppo. Esempio:

```
aws greengrass create-group-version --group-id "b36a3aeb-3243-47ff-9fa4-7e8d98cd3cf5" \
--resource-definition-version-arn "arn:aws:greengrass:us-west-2:123456789012:/greengrass/definition/resources/db6bf40b-29d3-4c4e-9574-21ab7d74316c/versions/31d0010f-e19a-4c4c-8098-68b79906fb87" \
--core-definition-version-arn "arn:aws:greengrass:us-west-2:123456789012:/greengrass/definition/cores/adbf3475-f6f3-48e1-84d6-502f02729067/versions/297c419a-9deb-46dd-8ccc-341fc670138b" \
--function-definition-version-arn "arn:aws:greengrass:us-west-2:123456789012:/greengrass/definition/functions/d1123830-da38-4c4c-a4b7-e92eec7b6d3e/versions/a2e90400-caae-4ffd-b23a-db1892a33c78" \
--subscription-definition-version-arn "arn:aws:greengrass:us-west-2:123456789012:/greengrass/definition/subscriptions/7a8ef3d8-1de3-426c-9554-5b55a32fbcb6/versions/470c858c-7eb3-4abd-9d48-230236bfbf6a"
```

**Nota**  
Per informazioni su come ottenere l'ID del gruppo da utilizzare con questo comando, consulta [Ottenere l'ID del gruppo](deployments.md#api-get-group-id).

Viene restituita una nuova versione del gruppo:

```
{
    "Arn": "arn:aws:greengrass:us-west-2:012345678901:/greengrass/groups/b36a3aeb-3243-47ff-9fa4-7e8d98cd3cf5/versions/291917fb-ec54-4895-823e-27b52da25481",
    "Version": "291917fb-ec54-4895-823e-27b52da25481",
    "CreationTimestamp": "2017-11-22T01:47:22.487Z",
    "Id": "b36a3aeb-3243-47ff-9fa4-7e8d98cd3cf5"
}
```

Il tuo gruppo Greengrass ora contiene la funzione *LRAtest Lambda* che ha accesso a due risorse: e. TestDirectory TestCamera

In questo esempio, la funzione Lambda, `lraTest.py`, scritta in Python, scrive sulla risorsa di volume locale: 

```
# Demonstrates a simple use case of local resource access.
# This Lambda function writes a file test to a volume mounted inside
# the Lambda environment under destLRAtest. Then it reads the file and 
# publishes the content to the AWS IoT LRAtest topic. 

import sys
import greengrasssdk
import platform
import os
import logging

# Setup logging to stdout
logger = logging.getLogger(__name__)
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)

# Create a Greengrass Core SDK client.
client = greengrasssdk.client('iot-data')
volumePath = '/dest/LRAtest'

def function_handler(event, context):
    try:
        client.publish(topic='LRA/test', payload='Sent from AWS IoT Greengrass Core.')
        volumeInfo = os.stat(volumePath)
        client.publish(topic='LRA/test', payload=str(volumeInfo))
        with open(volumePath + '/test', 'a') as output:
            output.write('Successfully write to a file.')
        with open(volumePath + '/test', 'r') as myfile:
            data = myfile.read()
        client.publish(topic='LRA/test', payload=data)
    except Exception as e:
        logger.error('Failed to publish message: ' + repr(e))
    return
```

Questi comandi sono forniti dall'API Greengrass per creare e gestire le definizioni delle risorse e le versioni di definizione delle risorse:
+ [CreateResourceDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/createresourcedefinition-post.html)
+ [CreateResourceDefinitionVersion](https://docs.aws.amazon.com/greengrass/v1/apireference/createresourcedefinitionversion-post.html)
+  [DeleteResourceDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/deleteresourcedefinition-delete.html)
+  [GetResourceDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/getresourcedefinition-get.html)
+  [GetResourceDefinitionVersion](https://docs.aws.amazon.com/greengrass/v1/apireference/getresourcedefinitionversion-get.html)
+  [ListResourceDefinitions](https://docs.aws.amazon.com/greengrass/v1/apireference/listresourcedefinitions-get.html)
+  [ListResourceDefinitionVersions](https://docs.aws.amazon.com/greengrass/v1/apireference/listresourcedefinitionversions-get.html)
+  [UpdateResourceDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/updateresourcedefinition-put.html)

## Risoluzione dei problemi
<a name="lra-faqs"></a>
+ **D:** Perché la distribuzione del mio gruppo Greengrass non riesce con un errore simile:

  ```
  group config is invalid: 
      ggc_user or [ggc_group root tty] don't have ro permission on the file: /dev/tty0
  ```

  **R:** Questo errore indica che il processo Lambda non ha l'autorizzazione per accedere alla risorsa specificata. La soluzione è quella di modificare l'autorizzazione dei file della risorsa in modo che Lambda possa accedervi. (Vedi [Autorizzazione di accesso ai file dell'owner del gruppo](access-local-resources.md#lra-group-owner) per informazioni dettagliate).
+ **D:** Quando configuro `/var/run` come risorsa di volume, perché la funzione Lambda non si avvia con un messaggio di errore nel runtime.log: 

  ```
  [ERROR]-container_process.go:39,Runtime execution error: unable to start lambda container. 
  container_linux.go:259: starting container process caused "process_linux.go:345: 
  container init caused \"rootfs_linux.go:62: mounting \\\"/var/run\\\" to rootfs \\\"/greengrass/ggc/packages/1.3.0/rootfs_sys\\\" at \\\"/greengrass/ggc/packages/1.3.0/rootfs_sys/run\\\" 
  caused \\\"invalid argument\\\"\""
  ```

  **R:** AWS IoT Greengrass core attualmente non supporta la configurazione di e `/var/lib` come risorse di `/var` `/var/run` volume. Una soluzione è quella di montare prima `/var`, `/var/run` o `/var/lib` in una cartella diversa e quindi configurare la cartella come risorsa di volume.
+ **D:** Quando configuro `/dev/shm` come risorsa di volume con autorizzazioni di sola lettura, perché la funzione Lambda non si avvia con un errore nel runtime.log: 

  ```
  [ERROR]-container_process.go:39,Runtime execution error: unable to start lambda container. 
  container_linux.go:259: starting container process caused "process_linux.go:345: 
  container init caused \"rootfs_linux.go:62: mounting \\\"/dev/shm\\\" to rootfs \\\"/greengrass/ggc/packages/1.3.0/rootfs_sys\\\" at \\\"/greengrass/ggc/packages/1.3.0/rootfs_sys/dev/shm\\\" 
  caused \\\"operation not permitted\\\"\""”
  ```

  **R:** `/dev/shm` può essere configurato solo in lettura/scrittura Cambia l'autorizzazione a livello di risorsa per `rw` per risolvere il problema.

# Come configurare l'accesso alle risorse locali utilizzando il Console di gestione AWS
<a name="lra-console"></a>

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

È possibile configurare le funzioni Lambda per accedere in modo sicuro alle risorse locali sul dispositivo principale Greengrass host. Per *risorse locali* si intendono bus e periferiche che sono fisicamente presenti nell'host o volumi di file system nel sistema operativo dell'host. Per ulteriori informazioni, inclusi i requisiti e i vincoli, consulta [Accedi alle risorse locali con funzioni e connettori Lambda](access-local-resources.md).

Questo tutorial descrive come utilizzare per configurare l' Console di gestione AWS accesso alle risorse locali presenti su un AWS IoT Greengrass dispositivo principale. Include le seguenti fasi di alto livello:

1. [Creare un pacchetto di distribuzione della funzione Lambda](#lra-console-create-package)

1. [Creare e pubblicare una funzione Lambda](#lra-console-create-function)

1. [Aggiungere la funzione Lambda al gruppo](#lra-console-add-function)

1. [Aggiungere una risorsa locale al gruppo](#lra-console-create-resource)

1. [Aggiunta di sottoscrizioni al gruppo](#lra-console-add-subscription)

1. [Distribuzione del gruppo.](#lra-console-deploy-group)

Per un tutorial che utilizza il AWS Command Line Interface, vedi[Come configurare l'accesso alle risorse locali utilizzando l'interfaccia AWS a riga di comando](lra-cli.md).

## Prerequisiti
<a name="lra-console-prerequisites"></a>

Per completare questo tutorial, è necessario quanto segue:
+ Un gruppo Greengrass e un core Greengrass (v1.3 o successivo). Per creare un gruppo o un core Greengrass, consulta [Iniziare con AWS IoT Greengrass](gg-gs.md).
+ Le seguenti directory sul dispositivo core Greengrass:
  + /src/ LRAtest
  + /dest/ LRAtest

  Il gruppo proprietario di queste directory deve disporre dell'accesso in lettura e scrittura alle directory. Per concedere l'accesso potresti utilizzare il seguente comando:

  ```
  sudo chmod 0775 /src/LRAtest
  ```

## Fase 1: Creare un pacchetto di distribuzione della funzione Lambda
<a name="lra-console-create-package"></a>

In questo passaggio, crei un pacchetto di distribuzione della funzione Lambda, che è un file ZIP che contiene il codice e le dipendenze della funzione. Inoltre, scarichi il AWS IoT Greengrass Core SDK da includere nel pacchetto come dipendenza.

1. Sul computer, copia il seguente script Python in un file locale denominato `lraTest.py`. Questa è la logica dell'app per la funzione Lambda.

   ```
   # Demonstrates a simple use case of local resource access.
   # This Lambda function writes a file test to a volume mounted inside
   # the Lambda environment under destLRAtest. Then it reads the file and 
   # publishes the content to the AWS IoT LRAtest topic. 
   
   import sys
   import greengrasssdk
   import platform
   import os
   import logging
   
   # Setup logging to stdout
   logger = logging.getLogger(__name__)
   logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
   
   # Create a Greengrass Core SDK client.
   client = greengrasssdk.client('iot-data')
   volumePath = '/dest/LRAtest'
   
   def function_handler(event, context):
       try:
           client.publish(topic='LRA/test', payload='Sent from AWS IoT Greengrass Core.')
           volumeInfo = os.stat(volumePath)
           client.publish(topic='LRA/test', payload=str(volumeInfo))
           with open(volumePath + '/test', 'a') as output:
               output.write('Successfully write to a file.')
           with open(volumePath + '/test', 'r') as myfile:
               data = myfile.read()
           client.publish(topic='LRA/test', payload=data)
       except Exception as e:
           logger.error('Failed to publish message: ' + repr(e))
       return
   ```

1. <a name="download-ggc-sdk"></a> Dalla pagina dei download di [AWS IoT Greengrass Core SDK](what-is-gg.md#gg-core-sdk-download), scarica AWS IoT Greengrass Core SDK per Python sul tuo computer.

1. <a name="unzip-ggc-sdk"></a>Decomprimere il pacchetto scaricato per ottenere l'SDK. Il kit SDK è la cartella `greengrasssdk`.

1. Comprimi i seguenti elementi in un file denominato `lraTestLambda.zip`:
   + `lraTest.py`. Logica delle app.
   + `greengrasssdk`. Libreria richiesta per tutte le funzioni Python Lambda.

   Il `lraTestLambda.zip` file è il pacchetto di distribuzione della funzione Lambda. Ora sei pronto per creare una funzione Lambda e caricare il pacchetto di distribuzione.

## Fase 2: Creare e pubblicare una funzione Lambda
<a name="lra-console-create-function"></a>

In questo passaggio, si utilizza la AWS Lambda console per creare una funzione Lambda e configurarla per utilizzare il pacchetto di distribuzione. In seguito, pubblicherai una versione della funzione e creerai un alias.

Innanzitutto, crea la funzione Lambda.

1. In Console di gestione AWS, scegli **Servizi** e apri la AWS Lambda console.

1. Scegli **Funzioni**.

1. <a name="lambda-console-create-function"></a>Scegli **Crea funzione** e poi scegli **Autore da zero**.

1. Nella sezione **Basic information (Informazioni di base)**, specifica i seguenti valori:

   1. Nel campo **Function name (Nome funzione)**, immettere **TestLRA**.

   1. In **Runtime**, scegliere **Python 3.7**.

   1. Per **le autorizzazioni**, mantieni l'impostazione predefinita. Questo crea un ruolo di esecuzione che concede le autorizzazioni Lambda di base. Questo ruolo non viene utilizzato da. AWS IoT Greengrass

1. Scegli **Crea funzione**.  
![\[La pagina Create function (Crea funzione) con il pulsante Create function (Crea funzione) evidenziato.\]](http://docs.aws.amazon.com/it_it/greengrass/v1/developerguide/images/lra-console/create-function.png)

    

1. Carica il pacchetto di distribuzione della funzione Lambda e registra il gestore.

   1. <a name="lambda-console-upload"></a>Nella scheda **Codice**, in **Codice sorgente**, scegli **Carica** da. Dal menu a discesa, scegli un **file.zip.**  
![\[Il menu a discesa Carica da con il file.zip evidenziato.\]](http://docs.aws.amazon.com/it_it/greengrass/v1/developerguide/images/lra-console/upload-deployment-package.png)

   1. Scegli **Carica**, quindi scegli il pacchetto di `lraTestLambda.zip` distribuzione. Poi, scegli **Salva**.

   1. <a name="lambda-console-runtime-settings-para"></a>Nella scheda **Codice** della funzione, in **Impostazioni di runtime**, scegliete **Modifica**, quindi immettete i seguenti valori.
      + In **Runtime**, scegliere **Python 3.7**.
      + Per **Handler**, immettere **lraTest.function\$1handler**.

   1. <a name="lambda-console-save-config"></a>Scegli **Save** (Salva).
**Nota**  
Il pulsante **Test** sulla AWS Lambda console non funziona con questa funzione. Il AWS IoT Greengrass Core SDK non contiene moduli necessari per eseguire le funzioni Greengrass Lambda in modo indipendente nella console. AWS Lambda Questi moduli (ad esempio,`greengrass_common`) vengono forniti alle funzioni dopo essere stati distribuiti nel core Greengrass.

   Successivamente, pubblica la prima versione della tua funzione Lambda. Quindi, creare un [alias per la versione](https://docs.aws.amazon.com/lambda/latest/dg/versioning-aliases.html).

   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. Invece, è sufficiente indirizzare l'alias alla nuova versione della funzione.

1. Da **Actions (Operazioni)**, seleziona **Publish new version (Pubblica nuova versione)**.

1. Per **Version description (Descrizione versione)**, immettere **First version**, quindi scegliere **Publish (Pubblica)**.

1. Nella pagina di configurazione **TestLRA: 1**, in **Actions (Operazioni)**, scegli **Create alias (Crea alias)**.

1. Nella pagina **Crea alias**, per **Nome, inserisci**. **test** Per **Version (Versione)**, immetti **1**. 
**Nota**  
AWS IoT Greengrass **non supporta gli alias Lambda per le versioni \$1LATEST.**

1. Scegli **Create** (Crea).  
![\[La pagina Create a new alias (Crea un nuovo alias) con il pulsante Create (Crea) evidenziato.\]](http://docs.aws.amazon.com/it_it/greengrass/v1/developerguide/images/lra-console/create-alias.png)

   Ora puoi aggiungere la funzione Lambda al tuo gruppo Greengrass.

## Fase 3: Aggiungere la funzione Lambda al gruppo Greengrass
<a name="lra-console-add-function"></a>

In questa fase, aggiungerai la funzione al gruppo e configurerai il ciclo di vita della funzione.

Innanzitutto, aggiungi la funzione Lambda al tuo gruppo Greengrass.

1. Nel riquadro di navigazione della AWS IoT console, in **Gestione**, espandi **i dispositivi Greengrass**, quindi scegli **Gruppi (V1**).

1. Scegli il gruppo Greengrass in cui desideri aggiungere la funzione Lambda.

1. Nella pagina di configurazione del gruppo, scegli la scheda **Funzioni Lambda**.

1. **Nella sezione **Le mie funzioni Lambda**, scegli Aggiungi.**

1. **Nella pagina **Aggiungi funzione Lambda, scegli la funzione** Lambda.** Seleziona **TestLRA**.

1. Scegli la versione della **funzione Lambda.**

1. Nella sezione **Configurazione della funzione Lambda**, seleziona **Utente e gruppo di sistema e** Containerizzazione della funzione **Lambda**.

    

   Quindi, configura il ciclo di vita della funzione Lambda.

1. Per **Timeout**, scegli **30 seconds (30 secondi)**.
**Importante**  
Le funzioni Lambda che utilizzano risorse locali (come descritto in questa procedura) devono essere eseguite in un contenitore Greengrass. In caso contrario, il tentativo di distribuire la funzione avrà esito negativo. Per ulteriori informazioni, consulta [Containerizzazione](lambda-group-config.md#lambda-function-containerization).

1. Nella parte inferiore della pagina, scegli **Aggiungi funzione Lambda**.

## Fase 4: aggiungere una risorsa locale al gruppo Greengrass
<a name="lra-console-create-resource"></a>

In questa fase, aggiungerai una risorsa di volume locale al gruppo Greengrass e concederai alla funzione l'accesso in lettura e scrittura alla risorsa. Una risorsa locale dispone di un ambito a livello di gruppo. Puoi concedere le autorizzazioni per qualsiasi funzione Lambda del gruppo per accedere alla risorsa.

1. Nella pagina di configurazione del gruppo, scegli la scheda **Risorse**.

1. Nella sezione **Risorse locali**, scegli **Aggiungi**.

1. Nella pagina **Aggiungi una risorsa locale**, utilizza i seguenti valori.

   1. Per **Resource Name (Nome risorsa)** immetti **testDirectory**.

   1. Per **Resource type (Tipo di risorsa)**, scegli **Volume**.

   1. Per **Percorso del dispositivo locale**, immettere**/src/LRAtest**. Questo percorso deve esistere sul sistema operativo dell'host. 

      Il percorso del dispositivo locale è il percorso assoluto locale della risorsa sul file system del dispositivo principale. Questa posizione è esterna al [container](lambda-group-config.md#lambda-function-containerization) in cui viene eseguita la funzione. Il percorso non può iniziare con `/sys`.

   1. Per **Destination path (Percorso di destinazione)**, immetti **/dest/LRAtest**. Questo percorso deve esistere sul sistema operativo dell'host.

      Il percorso di destinazione è il percorso assoluto della risorsa nello spazio dei nomi Lambda. Questa posizione è interna al container in cui viene eseguita la funzione.

   1. In **Proprietario del gruppo di sistema e autorizzazione di accesso ai file**, seleziona **Aggiungi automaticamente le autorizzazioni del file system del gruppo di sistema** proprietario della risorsa.

      L'opzione **System group owner and file access permission (proprietario** del gruppo di sistema e autorizzazione all'accesso ai file) consente di concedere ulteriori autorizzazioni di accesso ai file al processo Lambda. Per ulteriori informazioni, consulta [Autorizzazione di accesso ai file dell'owner del gruppo](access-local-resources.md#lra-group-owner).

1. Scegliere **Add resource (Aggiungi risorsa)**. Nella pagina **Resources (Risorse)** viene visualizzata la nuova risorsa testDirectory.

## Fase 5: aggiungere sottoscrizioni al gruppo Greengrass
<a name="lra-console-add-subscription"></a>

In questa fase, aggiungerai due sottoscrizioni al gruppo Greengrass. Questi abbonamenti consentono la comunicazione bidirezionale tra la funzione Lambda e. AWS IoT

Innanzitutto, crea un abbonamento per la funzione Lambda a cui inviare messaggi. AWS IoT

1. Nella pagina di configurazione del gruppo, scegli la scheda **Abbonamenti**.

1. Scegliere **Aggiungi**.

1. Nella pagina **Crea un abbonamento**, configura l'origine e la destinazione come segue:

   1. **Per **Tipo di sorgente**, scegli la **funzione Lambda**, quindi scegli TestLRA.**

   1. Per il **tipo di Target**, scegli **Servizio**, quindi scegli **IoT Cloud**.

   1. Per il **filtro per argomento****LRA/test**, inserisci, quindi scegli **Crea abbonamento**.

1. Nella pagina **Subscriptions (Sottoscrizioni)** viene visualizzata la nuova sottoscrizione.

    

   Quindi, configura un abbonamento che richiami la funzione da. AWS IoT

1. **Nella pagina **Abbonamenti**, scegli Aggiungi abbonamento.**

1. Nella pagina **Select your source and target (Seleziona origine e destinazione)**, configura l'origine e la destinazione come indicato di seguito:

   1. Per **Tipo di sorgente**, scegli la **funzione Lambda**, quindi scegli **IoT** Cloud.

   1. Per **Tipo di destinazione**, scegli **Servizio**, quindi scegli **TestLRA**.

   1. Scegli **Next (Successivo)**.

1. Nella pagina **Filter your data with a topic (Filtra i dati con un argomento)**, in **Topic filter (Filtro argomento)**, immetti **invoke/LRAFunction**, quindi scegliere **Next (Avanti)**.

1. Scegli **Fine**. Nella pagina **Subscriptions (Sottoscrizioni)** vengono visualizzate le sottoscrizioni.

## Passaggio 6: Distribuire il gruppo AWS IoT Greengrass
<a name="lra-console-deploy-group"></a>

In questa fase, distribuirai la versione corrente della definizione del gruppo.

1. Assicurati che il AWS IoT Greengrass core sia in funzione. Esegui i seguenti comandi nel terminale di Raspberry Pi in base alle esigenze.

   1. Per controllare se il daemon è in esecuzione:

      ```
      ps aux | grep -E 'greengrass.*daemon'
      ```

      Se l'output contiene una voce `root` per `/greengrass/ggc/packages/1.11.6/bin/daemon`, allora il daemon è in esecuzione.
**Nota**  
La versione indicata nel percorso dipende dalla versione del software AWS IoT Greengrass Core installata sul dispositivo principale.

   1. Per avviare il demone:

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

1. **Nella pagina di configurazione del gruppo, scegli Deploy.**
**Nota**  
La distribuzione fallisce se si esegue la funzione Lambda senza containerizzazione e si tenta di accedere alle risorse locali collegate.

1. **Se richiesto, nella scheda Funzione **Lambda**, in Funzioni **Lambda di sistema**, **selezionare Rilevatore IP**, **quindi Modifica e quindi** Rileva automaticamente.**

   Questo consente ai dispositivi di acquisire automaticamente informazioni di base sulla connettività, come, ad esempio indirizzo IP, DNS e numero della porta. Il rilevamento automatico è consigliato, ma supporta AWS IoT Greengrass anche gli endpoint specificati manualmente. Ti viene chiesto il metodo di individuazione solo la prima volta che il gruppo viene distribuito.
**Nota**  
Se richiesto, concedi l'autorizzazione a creare il ruolo di [servizio Greengrass](service-role.md) e associarlo al Account AWS tuo ruolo attuale. Regione AWS Questo ruolo consente di accedere AWS IoT Greengrass alle tue risorse nei AWS servizi.

   Nella pagina **Deployments (Distribuzioni)** vengono visualizzati il timestamp della distribuzione, l'ID versione e lo stato. Una volta completata, lo stato della distribuzione è **Completato**.

   Per la risoluzione dei problemi, consultare [Risoluzione dei problemi AWS IoT Greengrass](gg-troubleshooting.md).

## Test dell'accesso alle risorse locali
<a name="lra-console-test-results"></a>

Ora puoi verificare se l'accesso alla risorsa locale è configurato correttamente. Per eseguire il test, devi abbonarti all'argomento `LRA/test` e pubblicare nell'argomento `invoke/LRAFunction`. Il test ha esito positivo se la funzione Lambda invia il payload previsto a. AWS IoT

1. Dal menu di navigazione della AWS IoT console, in **Test**, scegliete **MQTT** test client.

1. In **Sottoscrivi a un argomento**, per **Filtro argomento**, inserisci**LRA/test**.

1. In **Informazioni aggiuntive**, per la **visualizzazione del payload MQTT**, seleziona **Visualizza i payload** come stringhe.

1. Scegli **Abbonati**. La tua funzione Lambda pubblica sull'argomento. LRA/test   
![\[La pagina Subscriptions (Sottoscrizioni) con l'opzione Subscribe to topic (Sottoscrivi nell'argomento) evidenziata.\]](http://docs.aws.amazon.com/it_it/greengrass/v1/developerguide/images/lra-console/test-subscribe.png)

1. In **Pubblica su un argomento**, inserisci il **nome dell'argomento****invoke/LRAFunction**, quindi scegli **Pubblica** per richiamare la funzione Lambda. Il test ha esisto positivo se nella pagina vengono visualizzati tre payload del messaggio della funzione.  
![\[La pagina Sottoscrizioni con l' invoke/LRAFunction argomento e Pubblica sull'argomento evidenziati e i risultati dei test con i dati dei messaggi.\]](http://docs.aws.amazon.com/it_it/greengrass/v1/developerguide/images/lra-console/test-publish.png)

Il file di test creato dalla funzione Lambda si trova nella `/src/LRAtest` directory del dispositivo principale Greengrass. Sebbene la funzione Lambda scriva su un file nella `/dest/LRAtest` directory, tale file è visibile solo nello spazio dei nomi Lambda. Non è possibile visualizzarlo in un normale spazio dei nomi Linux. Le eventuali modifiche apportate al percorso di destinazione vengono applicate al percorso di origine nel file system.

Per la risoluzione dei problemi, consultare [Risoluzione dei problemi AWS IoT Greengrass](gg-troubleshooting.md).