

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.

# Ejecución de funciones de AWS Lambda
<a name="run-lambda-functions"></a>

**nota**  
AWS IoT Greengrass actualmente no admite esta característica en los dispositivos principales de Windows. 

Puede importar funciones de AWS Lambda para que se ejecuten como componentes en los dispositivos principales de AWS IoT Greengrass. Es posible que desee hacerlo en las siguientes situaciones:
+ Tiene un código de aplicación en las funciones de Lambda que desea implementar en los dispositivos principales.
+ Tiene aplicaciones de AWS IoT Greengrass versión 1 que desea ejecutar en los dispositivos principales de AWS IoT Greengrass V2. Para obtener más información, consulte [Paso 2: Crear e implementar AWS IoT Greengrass V2 componentes para migrar aplicaciones AWS IoT Greengrass V1](set-up-v2-test-device.md#run-v1-applications).

Las funciones de Lambda incluyen dependencias de los siguientes componentes. No es necesario definir estos componentes como dependencias al importar la función. Si implementa un componente de función de Lambda, la implementación incluye estas dependencias del componente Lambda.
+ El [componente lanzador de Lambda](lambda-launcher-component.md) (`aws.greengrass.LambdaLauncher`) gestiona los procesos y la configuración del entorno.
+ El [componente administrador de Lambda](lambda-manager-component.md) (`aws.greengrass.LambdaManager`) gestiona la comunicación y el escalado entre procesos.
+ El [componente de tiempos de ejecución de Lambda](lambda-runtimes-component.md) (`aws.greengrass.LambdaRuntimes`) proporciona artefactos para cada tiempo de ejecución de Lambda compatible.

**Topics**
+ [

## Requisitos
](#run-lambda-functions-requirements)
+ [

## Configuración del ciclo de vida de una función de Lambda
](#lambda-lifecycle)
+ [

## Configuración de contenedores de funciones de Lambda
](#lambda-containerization)
+ [

# Importación de una función de Lambda como componente (consola)
](import-lambda-function-console.md)
+ [

# Importación de una función de Lambda como componente (AWS CLI)
](import-lambda-function-cli.md)

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

Sus dispositivos principales y las funciones de Lambda deben cumplir los siguientes requisitos para poder ejecutar las funciones en el software AWS IoT Greengrass Core:
+ <a name="core-device-lambda-function-requirements"></a>El dispositivo principal debe cumplir los requisitos para ejecutar las funciones de Lambda. Si desea que el dispositivo principal ejecute funciones de Lambda en contenedores, el dispositivo debe cumplir los requisitos para hacerlo. Para obtener más información, consulte [Requisitos de la función de Lambda](setting-up.md#greengrass-v2-lambda-requirements).
+ Debe instalar los lenguajes de programación que utiliza la función de Lambda en sus dispositivos principales.
**sugerencia**  
Puede crear un componente que instale el lenguaje de programación y, a continuación, especificar ese componente como una dependencia del componente de la función de Lambda. Greengrass es compatible con todas las versiones compatibles con Lambda de los tiempos de ejecución de Python, Node.js y Java. Greengrass no aplica ninguna restricción adicional a las versiones de tiempo de ejecución de Lambda obsoletas. Puede ejecutar funciones de Lambda que utilicen estos tiempos de ejecución obsoletos en AWS IoT Greengrass, pero no puede crearlas en AWS Lambda. Para obtener más información sobre la compatibilidad de AWS IoT Greengrass con los tiempos de ejecución de Lambda, consulte [Ejecución de funciones de AWS Lambda](#run-lambda-functions).

## Configuración del ciclo de vida de una función de Lambda
<a name="lambda-lifecycle"></a>

El ciclo de vida de la función de Lambda de Greengrass determina cuándo se inicia una función y cómo crea y utiliza contenedores. El ciclo de vida también determina cómo el software AWS IoT Greengrass Core retiene las variables y la lógica de preprocesamiento que están fuera del controlador de funciones.

AWS IoT Greengrass admite ciclos de vida bajo demanda (predeterminado) o de larga duración:
+ Las funciones **bajo demanda** se inician cuando se invocan y se detienen cuando no quedan tareas que ejecutar. Cada invocación de la función crea un contenedor independiente, también entorno de pruebas, para procesar invocaciones, a menos que haya un contenedor disponible que se pueda reutilizar. Es posible que cualquiera de los contenedores procese los datos que envíe a la función.

  Es posible ejecutar en paralelo varias invocaciones de una función bajo demanda.

  No se conserva ninguna variable ni lógica de procesamiento previo que se defina fuera del controlador de la función cuando se crean nuevos contenedores.
+ Las funciones de **larga duración** (o *ancladas*) se inician cuando se inicia el software AWS IoT Greengrass Core y se ejecutan en un solo contenedor. El mismo contenedor procesa todos los datos que se envían a la función.

  Se ponen en cola varias invocaciones hasta que el software AWS IoT Greengrass Core ejecuta las invocaciones anteriores.

  Las variables y lógica de procesamiento previo que se definen fuera del controlador de la función se conservan para cada invocación del controlador.

  Las funciones de Lambda de larga duración resultan útiles cuando necesita empezar a trabajar sin ninguna entrada inicial. Por ejemplo, una función de larga duración puede cargar y comenzar a procesar un modelo de machine learning para estar listo cuando la función reciba datos del dispositivo.
**nota**  
Recuerde que las funciones de larga duración tienen tiempos de espera que están asociados con invocaciones de su controlador. Si desea invocar el código que se ejecuta de forma indefinida, debe iniciarlo fuera del controlador. Asegúrese de que no haya código de bloqueo fuera del controlador que pudiera impedir la inicialización de la función.  
Estas funciones se ejecutan a menos que el software AWS IoT Greengrass Core se detenga, por ejemplo, durante una implementación o un reinicio. Estas funciones no se ejecutarán si la función encuentra una excepción no detectada, supera sus límites de memoria o entra en un estado de error, como el tiempo de espera del controlador.

Para obtener más información acerca de la reutilización de contenedores, consulte [Comprender la reutilización de contenedores de AWS Lambda](https://aws.amazon.com/blogs/compute/container-reuse-in-lambda/) en el *Blog de informática de AWS*.

## Configuración de contenedores de funciones de Lambda
<a name="lambda-containerization"></a>

De forma predeterminada, las funciones de Lambda se ejecutan dentro de un contenedor de AWS IoT Greengrass. Los contenedores de Greengrass proporcionan aislamiento entre sus funciones y el host. Este aislamiento aumenta la seguridad tanto del host como de las funciones del contenedor.

Le recomendamos que ejecute las funciones de Lambda en un contenedor de Greengrass a menos que su caso de uso requiera la ejecución sin contenedores. Al ejecutar las funciones de Lambda en un contenedor de Greengrass, tiene más control sobre la restricción de acceso a los recursos.

Puede ejecutar una función de Lambda sin contenedores en los siguientes casos:
+ Desea ejecutar AWS IoT Greengrass en un dispositivo que no sea compatible con el modo en contenedores. Un ejemplo sería si quisiera usar una distribución especial de Linux o si tiene una versión anterior del núcleo que está desactualizada.
+ Desea ejecutar su función de Lambda en otro entorno de contenedor con su propio OverlayFS, pero detecta conflictos de OverlayFS cuando la ejecuta en un contenedor de Greengrass.
+ Necesita acceso a recursos locales con rutas que no se pueden determinar en el momento de la implementación o cuyas rutas pueden cambiar después de la implementación. Un ejemplo de este recurso sería un dispositivo conectable.
+ Tiene una aplicación anterior que fue escrita como un proceso y encuentra problemas cuando la ejecuta en un contenedor de Greengrass.


**Diferencias en la creación de contenedores**  

| Creación de contenedores | Notas | 
| --- | --- | 
|  Contenedor de Greengrass  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/greengrass/v2/developerguide/run-lambda-functions.html)  | 
|  Sin contenedor  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/greengrass/v2/developerguide/run-lambda-functions.html)  | 

Si se cambia la creación en contenedores para una función de Lambda durante la implementación, es posible que la función no funcione según lo esperado. Si había asignado recursos locales a la función de Lambda que ya no están disponibles con la nueva configuración de creación en contenedores, la implementación genera un error.
+ Cuando se cambia una función de Lambda de la ejecución en un contenedor de Greengrass a la ejecución fuera de contenedores, se descartan los límites de memoria de la función. Debe acceder al sistema de archivos directamente en lugar de utilizar los recursos locales asociados. Debe eliminar todos los recursos adjuntos antes de implementar la función de Lambda.
+ Al cambiar una función de Lambda de la ejecución sin creación de contenedores a la ejecución en un contenedor, la función de Lambda pierde el acceso directo al sistema de archivos. Debe definir un límite de memoria para cada función o aceptar la opción predeterminada de 16 MB. Puede establecer esta configuración para cada función de Lambda antes de la implementación.

Para cambiar la configuración en contenedores de un componente de la función de Lambda, defina el valor del parámetro de configuración `containerMode` en una de las siguientes opciones al implementar el componente.<a name="lambda-function-component-container-mode-parameter"></a>
+ `NoContainer`: el componente no se ejecuta en un entorno de tiempo de ejecución aislado.
+ `GreengrassContainer`: el componente se ejecuta en un entorno de tiempo de ejecución aislado dentro del contenedor de AWS IoT Greengrass.

Para obtener más información acerca de cómo implementar aplicaciones, consulte [Implemente AWS IoT Greengrass componentes en los dispositivos](manage-deployments.md) y [Actualización de las configuraciones de los componentes](update-component-configurations.md).

# Importación de una función de Lambda como componente (consola)
<a name="import-lambda-function-console"></a>

Cuando utiliza la [consola de AWS IoT Greengrass](https://console.aws.amazon.com/greengrass) para crear un componente de una función de Lambda, importa una función de AWS Lambda y, a continuación, la configura para crear un componente que se ejecute en su dispositivo de Greengrass.

Antes de empezar, revise [los requisitos](https://docs.aws.amazon.com/greengrass/v2/developerguide/run-lambda-functions.html#run-lambda-functions-requirements) para ejecutar las funciones de Lambda en los dispositivos de Greengrass.

**Topics**
+ [

## Paso 1: Elegir una función de Lambda para importar
](#import-lambda-console-choose-function)
+ [

## Paso 2: Configurar los parámetros de la función de Lambda
](#import-lambda-console-configure-function-parameters)
+ [

## Paso 3: (Opcional) Especificar las plataformas compatibles con la función de Lambda
](#import-lambda-console-configure-platforms)
+ [

## Paso 4: (Opcional) Especificar las dependencias de los componentes para la función de Lambda
](#import-lambda-console-configure-dependencies)
+ [

## Paso 5: (Opcional) Ejecutar la función de Lambda en un contenedor
](#import-lambda-console-run-isolated)
+ [

## Paso 6: Crear el componente función de Lambda
](#import-lambda-console-create-deploy)

## Paso 1: Elegir una función de Lambda para importar
<a name="import-lambda-console-choose-function"></a>

1. En el menú de navegación de la [consola de AWS IoT Greengrass](https://console.aws.amazon.com/greengrass), elija **Componentes**.

1. En la página **Componentes**, seleccione **Crear componente**.

1. En la página **Crear componente**, en **Información del componente**, elija **Importar función de Lambda**.

1. En la **Función de Lambda**, busque y elija la función de Lambda que desea importar. 

   AWS IoT Greengrass crea el componente con el nombre de la función Lambda.

1. En la **versión de la función de Lambda**, elija la versión que desee importar. No puede elegir alias de Lambda como `$LATEST`.

   AWS IoT Greengrass crea el componente con la versión de la función Lambda como una versión semántica válida. Por ejemplo, si la versión de la función es `3`, la versión del componente se convierte en `3.0.0`.

## Paso 2: Configurar los parámetros de la función de Lambda
<a name="import-lambda-console-configure-function-parameters"></a>

En la página **Crear componente**, en **Configuración de la función de Lambda**, configure los siguientes parámetros para utilizarlos en la ejecución de la función de Lambda.

1. (Opcional) Agregue la lista de orígenes de eventos a los que se suscribe la función de Lambda para recibir mensajes de trabajo. Puede especificar las fuentes de eventos para suscribir esta función a los publish/subscribe mensajes locales y a los mensajes AWS IoT Core MQTT. Se llama a la función de Lambda cuando recibe un mensaje de un origen de evento.
**nota**  
Para suscribir esta función a los mensajes de otras funciones o componentes de Lambda, implemente el [componente enrutador de suscripciones heredado](legacy-subscription-router-component.md) al implementar este componente de la función de Lambda. Al implementar el componente del enrutador de suscripciones heredado, especifique las suscripciones que utiliza la función de Lambda.

   En **Orígenes de evento**, haga lo siguiente para agregar un origen del evento:

   1. Para cada origen de evento que agregue, especifique las siguientes opciones: 
      + **Topic**: el tema al que suscribirse a los mensajes.
      + **Type**: el tipo de origen de evento. Puede elegir entre las siguientes opciones:
        + **Publicar/suscribirse de forma local: suscríbase** a los mensajes locales. publish/subscribe 

          Si usa el [núcleo de Greengrass](greengrass-nucleus-component.md) versión 2.6.0 o posterior y el [administrador de Lambda](lambda-manager-component.md) versión 2.2.5 o posterior, puede usar los comodines de tema MQTT (`+` y `#`) en el **Topic** cuando especifique este tipo.
        + **AWS IoT Core MQTT**: suscríbase a AWS IoT Core los mensajes de MQTT.

          Puede usar comodines de temas MQTT (`+` y `#`) en el **Topic** cuando especifique este tipo.

   1. Para agregar otro origen de evento, elija **Agregar origen de evento** y, a continuación, repita los pasos anteriores. Para eliminar un origen de evento, elija **Eliminar** que está ubicado junto al origen de evento que desea eliminar.

1. En **Tiempo de espera (segundos)**, ingrese la cantidad máxima de tiempo en segundos que una función de Lambda no anclada puede ejecutarse antes de que se agote el tiempo de espera. El valor predeterminado es de 3 segundos.

1. En **Anclado**, elija si el componente de la función de Lambda está anclado. El valor predeterminado es **true**.<a name="lambda-function-lifecycle-type"></a>
   + Una función Lambda anclada (o de larga duración) se inicia cuando se AWS IoT Greengrass inicia y sigue ejecutándose en su propio contenedor.
   + Una función de Lambda no anclada (o bajo demanda) se inicia solo cuando recibe un elemento de trabajo y se cierra después de que se inactiva por un tiempo de inactividad máximo especificado. Si la función tiene varios elementos de trabajo, el software AWS IoT Greengrass Core crea varias instancias de la función.

1. (Opcional) En **Parámetros adicionales**, defina los siguientes parámetros de la función de Lambda.
   + **Tiempo de espera del estado (segundos)** : el intervalo en segundos, en el que el componente de la función de Lambda envía actualizaciones de estado al componente administrador de Lambda. Este parámetro solo se aplica a las funciones ancladas. El valor predeterminado es de 60 segundos.
   + **Tamaño máximo de la cola**: el tamaño máximo de la cola de mensajes para el componente de función de Lambda. El software AWS IoT Greengrass Core almacena los mensajes en una cola FIFO (primero en entrar, primero en salir) hasta que pueda ejecutar la función Lambda para consumir cada mensaje. El valor predeterminado es 1000 mensajes.
   + **Máximo número de instancias**: el número máximo de instancias que una función de Lambda no anclada puede ejecutar al mismo tiempo. El límite predeterminado es de 100 instancias.
   + **Tiempo máximo de inactividad (segundos)**: cantidad máxima de tiempo en segundos que una función Lambda no anclada puede permanecer inactiva antes de que el software AWS IoT Greengrass principal detenga su proceso. El valor predeterminado es de 60 segundos.
   + **Tipo de codificación**: el tipo de carga útil que admite la función de Lambda. Puede elegir entre las siguientes opciones:
     + **JSON**
     + **Binario**

     El valor predeterminado es JSON.

1. (Opcional) Especifique la lista de argumentos de línea de comandos que se pasarán a la función de Lambda al ejecutarse. 

   1. En **Parámetros adicionales, argumentos de proceso**, elija **Agregar argumento**.

   1. Para cada argumento que agregue, ingrese el argumento que desea pasar a la función.

   1. Para eliminar un argumento, elija **Eliminar** junto a la etiqueta que desee eliminar.

1. (Opcional) Especifique variables de entorno que están disponibles para la función de Lambda cuando se ejecuta. Las variables de entorno permiten almacenar y actualizar los valores de configuración sin necesidad de cambiar el código de la función.

   1. En **Parámetros adicionales, variables de entorno**, elija **Agregar variable de entorno**.

   1. Para cada variable de entorno que agregue, especifique las opciones siguientes:
      + **Clave**: el nombre de la variable.
      + **Valor**: el valor predeterminado de esta variable.

   1. Para eliminar una variable de entorno, elija **Eliminar** que está ubicado junto a la variable de entorno que desea eliminar.

## Paso 3: (Opcional) Especificar las plataformas compatibles con la función de Lambda
<a name="import-lambda-console-configure-platforms"></a>

Todos los dispositivos principales tienen atributos de sistema operativo y arquitectura. Al implementar el componente de la función Lambda, el software AWS IoT Greengrass Core compara los valores de plataforma que especifique con los atributos de la plataforma en el dispositivo principal para determinar si la función Lambda es compatible con ese dispositivo. 

**nota**  
Puede especificar atributos de plataforma personalizados cuando implementa el componente núcleo de Greengrass en un dispositivo principal. Para obtener más información, consulte el [parámetro de anulación de plataforma](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration-platform-overrides) del [componente núcleo de Greengrass](greengrass-nucleus-component.md). 

En **Configuración de la función de Lambda, Parámetros adicionales, Plataformas**, haga lo siguiente para especificar las plataformas que admite esta función de Lambda.

1. Para cada plataforma, especifique las opciones siguientes: 
   + **Sistema operativo**: el nombre del sistema operativo de la plataforma. Actualmente el único valor admitido es `linux`.
   + **Arquitectura**: la arquitectura del procesador de la plataforma. Los valores admitidos son:
     + `amd64`
     + `arm`
     + `aarch64`
     + `x86`

1. Para agregar otra plataforma, elija **Agregar plataforma** y repita el paso anterior. Para eliminar una plataforma compatible, elija **Eliminar** que está ubicado junto a la plataforma que desea eliminar.

## Paso 4: (Opcional) Especificar las dependencias de los componentes para la función de Lambda
<a name="import-lambda-console-configure-dependencies"></a>

Las dependencias de los componentes identifican los componentes adicionales AWS proporcionados o los componentes personalizados que utiliza la función. Al implementar el componente de la función de Lambda, la implementación incluye estas dependencias para que la función se ejecute.

**importante**  <a name="import-v1-lambda-note"></a>
Para importar una función Lambda que haya creado para ejecutarse en la AWS IoT Greengrass V1, debe definir las dependencias de los componentes individuales para las funciones que utiliza la función, como los secretos, las sombras locales y el administrador de flujos. Defina estos componentes como [dependencias rígidas](component-recipe-reference.md) para que el componente de la función de Lambda se reinicie si la dependencia cambia de estado. Para obtener más información, consulte [Cómo importar una función de Lambda V1](set-up-v2-test-device.md#run-v1-lambda-functions).

En **Configuración de la función de Lambda, Parámetros adicionales, Dependencias de componentes**, complete los siguientes pasos para especificar las dependencias de los componentes de la función de Lambda.

1.  Seleccione **Agregar dependencia**.

1. Para cada dependencia de componente que agregue, especifique las siguientes opciones: 
   + **Nombre del componente**: el nombre del componente. Por ejemplo, introduzca **aws.greengrass.StreamManager** para incluir el [componente administrador de flujos](stream-manager-component.md).
   + **Requisito de versión**: la restricción de versión semántica de estilo npm que identifica las versiones compatibles de esta dependencia del componente. Puede especificar una versión única o un rango de versiones. Por ejemplo, introduzca **^1.0.0** para especificar que esta función de Lambda depende de cualquier versión de la primera versión principal del componente administrador de flujos. Para obtener más información sobre las restricciones de la versión semántica, consulte [la calculadora npm semver](https://semver.npmjs.com/). 
   + **Tipo**: el tipo de dependencia. Puede elegir entre las siguientes opciones:
     + **Restrictivo**: el componente de la función de Lambda se reinicia si la dependencia cambia de estado. Esta es la selección predeterminada.
     + **Soft**: el componente de la función de Lambda no se reinicia si la dependencia cambia de estado.

1. Para eliminar una dependencia de un componente, elija **Eliminar** junto a la dependencia del componente.

## Paso 5: (Opcional) Ejecutar la función de Lambda en un contenedor
<a name="import-lambda-console-run-isolated"></a>

De forma predeterminada, las funciones Lambda se ejecutan en un entorno de ejecución aislado dentro del software AWS IoT Greengrass Core. También puede optar por ejecutar la función de Lambda como un proceso sin ningún tipo de aislamiento (es decir, en modo **Sin contenedor**). 

En la **Configuración de procesos de Linux**, en el **Modo de aislamiento**, elija una de las siguientes opciones para seleccionar la contenerización de la función de Lambda:
+ **Contenedor de Greengrass**: la función de Lambda se ejecuta en un contenedor. Esta es la selección predeterminada.
+ **Sin contenedor:** la función de Lambda se ejecuta como un proceso sin ningún tipo de aislamiento.

Si ejecuta la función de Lambda en un contenedor, complete los siguientes pasos para establecer la configuración del proceso para la función de Lambda. 

1. Configure la cantidad de memoria y los recursos del sistema, como los volúmenes y los dispositivos, que se pondrán a disposición del contenedor.

   En **Parámetros de contenedor** haga lo siguiente.

   1. En **Tamaño de memoria**, introduzca el tamaño de memoria que desee asignar al contenedor. Puede especificar el tamaño de la memoria en **MB** o **KB**.

   1. En **Carpeta de sistema de solo lectura**, elija si el contenedor puede leer o no información de la carpeta `/sys` del dispositivo. El valor predeterminado es **false**.

1. (Opcional) Configure los volúmenes locales a los que puede acceder la función de Lambda en contenedores. Al definir un volumen, el software AWS IoT Greengrass Core monta los archivos de origen en el destino dentro del contenedor. 

   1. En **Volúmenes**, elija **Agregar volumen**. 

   1. Para cada volumen que agregue, especifique las siguientes opciones:
      + **Volumen físico**: la ruta a la carpeta de origen en el dispositivo principal.
      + **Volumen lógico**: la ruta a la carpeta de destino en el contenedor.
      + **Permission**: (opcional) el permiso para acceder a la carpeta de origen desde el contenedor. Puede elegir entre las siguientes opciones:
        + **Solo lectura**: la función de Lambda tiene acceso de solo lectura a la carpeta de origen. Esta es la selección predeterminada.
        + **Lectura y escritura**: la función de Lambda tiene acceso de lectura y escritura a la carpeta de origen.
      + **Agregar propietario del grupo**: (opcional) si se debe agregar o no el grupo de sistemas que ejecuta el componente de la función de Lambda como propietario de la carpeta de origen. El valor predeterminado es **false**.

   1. Para eliminar una etiqueta, elija **Eliminar** junto al volumen que desee eliminar.

1. (Opcional) Configure los dispositivos del sistema local a los que puede acceder la función de Lambda en contenedores.

   1. En **Dispositivos**, elija **Agregar dispositivo**. 

   1. Para cada dispositivo que agregue, especifique las siguientes opciones:
      + **Ruta de montaje**: la ruta al dispositivo del sistema en el dispositivo principal.
      + **Permission**: (opcional) el permiso para acceder al dispositivo del sistema desde el contenedor. Puede elegir entre las siguientes opciones:
        + **Solo lectura**: la función de Lambda tiene acceso de solo lectura al dispositivo del sistema. Esta es la selección predeterminada.
        + **Lectura y escritura**: la función de Lambda tiene acceso de lectura y escritura a la carpeta de origen.
      + **Agregar propietario del grupo**: (opcional) si se debe agregar o no el grupo de sistemas que ejecuta el componente de la función de Lambda como propietario del dispositivo del sistema. El valor predeterminado es **false**.

## Paso 6: Crear el componente función de Lambda
<a name="import-lambda-console-create-deploy"></a>

Después de configurar los ajustes del componente de la función de Lambda, elija **Crear** para terminar de crear el nuevo componente. 

Para ejecutar la función de Lambda en su dispositivo principal, puede implementar el nuevo componente en sus dispositivos principales. Para obtener más información, consulte [Implemente AWS IoT Greengrass componentes en los dispositivos](manage-deployments.md).

# Importación de una función de Lambda como componente (AWS CLI)
<a name="import-lambda-function-cli"></a>

Utilice la [CreateComponentVersion](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_CreateComponentVersion.html)operación para crear componentes a partir de funciones Lambda. Cuando llame a esta operación, especifique `lambdaFunction` para importar una función de Lambda. 

**Topics**
+ [

## Paso 1: Definir la configuración de la función de Lambda
](#create-lambda-function-configuration-cli)
+ [

## Paso 2: Crear el componente función de Lambda
](#create-lambda-component-cli)

## Paso 1: Definir la configuración de la función de Lambda
<a name="create-lambda-function-configuration-cli"></a>

1. Cree un archivo llamado `lambda-function-component.json` y, a continuación, copie el siguiente objeto JSON en el archivo. Reemplace el `lambdaArn` por el ARN de la función de Lambda que se va a importar.

   ```
   {
     "lambdaFunction": {
       "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1"
     }
   }
   ```
**importante**  
Debe especificar un ARN que incluya la versión de la función que desea importar. No puede utilizar alias de versión como `$LATEST`.

1. (Opcional) Especifique el nombre (`componentName`) del componente. Si omite este parámetro, AWS IoT Greengrass crea el componente con el nombre de la función Lambda.

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

1. (Opcional) Especifique la versión (`componentVersion`) del componente. Si omite este parámetro, AWS IoT Greengrass crea el componente con la versión de la función Lambda como una versión semántica válida. Por ejemplo, si la versión de la función es `3`, la versión del componente se convierte en `3.0.0`.
**nota**  
<a name="component-version-uniqueness-para"></a>Cada versión de componente que cargue debe ser única. Asegúrese de cargar la versión del componente correcta, ya que no podrá editarla después de cargarla.  
<a name="semver-para"></a>AWS IoT Greengrass usa versiones semánticas para los componentes. Las versiones semánticas siguen un sistema de números de *principal*.*secundario*.*parche*. Por ejemplo, la versión `1.0.0` representa el primer lanzamiento principal de un componente. Para obtener más información, consulte la [especificación semántica de la versión](https://semver.org/).

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

1. (Opcional) Especifique las plataformas compatibles con esta función de Lambda. Cada plataforma contiene un mapa de atributos que la identifican. Todos los dispositivos principales tienen atributos de sistema operativo (`os`) y arquitectura (`architecture`). El software AWS IoT Greengrass Core puede agregar otros atributos de plataforma. Puede especificar atributos de plataforma personalizados cuando implementa el [componente núcleo de Greengrass](greengrass-nucleus-component.md) en un dispositivo principal. Haga lo siguiente:

   1. Agregue una lista de plataformas (`componentPlatforms`) a la función de Lambda en `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. Agregue cada plataforma compatible a la lista. Cada plataforma tiene un `name` fácil de recordar para identificarla y un mapa de atributos. El siguiente ejemplo especifica que esta función es compatible con dispositivos x86 que ejecutan Linux.

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

      Es posible que su `lambda-function-component.json` contenga un documento similar al ejemplo siguiente.

      ```
      {
        "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. (Opcional) Especifique las dependencias de los componentes de la función de Lambda. Al implementar el componente de la función de Lambda, la implementación incluye estas dependencias para que la función se ejecute.
**importante**  <a name="import-v1-lambda-note"></a>
Para importar una función Lambda que haya creado para ejecutarse en la AWS IoT Greengrass V1, debe definir las dependencias de los componentes individuales para las funciones que utiliza la función, como los secretos, las sombras locales y el administrador de flujos. Defina estos componentes como [dependencias rígidas](component-recipe-reference.md) para que el componente de la función de Lambda se reinicie si la dependencia cambia de estado. Para obtener más información, consulte [Cómo importar una función de Lambda V1](set-up-v2-test-device.md#run-v1-lambda-functions).

   Haga lo siguiente:

   1. Agregue un mapa de las dependencias de los componentes (`componentDependencies`) a la función de Lambda en `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. Agregue cada dependencia de los componentes al mapa. Especifique el nombre del componente como clave y especifique un objeto con los siguientes parámetros:
      + `versionRequirement`: la restricción de versión semántica de estilo npm que identifica las versiones compatibles de la dependencia del componente. Puede especificar una versión única o un rango de versiones. Para obtener más información sobre las restricciones de la versión semántica, consulte [la calculadora npm semver](https://semver.npmjs.com/).
      + `dependencyType`: (opcional) el tipo de dependencia. Elija una de las siguientes opciones:
        + `SOFT`: el componente de la función de Lambda no se reinicia si la dependencia cambia de estado.
        + `HARD`: el componente de la función de Lambda no se reinicia si la dependencia cambia de estado.

        El valor predeterminado es `HARD`.

      El siguiente ejemplo específica que esta función de Lambda depende de cualquier versión de la primera versión principal del [componente administrador de flujos](stream-manager-component.md). El componente de la función de Lambda se reinicia cuando el administrador de flujos se reinicia o se actualiza.

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

      Es posible que su `lambda-function-component.json` contenga un documento similar al ejemplo siguiente.

      ```
      {
        "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. (Opcional) Configure los parámetros de la función de Lambda que se utilizarán para ejecutar la función. Puede configurar opciones como las variables de entorno, los orígenes de eventos de los mensajes, los tiempos de espera y la configuración del contenedor. Haga lo siguiente:

   1. Agregue el objeto de parámetros de Lambda (`componentLambdaParameters`) a la función de Lambda en `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. (Opcional) Especifique los orígenes de eventos a los que se suscribe la función de Lambda para los mensajes de trabajo. Puede especificar las fuentes de eventos para suscribir esta función a los publish/subscribe mensajes locales y a los mensajes AWS IoT Core MQTT. Se llama a la función de Lambda cuando recibe un mensaje de un origen de evento.
**nota**  
Para suscribir esta función a los mensajes de otras funciones o componentes de Lambda, implemente el [componente enrutador de suscripciones heredado](legacy-subscription-router-component.md) al implementar este componente de la función de Lambda. Al implementar el componente del enrutador de suscripciones heredado, especifique las suscripciones que utiliza la función de Lambda.

      Haga lo siguiente:

      1. Agregue la lista de orígenes de eventos (`eventSources`) a los parámetros de la función de 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. Agregue cada origen de evento a la lista. Cada origen de evento tiene los siguientes parámetros:
         + `topic`: el tema al que suscribirse a los mensajes.
         + `type`: el tipo de origen de evento. Puede elegir entre las siguientes opciones:
           + `PUB_SUB` — Suscribirse a la mensajería de publicación/suscripción local.

             Si usa el [núcleo de Greengrass](greengrass-nucleus-component.md) versión 2.6.0 o posterior y el [administrador de Lambda](lambda-manager-component.md) versión 2.2.5 o posterior, puede usar los comodines de tema MQTT (`+` y `#`) en el `topic` cuando especifique este tipo.
           + `IOT_CORE`— Suscríbase a los mensajes de AWS IoT Core MQTT.

             Puede usar comodines de temas MQTT (`+` y `#`) en el `topic` cuando especifique este tipo.

           En el siguiente ejemplo, se suscribe a AWS IoT Core MQTT sobre temas que coinciden con el `hello/world/+` filtro de temas.

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

           El `lambda-function-component.json` puede tener un aspecto similar al siguiente ejemplo.

           ```
           {
             "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. (Opcional) Especifique cualquiera de los siguientes parámetros en el objeto de parámetros de la función de Lambda:
      + `environmentVariables`: el mapa de variables de entorno que están disponibles para la función de Lambda cuando se ejecuta.
      + `execArgs`: la lista de argumentos para pasar a la función de Lambda cuando se ejecuta.
      + `inputPayloadEncodingType`: el tipo de carga útil que admite la función de Lambda. Puede elegir entre las siguientes opciones:
        +  `json` 
        +  `binary` 

        Valor predeterminado: `json`
      + `pinned`: si la función de Lambda está anclada o no. El valor predeterminado es `true`.<a name="lambda-function-lifecycle-type"></a>
        + Una función Lambda anclada (o de larga duración) se inicia cuando se AWS IoT Greengrass inicia y sigue ejecutándose en su propio contenedor.
        + Una función de Lambda no anclada (o bajo demanda) se inicia solo cuando recibe un elemento de trabajo y se cierra después de que se inactiva por un tiempo de inactividad máximo especificado. Si la función tiene varios elementos de trabajo, el software AWS IoT Greengrass Core crea varias instancias de la función.

        Se utiliza `maxIdleTimeInSeconds` para establecer el tiempo máximo de inactividad de la función.
      + `timeoutInSeconds`: la cantidad máxima de tiempo en segundos que una función de Lambda puede ejecutarse antes de que se agote. El valor predeterminado es de 3 segundos.
      + `statusTimeoutInSeconds`: intervalo en segundos en el que un componente de función de Lambda envía actualizaciones de estado al componente del administrador de Lambda. Este parámetro solo se aplica a las funciones ancladas. El valor predeterminado es de 60 segundos.
      + `maxIdleTimeInSeconds`— El tiempo máximo en segundos que una función Lambda no anclada puede permanecer inactiva antes de que el software AWS IoT Greengrass Core detenga su proceso. El valor predeterminado es de 60 segundos.
      + `maxInstancesCount`: el número máximo de instancias que una función de Lambda no anclada puede ejecutar al mismo tiempo. El límite predeterminado es de 100 instancias.
      + `maxQueueSize`: tamaño máximo de la cola de mensajes para el componente de función de Lambda. El software AWS IoT Greengrass Core almacena los mensajes en una cola FIFO (first-in-first-out) hasta que pueda ejecutar la función Lambda para consumir cada mensaje. El valor predeterminado es 1000 mensajes.

      Es posible que su `lambda-function-component.json` contenga un documento similar al ejemplo siguiente.

      ```
      {
        "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. (Opcional) Configure los ajustes del contenedor para la función de Lambda. De forma predeterminada, las funciones Lambda se ejecutan en un entorno de ejecución aislado dentro del software AWS IoT Greengrass Core. También puede optar por ejecutar la función de Lambda como un proceso sin ningún tipo de aislamiento. Si ejecuta la función de Lambda en un contenedor, configura el tamaño de memoria del contenedor y los recursos del sistema disponibles para la función de Lambda. Haga lo siguiente:

      1. Agregue el objeto de parámetros de proceso de Linux (`linuxProcessParams`) al objeto de parámetros de Lambda en `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. (Opcional) Especifique si la función de Lambda se ejecuta o no en un contenedor. Agregue el parámetro `isolationMode` al objeto de parámetros del proceso y elija una de las siguientes opciones:
         + `GreengrassContainer`: la función de Lambda se ejecuta en un contenedor.
         + `NoContainer`: la función de Lambda se ejecuta como un proceso sin ningún tipo de aislamiento.

         El valor predeterminado es `GreengrassContainer`.

      1. (Opcional) Si ejecuta la función de Lambda en un contenedor, puede configurar la cantidad de memoria y los recursos del sistema, como los volúmenes y los dispositivos, que se pondrán a disposición del contenedor. Haga lo siguiente:

         1. Agregue el objeto de parámetros del contenedor (`containerParams`) al objeto de parámetros de proceso de Linux en `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. (Opcional) Agregue el parámetro `memorySizeInKB` para especificar el tamaño de memoria del contenedor. El valor predeterminado es de 16 384 KB (16 MB).

         1. (Opcional) Agregue el parámetro `mountROSysfs` para especificar si el contenedor puede leer o no información de la carpeta `/sys` del dispositivo. El valor predeterminado es `false`.

         1. (Opcional) Configure los volúmenes locales a los que puede acceder la función de Lambda en contenedores. Al definir un volumen, el software AWS IoT Greengrass Core monta los archivos de origen en el destino dentro del contenedor. Haga lo siguiente:

            1. Agregue la lista de volúmenes (`volumes`) a los parámetros del contenedor.

               ```
               {
                 "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. Agregue cada volumen a la lista. Cada volumen tiene los siguientes parámetros:
               + `sourcePath`: la ruta a la carpeta de origen en el dispositivo principal.
               + `destinationPath`: la ruta a la carpeta de destino en el contenedor.
               + `permission`: (opcional) el permiso para acceder a la carpeta de origen desde el contenedor. Puede elegir entre las siguientes opciones:
                 + `ro`: la función de Lambda tiene acceso de solo lectura a la carpeta de origen.
                 + `rw`: la función de Lambda tiene acceso de lectura y escritura a la carpeta de origen.

                 El valor predeterminado es `ro`.
               + `addGroupOwner`: (opcional) si desea agregar o no el grupo de sistemas que ejecuta el componente de la función de Lambda como propietario de la carpeta de origen. El valor predeterminado es `false`.

               Es posible que su `lambda-function-component.json` contenga un documento similar al ejemplo siguiente.

               ```
               {
                 "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. (Opcional) Configure los dispositivos del sistema local a los que puede acceder la función de Lambda en contenedores. Haga lo siguiente:

            1. Agregue la lista de dispositivos de sistema (`devices`) a los parámetros del contenedor.

               ```
               {
                 "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. Agregue cada dispositivo del sistema a la lista. Cada dispositivo del sistema tiene los siguientes parámetros:
               + `path`: la ruta al dispositivo del sistema en el dispositivo principal.
               + `permission`: (opcional) el permiso para acceder al dispositivo del sistema desde el contenedor. Puede elegir entre las siguientes opciones:
                 + `ro`: la función de Lambda tiene acceso de solo lectura al dispositivo del sistema.
                 + `rw`: la función de Lambda tiene acceso de lectura y escritura al dispositivo del sistema.

                 El valor predeterminado es `ro`.
               + `addGroupOwner`: (opcional) si desea agregar o no el grupo de sistemas que ejecuta el componente de la función de Lambda como propietario del dispositivo del sistema. El valor predeterminado es `false`.

            Es posible que su `lambda-function-component.json` contenga un documento similar al ejemplo siguiente.

            ```
            {
              "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. (Opcional) Agregue etiquetas (`tags`) para el componente. Para obtener más información, consulte [Etiquete sus AWS IoT Greengrass Version 2 recursos](tag-resources.md).

## Paso 2: Crear el componente función de Lambda
<a name="create-lambda-component-cli"></a>

1. Ejecute el siguiente comando para crear el componente de la función de Lambda desde `lambda-function-component.json`.

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

   Si la solicitud se realiza con éxito, la respuesta de es similar a la del siguiente ejemplo.

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

   Copie el `arn` de la respuesta para comprobar el estado del componente en el paso siguiente.

1. Al crear un componente, su estado es `REQUESTED`. A continuación, AWS IoT Greengrass valida que el componente se pueda implementar. Puede ejecutar el siguiente comando para consultar el estado del componente y comprobar que el componente se puede implementar. Sustituya `arn` por el ARN del paso anterior.

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

   Si el componente se valida, la respuesta indica que el estado del componente es `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"
         }
       }
     ]
   }
   ```

   Una vez que el componente está `DEPLOYABLE`, puede implementar la función de Lambda en los dispositivos principales. Para obtener más información, consulte [Implemente AWS IoT Greengrass componentes en los dispositivos](manage-deployments.md).