Uso de extensiones de Lambda - AWS Lambda

Uso de extensiones de Lambda

Puede utilizar 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 AWS Lambda Partners o puede crear sus propias Lambda extensiones.

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.

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 los servicios y herramientas de Infrastructure as Code (infraestructura como código, IaC por sus siglas en inglés) como AWS CloudFormation, Modelo de aplicación sin servidor de AWS (AWS SAM) y Terraform.

Las siguientes Tiempos de ejecución de Lambda. son compatibles con extensiones externas:

  • .NET Core 3.1 (C#/PowerShell) (dotnetcore3.1)

  • Tiempo de ejecución personalizado (provided)

  • Tiempo de ejecución personalizado en Amazon Linux 2 (provided.al2)

  • Java 11 (Corretto) (java11)

  • Java 8 (Corretto) (java8.al2)

  • Node.js 14.x (nodejs14.x)

  • Node.js 12.x (nodejs12.x)

  • Node.js 10.x (nodejs10.x)

  • Python 3.8 (python3.8)

  • Python 3.7 (python3.7)

  • Ruby 2.7 (ruby2.7)

  • Ruby 2.5 (ruby2.5)

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 de 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: en esta fase, Lambda crea o desbloquea un entorno de ejecución con los recursos configurados, descarga el código para la función y todas las capas, inicializa cualquier extensión, inicializa el tiempo de ejecución y, a continuación, ejecuta el código de inicialización de la función (es decir, el código fuera del controlador principal). La fase Init ocurre durante la primera invocación o antes de las invocaciones de la función si ha habilitado la simultaneidad 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 completan 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. Una vez que la función se ejecute por completo, Lambda se prepara para gestionar otra invocación de función.

  • Shutdown: esta fase se desencadena si la función Lambda no recibe ninguna invocación durante un periodo de tiempo. En la fase Shutdown, Lambda termina el tiempo de ejecución, alerta a las extensiones para que se detengan de forma correcta y, a continuación, elimina el entorno. Lambda envía un evento Shutdown a cada extensión, que le dice a la extensión que el entorno está a punto de cerrarse.

Durante la fase Init, Lambda extrae capas que contienen extensiones en el /opt directorio del entorno de ejecución. Lambda busca extensiones en el /opt/extensions/ directorio, 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 PostRuntimeExecutionDuration. 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 Lambda capa. 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 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 (Añadir).

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 separado de la Lambda función. Lambda inicia un proceso para cada extensión en el /opt/extensions/ directorio. 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 Shutdown evento 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 ./index.py

Pasos siguientes

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