

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.

# Módulo 3 (parte 2): Funciones Lambda en AWS IoT Greengrass
<a name="module3-II"></a>

Este módulo explora las diferencias entre las funciones Lambda bajo demanda y las de larga duración que se ejecutan en el AWS IoT Greengrass núcleo.

Antes de comenzar, ejecute el script de [configuración de dispositivos de Greengrass](quick-start.md) o asegúrese de haber completado el [módulo 1](module1.md), el [módulo 2](module2.md) y el [módulo 3 (Parte 1)](module3-I.md).

Completar este módulo debería tomarle aproximadamente 30 minutos.

**Topics**
+ [Creación y empaquetado de la función de Lambda](package.md)
+ [Configurar funciones Lambda de larga duración para AWS IoT Greengrass](long-lived.md)
+ [Prueba de funciones de Lambda de larga duración](long-testing.md)
+ [Pruebe funciones de Lambda bajo demanda](on-demand.md)

# Creación y empaquetado de la función de Lambda
<a name="package"></a>

En este paso:
+ Creará un paquete de implementación de funciones de Lambda que contiene código de característica y dependencias.
+ Utilizará la consola de Lambda para crear una función de Lambda y cargar el paquete de implementación.
+ Publicará una versión de la función de Lambda y creará un alias que apunte a la versión.

 

1. En su ordenador, vaya al AWS IoT Greengrass Core SDK para Python que descargó y extrajo [Crear y empaquetar una función de Lambda](create-lambda.md) en el Módulo 3-1.

   La función de Lambda de este módulo utiliza:
   + El archivo `greengrassHelloWorldCounter.py` en `examples\HelloWorldCounter`. Este es el código de la función de Lambda.
   + La carpeta `greengrasssdk`. Este es el SDK.

1. Creación de un paquete de implementación de la función de Lambda:

   1. Copie la carpeta `greengrasssdk` en la carpeta `HelloWorldCounter` que contiene `greengrassHelloWorldCounter.py`.

   1. Guarde `greengrassHelloWorldCounter.py` y la carpeta `greengrasssdk` en un archivo `zip` llamado `hello_world_counter_python_lambda.zip`. El archivo `py` y la carpeta `greengrasssdk` deben estar en la raíz del directorio.  
![\[Captura de pantalla que muestra el contenido comprimido de hello_word_counter_python_lambda.zip.\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/images/gg-get-started-046.png)

      En sistemas de tipo UNIX (incluido el terminal de Mac) que tengan `zip` instalado, puede utilizar el siguiente comando para empaquetar el archivo y la carpeta:

      ```
      zip -r hello_world_counter_python_lambda.zip greengrasssdk greengrassHelloWorldCounter.py
      ```

   Ya está listo para crear la función de Lambda y cargar el paquete de implementación.

1. Abra la consola de Lambda y elija **Crear función**.

1. Elija **Crear desde cero**.

1. Asigne el nombre **Greengrass\$1HelloWorld\$1Counter** a la característica y establezca los demás campos como se indica a continuación:
   + En **Runtime** (Tiempo de ejecución), elija **Python 3.7**.
   + 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. O bien puede reutilizar el rol que creó en el módulo 3-1.

   Seleccione **Crear función**.  
![\[La sección «Información básica» con el campo «Nombre de la función» establecido en «Greengrass_ HelloWorld _Counter» y el campo «Runtime» establecido en «Python 3.7".\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/images/gg-get-started-023-3.png)

1. Cargue su paquete de implementación de la función de Lambda.

   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 `hello_world_counter_python_lambda.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 **greengrassHelloWorldCounter.function\$1handler**.

   1. <a name="lambda-console-save-config"></a>Seleccione **Guardar**.
**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.

1. Publicar la primera versión de la función.

   1. En el menú **Acciones** de la parte superior de la página, elija **Publicar nueva versión**. En **Versión description (Descripción de versión)**, escriba **First version**.

   1. Elija **Publicar**.

1. Cree un alias para la versión de la función.

   1. En el menú **Acciones** de la parte superior de la página, seleccione **Crear alias**.  
![\[Captura de pantalla del menú Actions (Acciones) establecido en Create alias (Crear alias).\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/images/gg-get-started-028.png)

   1. En **Nombre**, escriba **GG\$1HW\$1Counter**.

   1. En **Version (Versión)**, elija **1**.

   1. Seleccione **Guardar**.  
![\[Cree una imagen de alias con el campo Nombre configurado como GG_HW_Counter y el campo Versión configurado en 1.\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/images/gg-get-started-048.png)

   Los alias crean una única entidad para su función de Lambda a la que los dispositivos de Greengrass pueden suscribirse. De esta manera, no tendrá que actualizar las suscripciones con nuevos números de versión de funciones de Lambda cada vez que se modifique la función.

# Configurar funciones Lambda de larga duración para AWS IoT Greengrass
<a name="long-lived"></a>

Ahora está listo para configurar la función de Lambda para AWS IoT Greengrass.

1. <a name="console-gg-groups"></a>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. En **Grupos de Greengrass**, elija el grupo que creó en el [Módulo 2](module2.md).

1. En la página de configuración del grupo, elija la pestaña **Funciones de Lambda** y, a continuación, en **Mis funciones de Lambda**, seleccione **Añadir**.

1. Para la **función Lambda**, elija **HelloWorldGreengrass\$1** \$1Counter.

1. Para la **versión de la función de Lambda**, elija el alias de la versión que publicó.

1. Para **Tiempo de espera (segundos)**, introduzca **25**. Esta función de Lambda está inactiva durante 20 segundos antes de cada invocación.

1. En **Ancladas**, elija **Verdadero**

1. Mantenga los valores predeterminados para todos los demás campos y elija **Agregar función de Lambda**.

# Prueba de funciones de Lambda de larga duración
<a name="long-testing"></a>

Una función Lambda de *[larga duración](lambda-functions.md#lambda-lifecycle)* se inicia automáticamente cuando se inicia AWS IoT Greengrass el núcleo y se ejecuta en un único contenedor (o sandbox). Las variables y la lógica de procesamiento previo que se definen fuera del controlador de la función se conservan para cada invocación del controlador de la función. Las diversas invocaciones del controlador de la función se ponen en cola hasta que se hayan ejecutado las invocaciones anteriores.

 El código `greengrassHelloWorldCounter.py` utilizado en este módulo define una variable `my_counter` fuera del controlador de la función.

**nota**  
Puedes ver el código en la AWS Lambda consola o en el [AWS IoT Greengrass Core SDK para Python](https://github.com/aws/aws-greengrass-core-sdk-python/blob/master/examples/HelloWorldCounter/greengrassHelloWorldCounter.py) GitHub.

En este paso, se crean suscripciones que permiten la función Lambda y AWS IoT el intercambio de mensajes MQTT. A continuación, implementará el grupo y probará la función.

1. En la página de configuración de grupo, elija **Suscripciones** y, a continuación, elija **Agregar**.

1. En **Tipo de fuente**, elija **Función Lambda** y, a continuación, **HelloWorldGreengrass\$1** \$1Counter.

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

1. En **Topic filter (Filtro de temas)**, escriba **hello/world/counter**.

1. Elija **Crear una suscripción**.

   Esta suscripción única va en una sola dirección: de la función `Greengrass_HelloWorld_Counter` Lambda a. AWS IoT Para invocar o activar esta función de Lambda desde la nube, deberá crear una suscripción en la dirección contraria.

1. Siga los pasos del 1 al 5 para añadir otra suscripción que utilice los siguientes valores. Esta suscripción permite que la función de Lambda reciba mensajes de AWS IoT. Esta suscripción se utiliza cuando se envía un mensaje desde la AWS IoT consola que invoca la función.
   + Para el origen, elija **Servicios** y después **Nube de IoT**.
   + Para el objetivo, elija la **función Lambda** y, a continuación, **HelloWorldGreengrass\$1** \$1Counter.
   + En el filtro de temas, escriba **hello/world/counter/trigger**.

   La extensión `/trigger` se utiliza en este filtro de temas porque ha creado dos suscripciones y no deben interferir entre sí.

1. Asegúrese de que el daemon de Greengrass esté en ejecución, tal y como se describe en [Implementación de configuraciones de nube en un dispositivo central](configs-core.md).

1. <a name="console-actions-deploy"></a>En la página de configuración de grupo, elija **Implementar**.

1. <a name="console-test-after-deploy"></a>**Una vez completada la implementación, regrese a la página de inicio de la AWS IoT consola y elija Probar.**

1. Configure los siguientes campos:
   + Para **Subscription topic (Tema de suscripción)**, escriba **hello/world/counter**.
   + En **Quality of Service (Calidad del servicio)**, seleccione **0**.
   + En **MQTT payload display (Visualización de la carga de MQTT)**, seleccione **Display payloads as strings (Mostrar cargas como cadenas)**.

1. Elija **Suscribirse**.

   A diferencia de la [primera parte](module3-I.md) de este módulo, no debería ver ningún mensaje después de suscribirse a `hello/world/counter`. Esto se debe a que el código de `greengrassHelloWorldCounter.py` que se publica en el tema `hello/world/counter` está dentro del controlador de la función, que únicamente se ejecuta cuando se invoca la función.

   En este módulo, configuró la función de Lambda de `Greengrass_HelloWorld_Counter` para que se invocara al recibir un mensaje de MQTT sobre el tema `hello/world/counter/trigger`.

   La suscripción **Greengrass\$1 HelloWorld \$1Counter to** **IoT Cloud** permite a la función enviar mensajes AWS IoT sobre el tema. `hello/world/counter` La suscripción **IoT Cloud** to **Greengrass\$1 HelloWorld \$1Counter** permite enviar mensajes AWS IoT a la función sobre el tema. `hello/world/counter/trigger`

1. Para probar el ciclo de vida de larga duración, invoque la función de Lambda publicando un mensaje en el tema `hello/world/counter/trigger`. Puede utilizar el mensaje predeterminado.  
![\[El mensaje de saludo predeterminado desde AWS IoT la consola se envía a hello/world/counter/trigger con el botón Publicar en el tema resaltado.\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/images/gg-get-started-057.png)
**nota**  
 La función `Greengrass_HelloWorld_Counter` omite el contenido de los mensajes recibidos. Simplemente ejecuta el código de `function_handler`, que envía un mensaje al tema `hello/world/counter`. Puedes revisar este código desde el [AWS IoT Greengrass Core SDK para Python](https://github.com/aws/aws-greengrass-core-sdk-python/blob/master/examples/HelloWorldCounter/greengrassHelloWorldCounter.py) en adelante GitHub.

Cada vez que se publica un mensaje en el tema `hello/world/counter/trigger`, la variable `my_counter` se incrementa. Este recuento de invocaciones se muestra en los mensajes enviados de la función de Lambda. Como el controlador de funciones incluye un ciclo de reposo de 20 segundos (`time.sleep(20)`), al activarlo repetidamente, se ponen en cola las respuestas del núcleo. AWS IoT Greengrass 

![\[Captura de pantalla que muestra el incremento de Invocation Count (Recuento de invocación) de 1 a 2 y finalmente a 3.\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/images/gg-get-started-058.png)


# Pruebe funciones de Lambda bajo demanda
<a name="on-demand"></a>

Una función Lambda *[bajo demanda](lambda-functions.md#lambda-lifecycle)* tiene una funcionalidad similar a una función basada en la nube AWS Lambda . Es posible ejecutar en paralelo varias invocaciones de una función de Lambda bajo demanda. Cuando se invoca la función de Lambda, se crea un contenedor independiente para procesar las invocaciones o, si los recursos lo permiten, se reutiliza un contenedor existente. No se conserva ninguna variable o procesamiento previo que se defina fuera del controlador de la función cuando se crean contenedores.

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

1. En **Mis funciones Lambda, elija** la **Greengrass\$1HelloWorld\$1Counter**Función Lambda.

1. En la página **Greengrass\$1HelloWorld\$1Counter**página de detalles, seleccione **Editar**.

1. En **Ancladas**, elija **Falso** y, a continuación, seleccione **Guardar**.

1. <a name="console-actions-deploy"></a>En la página de configuración de grupo, elija **Implementar**.

1. <a name="console-test-after-deploy"></a>Una vez completada la implementación, regrese a la página de inicio de la AWS IoT consola y elija **Probar**.

1. Configure los siguientes campos:
   + Para **Subscription topic (Tema de suscripción)**, escriba **hello/world/counter**.
   + En **Quality of Service (Calidad del servicio)**, seleccione **0**.
   + En **MQTT payload display (Visualización de la carga de MQTT)**, seleccione **Display payloads as strings (Mostrar cargas como cadenas)**.  
![\[Captura de pantalla de la página de prueba Subscriptions (Suscripciones).\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/images/gg-get-started-056.png)

1. Elija **Suscribirse**.
**nota**  
No debería ver ningún mensaje después de suscribirse.

1. Para probar el ciclo de vida bajo demanda, invoque la función publicando un mensaje en el tema `hello/world/counter/trigger`. Puede utilizar el mensaje predeterminado.

   1. Haga clic tres veces rápidamente en **Publicar** (cada pulsación del botón no debe sobrepasar los cinco segundos).  
![\[Captura de pantalla que muestra el botón Publish to topic (Publicar en tema), en el que se debe hacer clic rápidamente tres veces.\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/images/gg-get-started-063.png)

      Cada publicación invoca al controlador de la función y crea un contenedor para cada invocación. El número de invocaciones no aumenta durante las tres veces que se activa la función, ya que cada función de Lambda bajo demanda tiene su propio contenedor o entorno aislado.  
![\[Captura de pantalla que muestra Invocation Count (Recuento de invocación) fijo en 1.\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/images/gg-get-started-064.png)

   1. Después de aproximadamente 30 segundos, seleccione **Publish to topic (Publicar en tema)**. El recuento de invocaciones debería incrementarse en 2. Esto demuestra que se está reutilizando un contenedor creado en una invocación anterior y que se han almacenado las variables de procesamiento previo externas al controlador de funciones.  
![\[Captura de pantalla que muestra Invocation Count (Recuento de invocación) ahora en 2.\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/images/gg-get-started-065.png)

Ahora debería entender los dos tipos de funciones de Lambda que se pueden ejecutar en el núcleo de AWS IoT Greengrass . El siguiente módulo, el [Módulo 4](module4.md), muestra cómo los dispositivos IoT locales pueden interactuar en un AWS IoT Greengrass grupo.