

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.

# Ejecute funciones Lambda en el núcleo AWS IoT Greengrass
<a name="lambda-functions"></a>

AWS IoT Greengrass proporciona un entorno de ejecución Lambda en contenedores para el código definido por el usuario en el que se crea. AWS Lambda Las funciones de Lambda que se implementan en un AWS IoT Greengrass núcleo se ejecutan en el entorno de ejecución de Lambda local del núcleo. Las funciones de Lambda locales pueden ser activadas por eventos locales, mensajes de la nube y otros orígenes, lo que lleva la funcionalidad de computación local a los dispositivos del cliente. Por ejemplo, puede utilizar funciones de Lambda de Greengrass para filtrar los datos del dispositivo antes de transmitir los datos a la nube.

Para implementar una función de Lambda en un núcleo, añada la función a un grupo de Greengrass (haciendo referencia a la función de Lambda existente), defina una configuración específica del grupo y, a continuación, implemente el grupo. Si la función accede a AWS los servicios, también debe añadir los permisos necesarios al rol de grupo [Greengrass](group-role.md).

Puede configurar parámetros que determinan cómo se ejecutan las funciones de Lambda, incluidos permisos, aislamiento, límites de memoria, etc. Para obtener más información, consulte [Control de la ejecución de funciones de Lambda de Greengrass utilizando la configuración específica del grupo](lambda-group-config.md).

**nota**  
Esta configuración también permite ejecutarla AWS IoT Greengrass en un contenedor de Docker. Para obtener más información, consulte [Ejecución AWS IoT Greengrass en un contenedor Docker](run-gg-in-docker-container.md).

La siguiente tabla muestra los [AWS Lambda tiempos de ejecución](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html) compatibles y las versiones del software AWS IoT Greengrass principal en las que se pueden ejecutar.


****  

| Lenguaje o plataforma | Versión de GGC | 
| --- | --- | 
| Python 3.8 | 1.11 | 
| Python 3.7 | 1.9 o posteriores | 
| Python 2.7 \* | 1.0 o posteriores | 
| Java 8 | 1.1 o posteriores | 
| Node.js 12.x \* | 1.10 o posteriores | 
| Node.js 8.10 \* | 1.9 o posteriores | 
| Node.js 6.10 \* | 1.1 o posteriores | 
| C, C\+\+ | 1.6 o posteriores | 

\* Puede ejecutar funciones de Lambda que usen estos tiempos de ejecución en las versiones compatibles de AWS IoT Greengrass, pero no puede crearlas en. AWS Lambda Si el tiempo de ejecución de su dispositivo es diferente del tiempo de ejecución de Lambda AWS especificado para esa función, puede elegir su propio tiempo de ejecución utilizando `FunctionRuntimeOverride` en `FunctionDefintionVersion`. Para obtener más información, consulte [CreateFunctionDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/createfunctiondefinition-post.html). Para más información sobre los tiempos de ejecución compatibles, consulte la [Política de soporte en tiempo de ejecución](https://docs.aws.amazon.com/lambda/latest/dg/runtime-support-policy.html) en la *Guía de desarrolladores de AWS Lambda *.

## SDKs para funciones Lambda de Greengrass
<a name="lambda-sdks"></a>

AWS proporciona tres funciones Lambda de Greengrass SDKs que se ejecutan en un núcleo. AWS IoT Greengrass SDKs Están contenidas en paquetes diferentes, por lo que las funciones pueden usarlas simultáneamente. Para utilizar un SDK en una función de Lambda de Greengrass, inclúyalo en el paquete de implementación de funciones de Lambda que subió a AWS Lambda.

**AWS IoT Greengrass SDK básico**  <a name="lambda-sdks-core"></a>
Permite que las funciones de Lambda locales interactúen con el núcleo para:  <a name="gg-core-sdk-functionality"></a>
+ Intercambia mensajes MQTT con AWS IoT Core.
+ Intercambiar mensajes MQTT con conectores, dispositivos de cliente y otras funciones de Lambda en el grupo de Greengrass.
+ Interactuar con el servicio de sombra local.
+ Invocar otras funciones de Lambda locales.
+ Tener acceso a [recursos de secretos](secrets.md).
+ Interactuar con el [administrador de secuencias](stream-manager.md).
AWS IoT Greengrass proporciona el SDK AWS IoT Greengrass principal en los siguientes idiomas y plataformas GitHub.  <a name="gg-core-sdk-download-list"></a>
+ [AWS IoT Greengrass Core SDK for Java](https://github.com/aws/aws-greengrass-core-sdk-java/)
+ [AWS IoT Greengrass SDK básico para Node.js](https://github.com/aws/aws-greengrass-core-sdk-js/)
+ [AWS IoT Greengrass SDK básico para Python](https://github.com/aws/aws-greengrass-core-sdk-python/)
+ [AWS IoT Greengrass SDK básico para C](https://github.com/aws/aws-greengrass-core-sdk-c/)
Para incluir la dependencia del SDK AWS IoT Greengrass principal en el paquete de implementación de funciones Lambda:  

1. Descargue el idioma o la plataforma del paquete AWS IoT Greengrass Core SDK que coincida con el tiempo de ejecución de la función Lambda.

1. Descomprima el paquete descargado para obtener el SDK. El SDK es la carpeta `greengrasssdk`.

1. Incluya `greengrasssdk` en el paquete de implementación de funciones de Lambda que contiene su código de función. Este es el paquete en el que se carga AWS Lambda al crear la función Lambda.
   
 **StreamManagerClient**  
Solo se SDKs puede usar el siguiente AWS IoT Greengrass núcleo para las operaciones del [administrador de flujos](stream-manager.md):  <a name="streammanagerclient-sdk-versions"></a>
+ SDK de Java (versión 1.4.0 o posterior)
+ SDK de Python (versión 1.5.0 o posterior)
+ SDK de Node.js (versión 1.6.0 o posterior)
Para usar el SDK AWS IoT Greengrass principal de Python para interactuar con el administrador de transmisiones, debe instalar Python 3.7 o una versión posterior. También debe instalar dependencias para incluirlas en sus paquetes de implementación de funciones de Lambda de Python:  <a name="python-sdk-dependencies-stream-manager"></a>

1. Vaya al directorio de SDK que contiene el archivo de `requirements.txt`. Este archivo registra las dependencias.

1. Instale las dependencias del SDK. Por ejemplo, ejecute el siguiente comando de `pip` para instalarlas en el directorio actual:

   ```
   pip install --target . -r requirements.txt
   ```
   
**Instalar el AWS IoT Greengrass Core SDK para Python en el dispositivo principal**  
Si ejecuta funciones Lambda de Python, también puede utilizarlas [https://pypi.org/project/pip/](https://pypi.org/project/pip/)para instalar el AWS IoT Greengrass Core SDK para Python en el dispositivo principal. A continuación, puede implementar las funciones sin incluir el SDK en el paquete de implementación de la función de Lambda. Para obtener más información, consulte [greengrasssdk](https://pypi.org/project/greengrasssdk/).  
Este soporte está dirigido a núcleos con restricciones de tamaño. Le recomendamos que incluya el SDK en sus paquetes de implementación de funciones de Lambda cuando sea posible.  
 

**AWS IoT Greengrass SDK de Machine Learning**  <a name="lambda-sdks-ml"></a>
Permite a las funciones de Lambda consumir modelos de machine learning (ML) que se implementan en el núcleo de Greengrass como recursos de ML. Las funciones de Lambda pueden usar el SDK para invocar e interactuar con un servicio de inferencia local que se implementa en el núcleo como un conector. Las funciones de Lambda y los conectores de ML también pueden usar el SDK para enviar datos al conector de ML Feedback para cargarlos y publicarlos. Para obtener más información, incluidos los ejemplos de código que utiliza el SDK, consulte [Conector de la clasificación de ML Image](image-classification-connector.md), [Conector de detección de objetos de ML](obj-detection-connector.md) y [Conector de ML Feedback](ml-feedback-connector.md).  
En la siguiente tabla se enumeran los idiomas o plataformas compatibles con las versiones del SDK y las versiones del software AWS IoT Greengrass principal en las que se pueden ejecutar.    
****    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/lambda-functions.html)
Para obtener información sobre la descarga, consulte [AWS IoT Greengrass Software ML SDK](what-is-gg.md#gg-ml-sdk-download).

**AWS SDKs**  <a name="lambda-sdks-aws"></a>
Permite a las funciones Lambda locales realizar llamadas directas a AWS servicios, como Amazon S3, DynamoDB y. AWS IoT AWS IoT Greengrass Para utilizar un SDK de AWS en una función de Lambda de Greengrass, debe incluirlo en el paquete de implementación. Cuando utilice el AWS SDK en el mismo paquete que el SDK AWS IoT Greengrass principal, asegúrese de que las funciones de Lambda utilicen los espacios de nombres correctos. Las funciones de Lambda de Greengrass no pueden comunicarse con los servicios en la nube cuando el núcleo está desconectado.  
Descárguelo AWS SDKs del Centro de recursos de [introducción](https://aws.amazon.com/getting-started/tools-sdks/).

Para obtener más información acerca de la creación de un paquete de implementación, consulte [Crear y empaquetar una función de Lambda](create-lambda.md) en el tutorial de introducción o [Creación de un paquete de implementación](https://docs.aws.amazon.com/lambda/latest/dg/deployment-package-v2.html) en la *Guía del desarrollador de AWS Lambda *.

### Migración de funciones de Lambda basadas en la nube
<a name="lambda-migrate-sdks"></a>

El SDK AWS IoT Greengrass principal sigue el modelo de programación del AWS SDK, lo que facilita la migración de funciones de Lambda desarrolladas para la nube a funciones de Lambda que se ejecutan en un núcleo. AWS IoT Greengrass 

Por ejemplo, la siguiente función de Python Lambda utiliza la AWS SDK para Python (Boto3) para publicar un mensaje en el tema `some/topic` en la nube:

```
import boto3

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

Para portar la función a un AWS IoT Greengrass núcleo, en la `import` declaración y en la `client` inicialización, cambie el nombre del `boto3` módulo a`greengrasssdk`, como se muestra en el siguiente ejemplo:

```
import greengrasssdk

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

**nota**  
El SDK AWS IoT Greengrass principal solo admite el envío de mensajes MQTT con QoS = 0. Para obtener más información, consulte [Mensaje de calidad del servicio](gg-core.md#message-quality-of-service).

La similitud entre los modelos de programación también le permite desarrollar sus funciones Lambda en la nube y luego migrarlas a ella AWS IoT Greengrass con un esfuerzo mínimo. Los [ejecutables de Lambda](#lambda-executables) no se ejecutan en la nube, por lo que no puede usar el AWS SDK para desarrollarlos en la nube antes de la implementación.

## Referencia a funciones de Lambda por alias o versión
<a name="lambda-versions-aliases"></a>

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. Los alias se resuelven en números de versión durante la implementación del grupo. Cuando utiliza alias, la versión resuelta se actualiza a la versión a la que apunta el alias en el momento de la implementación.

AWS IoT Greengrass **no admite los alias de Lambda para las versiones $LATEST.** Las versiones **$LATEST** no están vinculadas a versiones de función publicadas, inmutables y se pueden cambiar en cualquier momento, lo cual va en contra del principio de inmutabilidad de AWS IoT Greengrass .

Una práctica habitual para mantener las funciones de Lambda de Greengrass actualizadas con cambios en el código es utilizar un alias denominado **PRODUCTION** en su grupo y suscripciones de Greengrass. A medida que promueve nuevas versiones de su función de Lambda a producción, apunte el alias a la versión estable más reciente y, a continuación, vuelva a implementar el grupo. También puede usar este método para revertir a una versión anterior.

## Flujos de comunicación para las funciones de Lambda de Greengrass
<a name="lambda-communication"></a>

Las funciones Lambda de Greengrass admiten varios métodos de comunicación con otros miembros del AWS IoT Greengrass grupo, servicios locales y servicios en la nube (incluidos los servicios). AWS 

### Comunicación con mensajes MQTT
<a name="lambda-messages"></a>

Las funciones de Lambda pueden enviar y recibir mensajes MQTT utilizando un patrón publish-subscribe (publicar-suscribir) que se controla a través de las suscripciones.

Este flujo de comunicación permite que las funciones de Lambda intercambien mensajes con las siguientes entidades:
+ Dispositivos cliente en el grupo.
+ Conectores en el grupo.
+ Otras funciones de Lambda del grupo.
+ AWS IoT.
+ Servicio de sombra del dispositivo local.

Las suscripciones especifican un origen del mensaje, un destino del mensaje y un tema (o asunto), que se utilizan para direccionar los mensajes desde el origen hasta el destino. Los mensajes que se publican en una función de Lambda se transfieren al controlador registrado de la función. Las suscripciones permiten más seguridad y proporcionan interacciones predecibles. Para obtener más información, consulte [Suscripciones administradas en el flujo de trabajo de mensajería de MQTT](gg-sec.md#gg-msg-workflow).

**nota**  
Cuando el dispositivo central está sin conexión, las funciones de Lambda de Greengrass pueden intercambiar mensajes con otros dispositivos cliente, conectores, otras funciones y sombras locales, pero los mensajes dirigidos a AWS IoT se ponen en cola. Para obtener más información, consulte [Cola de mensajes MQTT para objetivos en la nube](gg-core.md#mqtt-message-queue).

### Otros flujos de comunicación
<a name="lambda-other-communication"></a>
+ Para interactuar con los modelos de machine learning, los recursos de volumen y dispositivos locales en un dispositivo central, las funciones de Lambda de Greengrass utilizan las interfaces del sistema operativo específico de la plataforma. Por ejemplo, puede utilizar el método de `open` en el módulo [os](https://docs.python.org/2/library/os.html) en las funciones de Python 2.7. Para permitir que una función acceda a un recurso, la función debe estar *asociada* con el recurso y tener el permiso `read-only` o `read-write`. Para obtener más información, incluida la disponibilidad de la versión AWS IoT Greengrass principal, consulte [Acceder a recursos locales con conectores y funciones de Lambda](access-local-resources.md) y. [Acceso a recursos de machine learning desde el código de la función de Lambda](access-ml-resources.md#access-resource-function-code)
**nota**  
Si ejecuta la función de Lambda sin creación de contenedores, no puede utilizar los recursos de volumen y dispositivos locales asociados, y debe acceder a dichos recursos directamente.
+ Las funciones de Lambda pueden usar el `Lambda` cliente del SDK de AWS IoT Greengrass Core para invocar otras funciones de Lambda del grupo Greengrass.
+ Las funciones Lambda pueden usar el AWS SDK para comunicarse con AWS los servicios. Para obtener más información, consulte [SDK de AWS](#aws-sdk).
+ Las funciones de Lambda pueden usar interfaces de terceros para comunicarse con servicios en la nube externos, de modo similar a las funciones de Lambda basadas en la nube.

**nota**  
Las funciones Lambda de Greengrass no se pueden comunicar con AWS ni con otros servicios en la nube cuando el núcleo está fuera de línea.

## Recuperación del tema (o asunto) de MQTT de entrada
<a name="lambda-get-mqtt-topic"></a>

AWS IoT Greengrass usa suscripciones para controlar el intercambio de mensajes MQTT entre dispositivos cliente, funciones Lambda y conectores de un grupo y AWS IoT con el servicio oculto local. Las suscripciones definen el origen del mensaje, el destino del mensaje y el tema de MQTT utilizados para dirigir los mensajes. Cuando el destino es una función de Lambda, el controlador de la función se invoca cuando el origen publica un mensaje. Para obtener más información, consulte [Comunicación con mensajes MQTT](#lambda-messages).

En el siguiente ejemplo, se muestra cómo una función de Lambda puede obtener el tema de entrada desde el `context` pasado al controlador. Para ello, obtiene acceso a la clave `subject` desde la jerarquía del contexto (`context.client_context.custom['subject']`). El ejemplo analiza también el mensaje JSON de entrada y, a continuación, publica el tema analizado y el mensaje.

**nota**  
En la AWS IoT Greengrass API, el tema de una [suscripción](https://docs.aws.amazon.com/greengrass/v1/apireference/definitions-subscription.html) se representa mediante la `subject` propiedad.

```
import greengrasssdk
import logging

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

OUTPUT_TOPIC = 'test/topic_results'

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

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

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

    return
```

Para probar la función, añádala a su grupo utilizando las opciones de configuración predeterminadas. A continuación, añada las siguientes suscripciones e implemente el grupo. Para obtener instrucciones, consulte [Módulo 3 (parte 1): Funciones Lambda en AWS IoT Greengrass](module3-I.md).


****  

| origen | Destino | Filtro de temas | 
| --- | --- | --- | 
| IoT Cloud (Nube de IoT) | Esta función | test/input\_message | 
| Esta función | IoT Cloud (Nube de IoT) | test/topic\_results | 

Una vez completada la implementación, invoque la función.

1. En la AWS IoT consola, abra la página del **cliente de pruebas de MQTT**.

1. Para suscribirse al tema `test/topic_results`, seleccione la pestaña **Suscribirse a un tema**.

1. Publique un mensaje en el tema `test/input_message` seleccionando la pestaña **Publicar en un tema**. En este ejemplo, debe incluir la propiedad `test-key` en el mensaje JSON.

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

   Si todo es correcto, la función publica el tema de entrada y la cadena del mensaje en el tema `test/topic_results`.

## Configuración del ciclo de vida de las funciones de Lambda de Greengrass
<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 se conservan las variables y la lógica de procesamiento previo que está fuera del controlador de la función.

AWS IoT Greengrass admite los 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. Una invocación de la función crea un contenedor independiente (o entorno de pruebas) para procesar invocaciones, a menos que haya un contenedor disponible que se pueda reutilizar. Los datos que se envíe a la función pueden extraerse de cualquiera de los contenedores.

  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 *fijas) se* inician automáticamente cuando se inicia el AWS IoT Greengrass núcleo y se ejecutan en un único contenedor. Todos los datos que se envían a la función los extrae el mismo contenedor.

  Hay varias invocaciones en la cola hasta que se ejecuten 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 e iniciar el procesamiento de un modelo de ML para que esté listo para cuando la función empiece a recibir los 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 ejecutar de forma indefinida el código en ejecución, 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 núcleo se detenga (por ejemplo, al reiniciarse una implementación de grupo o un dispositivo) o que la función adopte un estado de error (por ejemplo, un error de tiempo de espera del controlador, una excepción no detectada o si se superan los límites de memoria).

Para obtener más información sobre la reutilización de contenedores, consulta Cómo [entender la reutilización de contenedores AWS Lambda en](https://aws.amazon.com/blogs/compute/container-reuse-in-lambda/) el blog de AWS informática.

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

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

Un ejecutable de Lambda es un tipo de función de Lambda de Greengrass que puede utilizar para ejecutar código binario en el entorno del núcleo. Le permite ejecutar la funcionalidad específica del dispositivo de manera nativa y se beneficia de una menor huella de código compilado. Los ejecutables de Lambda pueden ser invocados por eventos, pueden invocar otras funciones y pueden acceder a recursos locales.

Los ejecutables de Lambda solo admiten el tipo de cifrado binario (no JSON) pero, por lo demás, puede administrarlos en su grupo de Greengrass e implementarlos como otras funciones de Lambda de Greengrass. Sin embargo, el proceso de creación de ejecutables de Lambda es diferente de la creación de funciones de Lambda de Python, Java y Node.js:
+ No puede usar la AWS Lambda consola para crear (o administrar) un ejecutable de Lambda. Solo puede crear un ejecutable de Lambda mediante la AWS Lambda API.
+ El código de la función se carga AWS Lambda como un ejecutable compilado que incluye el [AWS IoT Greengrass Core SDK para C.](https://github.com/aws/aws-greengrass-core-sdk-c)
+ Especificará el nombre del ejecutable como el controlador de la función.

Los ejecutables de Lambda deben implementar determinadas llamadas y patrones de programación en su código de la función. Por ejemplo, el método `main` debe:
+ Llamar a `gg_global_init` para inicializar variables globales internas de Greengrass. Se debe llamar a esta función antes de crear cualquier subproceso y antes de llamar a cualquier otra función del SDK AWS IoT Greengrass principal.
+ Llame a `gg_runtime_start` para registrar el controlador de la función con el tiempo de ejecución de Lambda de Greengrass. Esta función debe llamarse durante la inicialización. Al llamar a esta función el tiempo de ejecución utiliza el subproceso actual. El parámetro `GG_RT_OPT_ASYNC` opcional indica a esta función que no bloquee, sino que cree un nuevo subproceso para el tiempo de ejecución. Esta función utiliza un controlador `SIGTERM`.

El siguiente fragmento es el `main` método del ejemplo de código [simple\_handler.c](https://github.com/aws/aws-greengrass-core-sdk-c/blob/master/aws-greengrass-core-sdk-c-example/simple_handler.c) en adelante. GitHub

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

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

    gg_runtime_start(handler, 0);

cleanup:
    return -1;
}
```

Para obtener más información acerca de los requisitos exigidos, las restricciones y otros detalles de implementación, consulte [SDK de AWS IoT Greengrass Core para C](https://github.com/aws/aws-greengrass-core-sdk-c).

### Crear un ejecutable de Lambda
<a name="create-lambda-executable"></a>

Tras compilar el código junto con el SDK, utilice la AWS Lambda API para crear una función Lambda y cargar el ejecutable compilado.

**nota**  
La función deberá elaborarse con un compilador C89 compatible.

En el siguiente ejemplo se utiliza el comando de CLI [create-function](https://docs.aws.amazon.com/cli/latest/reference/lambda/create-function.html) para crear un ejecutable de Lambda. El comando especifica:
+ El nombre del ejecutable para el controlador. Debe ser el nombre exacto del ejecutable compilado.
+ La ruta del archivo `.zip` que contiene el ejecutable compilado.
+ `arn:aws:greengrass:::runtime/function/executable` para el tiempo de ejecución. Este es el tiempo de ejecución para todos los ejecutables de Lambda.

**nota**  
Para `role` puede especificar el ARN de cualquier rol de ejecución de Lambda. AWS IoT Greengrass no utiliza este rol, pero el parámetro es necesario para crear la función. Para obtener más información sobre los roles de ejecución de Lambda, consulte [modelo de permisos de AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html) en la *Guía para desarrolladores de AWS Lambda *.

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

A continuación, utilice la AWS Lambda API para publicar una versión y crear un alias.
+ Utilice [publish-version](https://docs.aws.amazon.com/cli/latest/reference/lambda/publish-version.html) para publicar una versión de la función.

  ```
  aws lambda publish-version \
  --function-name {{function-name}} \
  --region {{aws-region}}
  ```
+ Utilice [create-alias](https://docs.aws.amazon.com/cli/latest/reference/lambda/create-alias.html) para crear un alias que apunte a la versión que acaba de publicar. Recomendamos que el alias haga referencia a funciones de Lambda cuando las añade a un grupo de Greengrass.

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

**nota**  
La AWS Lambda consola no muestra los ejecutables de Lambda. Para actualizar el código de la función, debe usar la AWS Lambda API.

A continuación, añada el ejecutable de Lambda a un grupo de Greengrass, configúrelo para aceptar los datos de entrada binarios en su configuración específica del grupo e implemente el grupo. Puede hacerlo en la AWS IoT Greengrass consola o mediante la AWS IoT Greengrass API.