Uso de extensiones Lambda - AWS Lambda

Uso de extensiones Lambda

Puede usar extensiones de Lambda para aumentar las funciones Lambda. Por ejemplo, use extensiones de Lambda para integrar funciones con sus herramientas de monitoreo, observabilidad, seguridad y gobierno preferidas. Puede elegir entre un amplio conjunto de herramientas que proporciona Partners AWS Lambda o puede crear sus propias extensiones de Lambda.

Lambda admite extensiones externas e internas. Una extensión externa se ejecuta como un proceso independiente en el entorno de ejecución y continúa ejecutándose después de que la invocación de la función se procese completamente. Dado que las extensiones se ejecutan como procesos separados, puede escribirlas en un idioma diferente al de la función. Todas las extensiones de soporte de Tiempos de ejecución de Lambda.

Una extensión interna se ejecuta como parte del proceso de tiempo de ejecución. La función accede a extensiones internas mediante el uso de "wrapper scripts" o mecanismos en proceso tales como JAVA_TOOL_OPTIONS. Para obtener más información, consulte Modificación del entorno de tiempo de ejecución .

Puede agregar extensiones a una función mediante la consola de Lambda AWS Command Line Interface (AWS CLI) o infraestructura como código (IaC) y herramientas como AWS CloudFormation, AWS Serverless Application Model (AWS SAM) y Terraform.

Se le cobra por el tiempo de ejecución que consume la extensión (en incrementos de 1 ms). Para obtener más información sobre precios de extensiones, consulte AWS Lambda Precios. Para obtener información acerca de los precios de las extensiones de los socios, consulte los sitios web de dichos socios. La instalación de sus propias extensiones no supone costo alguno.

Entorno de ejecución

Lambda invoca la función en un entorno de ejecución, que proporciona un entorno en tiempo de ejecución seguro y aislado. El entorno de ejecución administra los recursos necesarios para ejecutar la función y proporciona soporte de ciclo de vida para el tiempo de ejecución y las extensiones de la función.

El ciclo de vida del entorno de ejecución incluye las siguientes fases:

  • Init: durante esta fase, Lambda crea o descongela un entorno de ejecución con los recursos que ha configurado, descarga el código de función y todas las capas, inicializa las extensiones, inicializa el tiempo de ejecución y ejecuta el código de inicialización de la función (el código fuera del controlador principal). La fase Init ocurre durante la primera invocación, o antes de las invocaciones de función si ha habilitado simultanidad aprovisionada.

    La fase Init se divide en tres subfases: Extension init, Runtime init y Function init. Estas subfases garantizan que todas las extensiones y el tiempo de ejecución completen sus tareas de configuración antes de que se ejecute el código de función.

  • Invoke: en esta fase, Lambda invoca el controlador de funciones. Después de que la función se ejecuta hasta su finalización, Lambda se prepara para manejar otra invocación de función.

  • Shutdown: esta fase se activa si la función Lambda no recibe ninguna invocación durante un período de tiempo. En la fase Shutdown, Lambda apaga el tiempo de ejecución, alerta a las extensiones para que se detengan limpiamente y, a continuación, elimina el entorno. Lambda envía un evento Shutdown a cada extensión, lo que indica a la extensión que el entorno está a punto de cerrarse.

Durante la frase Init, Lambda extrae capas que contienen extensiones en el directorio /opt en el entorno de ejecución. Lambda busca extensiones en el directorio /opt/extensions/, interpreta cada archivo como un arranque ejecutable para iniciar la extensión e inicia todas las extensiones en paralelo.

Impacto de desempeño y recursos

El tamaño de las extensiones de la función cuenta para el límite de tamaño del paquete de implementación. Para un archivo .zip, el tamaño total descomprimido de la función y todas las extensiones no puede superar el límite de tamaño del paquete de implementación descomprimido de 250 MB.

Las extensiones pueden afectar al rendimiento de la función porque comparten recursos de función como la CPU, la memoria y el almacenamiento. Por ejemplo, si una extensión realiza operaciones de procesamiento intensivo, es posible que la duración de ejecución de la función aumente.

Cada extensión debe completar su inicialización antes de que Lambda invoque la función. Por lo tanto, una extensión que consume un tiempo de inicialización significativo puede aumentar la latencia de la invocación de la función.

Para medir el tiempo adicional que tarda la extensión después de la ejecución de la función, puede utilizar la métrica de la función PostRuntimeExtensionsDuration. Para medir el aumento de la memoria utilizada, puede usar la métrica MaxMemoryUsed. Para conocer el impacto de una extensión específica, puede ejecutar diferentes versiones de sus funciones en paralelo.

Permisos

Las extensiones tienen acceso a los mismos recursos que las funciones. Dado que las extensiones se ejecutan en el mismo entorno que la función, los permisos se comparten entre la función y la extensión.

Para un archivo .zip, puede crear una plantilla de AWS CloudFormation para simplificar la tarea de asociar la misma configuración de extensión, incluidos los permisos de AWS Identity and Access Management (IAM), en varias funciones.

Configuración de extensiones (archivo de archivo .zip)

Puede agregar una extensión a su función como capa de Lambda. El uso de capas permite compartir extensiones en toda la organización o con toda la comunidad de desarrolladores de Lambda. Puede agregar una o más extensiones a una capa. Puede registrar hasta 10 extensiones para una función.

Se agrega la extensión a la función utilizando el mismo método que se utilizaría para cualquier capa. Para obtener más información, consulte Uso de capas con su función de Lambda .

Agregar una extensión a la función (consola)

  1. Abra la página de Functions (Funciones) en la consola de Lambda.

  2. Elija una función.

  3. Elija la pestaña Código si aún no está seleccionada.

  4. En Capas, elija Editar.

  5. En Choose a layer (Elegir una capa), elija Specify an ARN (Especificar un ARN).

  6. En Specify an ARN (Especificar un ARN), escriba el nombre de recurso de Amazon (ARN) de una capa de extensión.

  7. Elija Add.

Uso de extensiones en imágenes de contenedor

Puede agregar extensiones a la imagen del contenedor. La configuración de imagen del contenedor ENTRYPOINT especifica el proceso principal de la función. Configure el valor ENTRYPOINT en el Dockerfile o como una anulación en la configuración de la función.

Puede ejecutar varios procesos dentro de un contenedor. Lambda administra el ciclo de vida del proceso principal y cualquier otro proceso adicional. Lambda utiliza la API de extensiones para administrar el ciclo de vida de la extensión.

Ejemplo: Agregar una extensión externa

Una extensión externa se ejecuta en un proceso independiente de la función de Lambda. Lambda inicia un proceso para cada extensión en el directorio de /opt/extensions/. Lambda utiliza la API de extensiones para administrar el ciclo de vida de la extensión. Después de que la función se ha ejecutado hasta su finalización, Lambda envía un evento Shutdown a cada extensión externa.

ejemplo de agregar una extensión externa a una imagen base de Python

FROM public.ecr.aws/lambda/python:3.8 # Copy and install the app COPY /app /app WORKDIR /app RUN pip install -r requirements.txt # Add an extension from the local directory into /opt ADD my-extension.zip /opt CMD python ./my-function.py

Pasos siguientes

Para obtener más información acerca de las extensiones, recomendamos los siguientes recursos: