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
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 componentes de AWS IoT Greengrass V2 para migrar aplicaciones de AWS IoT Greengrass V1.
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 (
aws.greengrass.LambdaLauncher) gestiona los procesos y la configuración del entorno. -
El componente administrador de Lambda (
aws.greengrass.LambdaManager) gestiona la comunicación y el escalado entre procesos. -
El componente de tiempos de ejecución de Lambda (
aws.greengrass.LambdaRuntimes) proporciona artefactos para cada tiempo de ejecución de Lambda compatible.
Temas
Requisitos
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:
-
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.
-
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.
Configuración del ciclo de vida de una función de Lambda
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
Configuración de contenedores de funciones de Lambda
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.
| Creación de contenedores | Notas |
|---|---|
|
Contenedor de Greengrass |
|
|
Sin contenedor |
|
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.
-
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 y Actualización de las configuraciones de los componentes.