

Aviso de fin de soporte: el 7 de octubre de 2026, AWS suspenderemos el soporte para AWS IoT Greengrass Version 1. Después del 7 de octubre de 2026, ya no podrá acceder a los AWS IoT Greengrass V1 recursos. Para obtener más información, visita [Migrar desde AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html).

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Acceder a recursos locales con conectores y funciones de Lambda
<a name="access-local-resources"></a>

Esta función está disponible para AWS IoT Greengrass Core v1.3 y versiones posteriores.

Con AWS IoT Greengrass ella, puede crear AWS Lambda funciones y configurar [conectores](connectors.md) en la nube e implementarlos en los dispositivos principales para su ejecución local. En los núcleos Greengrass que se ejecuten con Linux, los conectores y las funciones de Lambda implementados de forma local pueden obtener acceso a recursos locales que estén físicamente presentes en el dispositivo del núcleo de Greengrass. Por ejemplo, para comunicarse con dispositivos que están conectados a través de Modbus o CANbus, puede habilitar la función Lambda para acceder al puerto serie del dispositivo principal. Para configurar un acceso seguro a los recursos locales, debe garantizar la seguridad del hardware físico y el sistema operativo del dispositivo del núcleo de Greengrass.

Para empezar a obtener acceso a recursos locales, consulte los siguientes tutoriales:
+ [Cómo configurar el acceso a los recursos locales mediante la interfaz de línea de AWS comandos](lra-cli.md)
+ [Cómo configurar el acceso a los recursos locales mediante Consola de administración de AWS](lra-console.md)

## Tipos de recursos admitidos
<a name="lra-resource-types"></a>

Puede obtener acceso a dos tipos de recursos locales: recursos de volumen y recursos de dispositivo.

**Recursos de volumen**  
Archivos o directorios del sistema de archivos raíz (excepto de `/sys`, `/dev` o `/var`). Entre ellos se incluyen:  
+ Carpetas o archivos que se utilizan para leer o escribir información en funciones de Lambda de Greengrass (por ejemplo, `/usr/lib/python2.x/site-packages/local`).
+ Carpetas o archivos en el sistema de archivos /proc del host (por ejemplo, `/proc/net` o `/proc/stat`). Compatible con la versión 1.6 o posterior. Para informarse de los requisitos adicionales, consulte [Recursos de volumen en el directorio /proc](#lra-proc-resources).
Para configurar los directorios `/var`, `/var/run` y `/var/lib` como recursos de volumen, primero monte el directorio en otra carpeta y, a continuación, configure la carpeta como un recurso de volumen.
Al configurar recursos de volumen, debe especificar una ruta de *origen* y una ruta de *destino*. La ruta de origen es la ruta completa del recurso en el host. La ruta de destino es la ruta completa del recurso en el entorno del espacio de nombres de Lambda. Es el contenedor en el que se ejecuta un conector o una función de Lambda de Greengrass. Cualquier cambio que se realice en la ruta de destino se refleja en ruta de origen del sistema de archivos del host.  
Los archivos de la ruta de destino solo se pueden ver en el espacio de nombres de Lambda. No es posible verlos en un espacio de nombres normal de Linux.

**Recursos de dispositivo**  
Archivos en `/dev`. Solo tienen permiso para obtener acceso a los recursos de dispositivo los dispositivos de caracteres o los dispositivos de bloques en `/dev`. Entre ellos se incluyen:  
+ Puertos de serie que se utilizan para comunicarse con dispositivos conectados a través de puertos de serie (por ejemplo, `/dev/ttyS0`, `/dev/ttyS1`).
+ USB utilizados para conectar periféricos USB (por ejemplo, `/dev/ttyUSB0` o `/dev/bus/usb`).
+ GPIOs se utiliza para sensores y actuadores mediante GPIO (por ejemplo,). `/dev/gpiomem`
+ GPUs se utiliza para acelerar el aprendizaje automático mediante el uso integrado GPUs (por ejemplo,). `/dev/nvidia0`
+ Cámaras que se utilizan para capturar imágenes y vídeos (por ejemplo, `/dev/video0`).
`/dev/shm` es una excepción. Se puede configurar solo como un recurso de volumen. Se debe conceder permiso `rw` a los recursos de `/dev/shm`.

AWS IoT Greengrass también admite los tipos de recursos que se utilizan para realizar inferencias de aprendizaje automático. Para obtener más información, consulte [Cómo realizar la inferencia de machine learning](ml-inference.md).

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

Los siguientes requisitos se aplican para configurar el acceso seguro a los recursos locales:
+ Debe utilizar AWS IoT Greengrass Core Software v1.3 o una versión posterior. Para crear recursos para el directorio del host/proc, debe utilizar la versión 1.6 o posterior.
+ Los recursos locales (incluidos los controladores y las bibliotecas necesarias) deben estar correctamente instalados en el dispositivo del núcleo de Greengrass y disponibles durante su uso.
+ La operación deseada del recurso y el acceso al mismo no debe requerir privilegios raíz. 
+ Solo están disponibles los permisos `read` o `read and write`. Las funciones de Lambda no pueden realizar operaciones privilegiadas en los recursos.
+ Debe proporcionar la ruta completa del recurso local en el sistema operativo del dispositivo de Greengrass Core.
+ Un nombre o ID de recursos debe tener un máximo de 128 caracteres y utilizar el patrón `[a-zA-Z0-9:_-]+`.

### Recursos de volumen en el directorio /proc
<a name="lra-proc-resources"></a>

Las siguientes consideraciones se aplican a los recursos de volumen que se encuentran bajo el directorio /proc del host.
+ Debe utilizar AWS IoT Greengrass Core Software v1.6 o posterior.
+ Puede permitir acceso de solo lectura a las funciones de Lambda, pero no acceso de lectura y escritura. Este nivel de acceso lo gestiona AWS IoT Greengrass.
+ Es posible que también necesite conceder permisos de grupo de SO para habilitar el acceso de lectura en el sistema de archivos. Por ejemplo, suponga que su directorio o archivo de origen tiene un permiso de archivo 660, lo que significa que solo el propietario o usuario del grupo tiene acceso de lectura (y escritura). En este caso, debe añadir permisos de propietario del grupo de SO al recurso. Para obtener más información, consulte [Group owner file access permission (Permiso de acceso a los archivos del propietario del grupo)](#lra-group-owner).
+ Tanto el entorno de host como el espacio de nombres de Lambda contienen un directorio /proc, así que asegúrese de evitar conflictos de nomenclatura cuando especifique la ruta de destino. Por ejemplo, si /proc es la ruta de origen, puede especificar /host-proc como la ruta de destino (o cualquier nombre de ruta que no sea "*/proc*").

## Group owner file access permission (Permiso de acceso a los archivos del propietario del grupo)
<a name="lra-group-owner"></a>

Un proceso de función AWS IoT Greengrass Lambda normalmente se ejecuta como `ggc_user` y. `ggc_group` Sin embargo, puede dar permisos de acceso a archivos adicionales al proceso de la función de Lambda en la definición de recursos locales, tal y como se indica a continuación:
+ Para añadir los permisos del grupo Linux propietario del recurso, utilice el parámetro `GroupOwnerSetting#AutoAddGroupOwner` o la opción de consola **Añadir automáticamente los permisos del sistema de archivos del grupo del sistema propietario del recurso**.
+ Para añadir los permisos de otro grupo de Linux, utilice el parámetro `GroupOwnerSetting#GroupOwner` o la opción de la consola **Especifique otro grupo de sistemas para añadir los permisos del sistema**. El valor `GroupOwner` se omite si `GroupOwnerSetting#AutoAddGroupOwner` es true.

Un proceso de función AWS IoT Greengrass Lambda hereda todos los permisos del sistema de archivos de `ggc_user``ggc_group`, y del grupo Linux (si se ha agregado). Para que esta función de Lambda tenga acceso a un recurso, el proceso de función de Lambda debe tener los permisos necesarios para el recurso. Puede utilizar el comando `chmod(1)` para cambiar el permiso del recurso, si es necesario.

## Véase también
<a name="lra-seealso"></a>
+ [Cuotas de servicio](https://docs.aws.amazon.com/general/latest/gr/greengrass.html#limits_greengrass) de los recursos en la *Referencia general de Amazon Web Services*

# Cómo configurar el acceso a los recursos locales mediante la interfaz de línea de AWS comandos
<a name="lra-cli"></a>

Esta función está disponible para AWS IoT Greengrass Core v1.3 y versiones posteriores.

Para utilizar un recurso local, debe añadir una definición del recurso a la definición del grupo que se ha implementado en su dispositivo del núcleo de Greengrass. La definición del grupo también debe contener la definición de una función de Lambda en la que se conceden permisos de acceso para recursos locales a las funciones de Lambda. Para obtener más información, incluidos los requisitos y las restricciones, consulte [Acceder a recursos locales con conectores y funciones de Lambda](access-local-resources.md).

Este tutorial describe el proceso para crear un recurso local y configurar el acceso al mismo mediante la AWS Command Line Interface (CLI). Para seguir los pasos del tutorial, debe haber creado un grupo de Greengrass como se describe en [Empezar con AWS IoT Greengrass](gg-gs.md). 

Para ver un tutorial que utiliza el Consola de administración de AWS, consulte[Cómo configurar el acceso a los recursos locales mediante Consola de administración de AWS](lra-console.md).

## Creación de recursos locales
<a name="lra-cli-create-resources"></a>

En primer lugar, utilice el comando `[CreateResourceDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/createresourcedefinition-post.html)` para crear una definición de recurso que especifique los recursos a los que se accederá. En este ejemplo, se crean dos recursos, `TestDirectory` y `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": ""
                        }
                    }
                }
            }
        ]
    }
}'
```

**Recursos**: una lista de objetos `Resource` del grupo de Greengrass. Un grupo de Greengrass puede tener hasta 50 recursos.

**Resource\$1Id**: el identificador único del recurso. El ID se utiliza para consultar un recurso en la configuración de la función de Lambda. Longitud máxima 128 caracteres. Patrón: [a-zA-Z0-9:\$1-]\$1. 

**Nombre del recurso**: el nombre del recurso. El nombre del recurso se muestra en la consola de Greengrass. Longitud máxima 128 caracteres. Patrón: [a-zA-Z0-9:\$1-]\$1.

**LocalDeviceResourceData\$1 SourcePath**: La ruta absoluta local del recurso del dispositivo. La ruta de origen de un recurso de dispositivo solo puede consultar un dispositivo de carácter o dispositivo de bloques bajo `/dev`.

**LocalVolumeResourceData\$1 SourcePath**: La ruta absoluta local del recurso de volumen en el dispositivo principal de Greengrass. Esta ubicación se encuentra fuera del [contenedor](lambda-group-config.md#lambda-function-containerization) en el que se ejecuta la característica. La ruta de origen de un tipo de recurso de volumen no puede empezar con `/sys`.

**LocalVolumeResourceData\$1 DestinationPath**: La ruta absoluta del recurso de volumen dentro del entorno Lambda. Esta ubicación se encuentra dentro del contenedor en el que se ejecuta la característica.

**GroupOwnerSetting**: le permite configurar privilegios de grupo adicionales para el proceso Lambda. Este campo es opcional. Para obtener más información, consulte [Group owner file access permission (Permiso de acceso a los archivos del propietario del grupo)](access-local-resources.md#lra-group-owner).

**GroupOwnerSetting\$1 AutoAddGroupOwner**: Si es verdadero, Greengrass añade automáticamente el propietario del recurso al grupo de sistemas operativos Linux especificado a los privilegios del proceso de Lambda. El proceso Lambda tiene los permisos de acceso a los archivos del grupo de Linux añadido.

**GroupOwnerSetting\$1 GroupOwner**: Especifica el nombre del grupo de sistemas operativos Linux cuyos privilegios se agregan al proceso Lambda. Este campo es opcional. 

`[CreateResourceDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/createresourcedefinition-post.html)` devuelve un ARN de la versión de la definición del recurso. El ARN debe utilizarse al actualizar la definición de un grupo.

```
{
    "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"
}
```

## Creación de la función de Greengrass
<a name="lra-cli-create-function"></a>

Después de crear los recursos, utilice el comando `[CreateFunctionDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/createfunctiondefinition-post.html)` para crear la característica de Greengrass y conceder a la característica acceso al recurso: 

```
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 los `resourceId` y `permission` que otorgan a la función Lambda acceso al recurso. Una función de Lambda puede acceder a un máximo de 20 recursos.

**ResourceAccessPolicy\$1Permission**: Especifica qué permisos tiene la función Lambda en el recurso. Las opciones disponibles son `rw` (lectura/escritura) o `ro` (solo lectura). 

**AccessSysfs**: Si es verdadero, el proceso Lambda puede tener acceso de lectura a la `/sys` carpeta del dispositivo principal de Greengrass. Esto se utiliza en casos en los que la función de Lambda Greengrass debe leer información del dispositivo de `/sys`.

De nuevo, `[CreateFunctionDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/createfunctiondefinition-post.html)` devuelve un ARN de versión de la definición de la característica. El ARN se debe utilizar en la versión de la definición del grupo. 

```
{
    "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"
}
```

## Añadir la función de Lambda al grupo
<a name="lra-cli-add-function"></a>

Por último, utilice `[CreateGroupVersion](https://docs.aws.amazon.com/greengrass/v1/apireference/creategroupversion-post.html)` para añadir la característica al grupo. Por ejemplo:

```
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**  
Para obtener información sobre cómo obtener el ID del grupo para utilizarlo con este comando, consulte [Obtener el ID del grupo](deployments.md#api-get-group-id).

Se devuelve una nueva versión del grupo:

```
{
    "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"
}
```

Su grupo de Greengrass ahora contiene la función *LRATest* Lambda que tiene acceso a dos recursos: y. TestDirectory TestCamera

Este ejemplo de función de Lambda `lraTest.py`, escrito en Python, escribe en el recurso del volumen local: 

```
# 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
```

Estos comandos los proporciona la API de Greengrass para crear y gestionar definiciones del recurso y versiones de definiciones del recurso:
+ [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)

## Resolución de problemas
<a name="lra-faqs"></a>
+ **P:** ¿Por qué la implementación de mi grupo de Greengrass falla con un error similar a:

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

  **R:** Este error indica que el proceso Lambda no tiene permiso para acceder a los recursos especificados. La solución es cambiar el permiso a los archivos del recurso para que Lambda pueda acceder a él. (Consulte [Group owner file access permission (Permiso de acceso a los archivos del propietario del grupo)](access-local-resources.md#lra-group-owner) para obtener información).
+ **P:** Cuando configuro `/var/run` como un recurso de volumen, ¿por qué la función de Lambda falla al iniciar con un mensaje de error en 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:** el AWS IoT Greengrass núcleo actualmente no admite la configuración de `/var``/var/run`, y `/var/lib` como recursos de volumen. Una alternativa es montar `/var`, `/var/run` o `/var/lib` en otra carpeta primero y, a continuación, configurar la carpeta como un recurso de volumen.
+ **P**: Cuando configuro `/dev/shm` como un recurso de volumen con un permiso de solo lectura, ¿por qué la función de Lambda no se inicia y da un error en 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` solo se puede configurar como de lectura o escritura. Cambie el permiso en el nivel de recursos a `rw` para resolver el problema.

# Cómo configurar el acceso a los recursos locales mediante Consola de administración de AWS
<a name="lra-console"></a>

Esta función está disponible para AWS IoT Greengrass Core v1.3 y versiones posteriores.

Puede configurar funciones de Lambda para obtener acceso seguro a los recursos locales en el dispositivo host del núcleo de Greengrass. Los *recursos locales* son los buses y periféricos que se encuentran físicamente en el mismo host o volúmenes del sistema de archivos del sistema operativo del host. Para obtener más información, incluidos los requisitos y las restricciones, consulte [Acceder a recursos locales con conectores y funciones de Lambda](access-local-resources.md).

En este tutorial se describe cómo utilizarla Consola de administración de AWS para configurar el acceso a los recursos locales que están presentes en un dispositivo AWS IoT Greengrass principal. Contiene los siguientes pasos de alto nivel:

1. [Creación de un paquete de implementación de la función de Lambda](#lra-console-create-package)

1. [Crear y publicar una función de Lambda.](#lra-console-create-function)

1. [Añadir la función de Lambda al grupo](#lra-console-add-function)

1. [Agregar un recurso local al grupo](#lra-console-create-resource)

1. [Agregar suscripciones al grupo](#lra-console-add-subscription)

1. [Implementar el grupo](#lra-console-deploy-group)

Para ver un tutorial que utiliza el AWS Command Line Interface, consulte[Cómo configurar el acceso a los recursos locales mediante la interfaz de línea de AWS comandos](lra-cli.md).

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

Para completar este tutorial, se necesita lo siguiente:
+ Un grupo de Greengrass y un núcleo de Greengrass (versión 1.3 o posterior). Para crear un grupo o dispositivo del núcleo de Greengrass, consulte [Empezar con AWS IoT Greengrass](gg-gs.md).
+ Los siguientes directorios están en el dispositivo del núcleo de Greengrass:
  + /src/ LRAtest
  + /dest/ LRAtest

  El grupo propietario de estos directorios debe tener acceso de lectura y escritura a los directorios. Puede utilizar el siguiente comando para conceder el acceso:

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

## Paso 1: Creación de un paquete de implementación de la función de Lambda
<a name="lra-console-create-package"></a>

En este paso, va a crear un paquete de implementación de la función de Lambda, que es un archivo ZIP que contiene el código de la característica y dependencias. También debe descargar el SDK AWS IoT Greengrass principal para incluirlo en el paquete como dependencia.

1. En su equipo, copie el siguiente script de Python en un archivo local denominado `lraTest.py`. Contiene la lógica de la aplicación para la función de 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> Desde la página de descargas del [SDK AWS IoT Greengrass principal](what-is-gg.md#gg-core-sdk-download), descarga el SDK AWS IoT Greengrass básico para Python en tu ordenador.

1. <a name="unzip-ggc-sdk"></a>Descomprima el paquete descargado para obtener el SDK. El SDK es la carpeta `greengrasssdk`.

1. Comprima los siguientes elementos en un archivo denominado `lraTestLambda.zip`:
   + `lraTest.py`. Lógica de la aplicación.
   + `greengrasssdk`. Biblioteca necesaria para todas las funciones de Lambda de Python.

   El archivo `lraTestLambda.zip` es el paquete de implementación de la función de Lambda. Ya está listo para crear una función de Lambda y cargar el paquete de implementación.

## Paso 2: Crear y publicar una función de Lambda
<a name="lra-console-create-function"></a>

En este paso, utilizará la AWS Lambda consola para crear una función Lambda y configurarla para que utilice su paquete de despliegue. A continuación, publicará una versión de la característica y creará un alias.

Primero, cree la función de Lambda.

1. En Consola de administración de AWS, elija **Servicios** y abra la AWS Lambda consola.

1. Elija **Funciones**.

1. <a name="lambda-console-create-function"></a>Elija **Crear función**, y, a continuación, elija **Autor desde cero**.

1. En la sección **Basic information (Información básica)**, especifique los siguientes valores.

   1. En **Nombre de la función**, introduzca **TestLRA**.

   1. En **Runtime** (Tiempo de ejecución), elija **Python 3.7**.

   1. En **Permisos**, mantenga la configuración predeterminada. Esto crea un rol de ejecución que otorga permisos Lambda básicos. Esta función no la utiliza AWS IoT Greengrass.

1. Elija **Crear función**.  
![\[La página Create function (Crear función) con Create function (Crear función) resaltado.\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/images/lra-console/create-function.png)

    

1. Cargue el paquete de implementación de la función de Lambda y registre el controlador.

   1. <a name="lambda-console-upload"></a>En la pestaña **Código**, en **Código fuente**, seleccione **Cargar desde**. En el menú desplegable, seleccione un **archivo .zip.**  
![\[La carga del menú desplegable con el archivo .zip resaltado.\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/images/lra-console/upload-deployment-package.png)

   1. Seleccione **Cargar** y, a continuación, elija su paquete de implementación de `lraTestLambda.zip`. A continuación, elija **Guardar**.

   1. <a name="lambda-console-runtime-settings-para"></a>En la pestaña **Código** de la función, en **Configuración de tiempo de ejecución**, elija **Editar** y, a continuación, introduzca los siguientes valores.
      + En **Runtime** (Tiempo de ejecución), elija **Python 3.7**.
      + En **Handler (Controlador)**, escriba **lraTest.function\$1handler**.

   1. <a name="lambda-console-save-config"></a>Seleccione **Save**.
**nota**  
El botón de **prueba** de la AWS Lambda consola no funciona con esta función. El SDK AWS IoT Greengrass principal no contiene los módulos necesarios para ejecutar las funciones de Greengrass Lambda de forma independiente en la consola. AWS Lambda Estos módulos (por ejemplo, `greengrass_common`) se suministran a las funciones una vez desplegados en el núcleo de Greengrass.

   A continuación, publique la primera versión de la función de Lambda. A continuación, cree un [alias para la versión](https://docs.aws.amazon.com/lambda/latest/dg/versioning-aliases.html).

   Los grupos de Greengrass pueden hacer referencia a una función de Lambda por versión o alias (recomendado). El uso de un alias facilita la gestión de las actualizaciones del código porque no tiene que cambiar la tabla de suscripción o la definición del grupo cuando se actualiza el código de la función. En su lugar, basta con apuntar el alias a la nueva versión de la función.

1. En **Actions (Acciones)**, elija **Publish new version (Publicar nueva versión)**.

1. En **Version description (Descripción de versión)**, escriba **First version** y, a continuación, elija **Publish (Publicar)**.

1. En la página de configuración de **TestLRA: 1**, en el menú **Actions (Acciones)**, elija **Create alias (Crear alias)**.

1. En la página **Crear un alias**, introduzca **test** para **Nombre**. En **Version (Versión)**, escriba **1**. 
**nota**  
AWS IoT Greengrass **no admite los alias de Lambda para las versiones \$1LATEST.**

1. Seleccione **Crear**.  
![\[La página Create a new alias (Crear un nuevo alias) con Create (Crear) resaltado.\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/images/lra-console/create-alias.png)

   Ahora puede añadir la función de Lambda al grupo de Greengrass.

## Paso 3: Adición de la función de Lambda al grupo de Greengrass
<a name="lra-console-add-function"></a>

En este paso, va a añadir la función al grupo y va a configurar el ciclo de vida de la función.

Primero, añada la función de Lambda al grupo de Greengrass.

1. En el panel de navegación de la AWS IoT consola, en **Administrar**, expanda **los dispositivos Greengrass** y, a continuación, elija **Grupos (V1)**.

1. Elija el grupo de Greengrass en el que desea añadir la función de Lambda.

1. En la página de configuración del grupo, elija la pestaña **Funciones de Lambda**.

1. En la sección **Mis funciones de Lambda**, seleccione **Añadir**.

1. En la página **Añadir función de Lambda**, elija la **Función de Lambda**. Seleccione **TestLRA**.

1. Elija la **versión de la función de Lambda**.

1. En la sección **Configuración de la función de Lambda**, seleccione **Usuario y grupo del sistema** y **Creación de contenedores de la función de Lambda**.

    

   A continuación, configure el ciclo de vida de la función de Lambda.

1. En **Timeout (Tiempo de espera)**, elija **30 seconds (30 segundos)**.
**importante**  
Las funciones de Lambda que utilizan recursos locales (tal y como se describe en este procedimiento) deben ejecutarse en un contenedor de Greengrass. De lo contrario, si intenta implementar la función, se producirá un error en la implementación. Para obtener más información, consulte [Containerization (Creación de contenedores)](lambda-group-config.md#lambda-function-containerization).

1. En la parte inferior de la página, elija **Agregar función de Lambda**.

## Paso 4: Agregar un recurso local al grupo de Greengrass
<a name="lra-console-create-resource"></a>

En este paso, va a añadir un recurso de volumen local al grupo de Greengrass y va a conceder a la característica acceso de lectura y escritura al recurso. Un recurso local tiene un ámbito de nivel de grupo. Puede conceder permisos para que cualquier función de Lambda del grupo obtenga acceso al recurso.

1. En la página de configuración del grupo, elija la pestaña **Recursos**.

1. En la sección **Recursos locales**, seleccione **Añadir**.

1. En la página **Añadir un recurso local**, utilice los siguientes valores.

   1. En **Nombre del recurso**, escriba **testDirectory**.

   1. En **Resource type (Tipo de recurso)**, elija **Device (Dispositivo)**.

   1. En **Ruta del dispositivo local**, escriba **/src/LRAtest**. Esta ruta debe existir en el sistema operativo del host. 

      La ruta del dispositivo local es la ruta absoluta local del recurso en el sistema de archivos del dispositivo del núcleo. Esta ubicación se encuentra fuera del [contenedor](lambda-group-config.md#lambda-function-containerization) en el que se ejecuta la característica. La ruta no puede comenzar con `/sys`.

   1. En **Destination path (Ruta de destino)**, escriba **/dest/LRAtest**. Esta ruta debe existir en el sistema operativo del host.

      El valor de ruta de destino es la ruta completa del recurso en el espacio de nombres de Lambda. Esta ubicación se encuentra dentro del contenedor en el que se ejecuta la característica.

   1. En **Propietario del grupo del sistema y permiso de acceso a archivos**, seleccione **Añadir automáticamente permisos del sistema de archivos del grupo del sistema propietario del recurso**.

      La opción **Propietario del grupo del sistema y permiso de acceso a archivos** le permite conceder permisos adicionales de acceso a archivos al proceso de Lambda. Para obtener más información, consulte [Group owner file access permission (Permiso de acceso a los archivos del propietario del grupo)](access-local-resources.md#lra-group-owner).

1. Seleccione **Add resource** (Añadir recurso). La página **Resources** muestra el nuevo recurso testDirectory.

## Paso 5: Agregar suscripciones al grupo de Greengrass
<a name="lra-console-add-subscription"></a>

En este paso, va a añadir dos suscripciones al grupo de Greengrass. Estas suscripciones permiten la comunicación bidireccional entre la función Lambda y. AWS IoT

En primer lugar, cree una suscripción para que la función de Lambda envíe mensajes a AWS IoT.

1. En la página de configuración del grupo, elija la pestaña **Suscripciones**.

1. Elija **Añadir**.

1. En la página **Crear una suscripción**, configure el origen y el destino de la siguiente manera:

   1. Para **Tipo de origen**, elija **Función de lambda** y, a continuación, **TestLRA**.

   1. Para **Tipo de destino**, elija **Servicio** y, a continuación, **Nube de IoT**.

   1. **En **Filtro por temas**, introduzca **LRA/test** y, a continuación, seleccione Crear suscripción.**

1. La página **Subscriptions** muestra la nueva suscripción.

    

   A continuación, configure una suscripción que invoque la función desde. AWS IoT

1. En la página **Subscriptions**, elija **Add Subscription**.

1. En la página **Select your source and target**, configure el origen y el destino, de la siguiente manera:

   1. En **Tipo de origen**, elija la **función de Lambda** y, a continuación, elija **Nube de IoT**.

   1. Para **Tipo de destino**, elija **Servicio** y, a continuación, **TestLRA**.

   1. Elija **Siguiente**.

1. En la página **Filter your data with a topic (Filtrar los datos con un tema)**, en el campo **Topic filter (Filtro de temas)**, escriba **invoke/LRAFunction** y, a continuación, elija **Next (Siguiente)**.

1. Seleccione **Finalizar**. La página **Subscriptions** muestra ambas suscripciones.

## Paso 6: Implemente el grupo AWS IoT Greengrass
<a name="lra-console-deploy-group"></a>

En este paso, va a implementar la versión actual de la definición del grupo.

1. Asegúrese de que el AWS IoT Greengrass núcleo esté funcionando. Ejecute los siguientes comandos en el terminal de Raspberry Pi según sea necesario.

   1. Para comprobar si el daemon está en ejecución:

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

      Si la salida contiene una entrada `root` para `/greengrass/ggc/packages/1.11.6/bin/daemon`, el daemon está en ejecución.
**nota**  
La versión de la ruta depende de la versión del software AWS IoT Greengrass principal que esté instalada en el dispositivo principal.

   1. Inicio de daemon:

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

1. En la página de configuración de grupo, elija **Implementar**.
**nota**  
La implementación produce un error si ejecuta la función de Lambda sin creación de contenedores e intenta acceder a los recursos locales asociados.

1. Si se le solicita, en la pestaña **Función de lambda**, en **Funciones de Lambda del sistema**, seleccione **Detector IP** y, a continuación, **Editar** y, a continuación, **Detectar automáticamente**.

   Esto permite a los dispositivos adquirir automáticamente la información de conexión del dispositivo principal, como la dirección IP, el DNS y el número de puerto. Se recomienda la detección automática, pero AWS IoT Greengrass también es compatible con los puntos finales especificados manualmente. Solo se le solicitará el método de detección la primera vez que se implemente el grupo.
**nota**  
Si se le solicita, conceda permiso para crear el [rol de servicio de Greengrass](service-role.md) y asócielo al suyo Cuenta de AWS en el actual. Región de AWS Este rol le permite acceder AWS IoT Greengrass a sus recursos en los AWS servicios.

   En la página **Deployments** (Implementaciones), se muestra la marca temporal, el ID de versión y el estado de la implementación. Al terminar, el estado de la implementación es **Completado**.

   Para obtener ayuda sobre la resolución de problemas, consulte [Solución de problemas AWS IoT Greengrass](gg-troubleshooting.md).

## Probar el acceso al recurso local
<a name="lra-console-test-results"></a>

Ahora puede verificar si el acceso al recurso local se ha configurado correctamente. Para probarlo, suscríbase al tema `LRA/test` y publique en el tema `invoke/LRAFunction`. La prueba se realiza correctamente si la función Lambda envía la carga útil esperada a. AWS IoT

1. En el menú de navegación de la AWS IoT consola, en **Probar, elija el cliente de prueba** **MQTT**.

1. En **Suscribirse a un tema**, en **Filtro de temas**, introduzca **LRA/test**.

1. En **Información adicional**, en **Visualización de cargas útiles en MQTT**, seleccione **Mostrar cargas útiles** como cadenas.

1. Seleccione **Suscribirse**. La función Lambda publica en el LRA/test tema.  
![\[La página Subscriptions (Suscripciones) con Subscribe to topic (Suscribirse al tema) resaltado.\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/images/lra-console/test-subscribe.png)

1. En **Publicar en un tema**, en el **nombre del tema****invoke/LRAFunction**, escriba y, a continuación, elija **Publicar** para invocar la función de Lambda. La prueba se realiza correctamente si la página muestra las tres cargas de mensajes de la característica.  
![\[La página de suscripciones con el invoke/LRAFunction tema y Publicar en el tema resaltados y los resultados de las pruebas con los datos del mensaje.\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/images/lra-console/test-publish.png)

El archivo de prueba creado por la función de Lambda se encuentra en el directorio `/src/LRAtest` del dispositivo del núcleo de Greengrass. Aunque la función de Lambda escribe en un archivo del directorio `/dest/LRAtest`, ese archivo está visible solo en el espacio de nombres de Lambda. No puede verlo en un espacio de nombres normal de Linux. Cualquier cambio que se realice en la ruta de destino se refleja en ruta de origen del sistema de archivos.

Para obtener ayuda sobre la resolución de problemas, consulte [Solución de problemas AWS IoT Greengrass](gg-troubleshooting.md).