

# Aumente las funciones de Lambda utilizando extensiones de Lambda
<a name="lambda-extensions"></a>

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](https://aws.amazon.com/lambda/partners/) o puede [crear sus propias extensiones de Lambda](runtimes-extensions-api.md).

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](lambda-runtimes.md).

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](runtimes-modify.md).

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 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). La instalación de sus propias extensiones no supone costo alguno. Para obtener más información sobre precios de extensiones, consulte [AWS Lambda Precios](https://aws.amazon.com/lambda/pricing/). Para obtener información acerca de los precios de las extensiones de los socios, consulte los sitios web de dichos socios. Consulte [Socios de extensiones de AWS Lambda](extensions-api-partners.md) para obtener una lista de las extensiones oficiales de los socios.

**Topics**
+ [Entorno de ejecución](#using-extensions-env)
+ [Impacto de desempeño y recursos](#using-extensions-reg)
+ [Permisos](#using-extensions-permissions)
+ [Configuración de extensiones de Lambda](extensions-configuration.md)
+ [Socios de extensiones de AWS Lambda](extensions-api-partners.md)
+ [Utilice la API de las extensiones de Lambda para crear extensiones](runtimes-extensions-api.md)
+ [Acceso a datos de telemetría en tiempo real para extensiones mediante la API de telemetría](telemetry-api.md)

## Entorno de ejecución
<a name="using-extensions-env"></a>

Lambda invoca la función en un [entorno de ejecución](lambda-runtime-environment.md), 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](provisioned-concurrency.md).

  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.

  Si [Lambda SnapStart](snapstart.md) está activada, la fase `Init` ocurre cuando publica una versión de la función. Lambda guarda una instantánea del estado de la memoria y del disco del entorno de ejecución iniciado, conserva la instantánea cifrada y la almacena en caché para acceder a ella con baja latencia. Si tiene un [enlace de tiempo de ejecución](snapstart-runtime-hooks.md) antes del punto de comprobación, el código se ejecuta al final de la fase `Init`.
+ `Restore` (solo SnapStart): cuando se invoca por primera vez una función [SnapStart](snapstart.md) y, a medida que la función escala, Lambda vuelve a activar los nuevos entornos de ejecución a partir de la instantánea conservada, en lugar de activar la función desde cero. Si tiene un [enlace de tiempo de ejecución](snapstart-runtime-hooks.md) posterior a la restauración, el código se ejecuta al final de la fase `Restore`. Se le cobrará por la duración de los enlaces de tiempo de ejecución posteriores a la restauración. El tiempo de ejecución debe cargarse, y los enlaces del tiempo de ejecución posteriores a la restauración deben completarse antes de que transcurra el tiempo de espera (10 segundos). De lo contrario, obtendrá una excepción SnapStartTimeoutException. Cuando se completa la fase `Restore`, Lambda invoca el controlador de funciones (la fase [Fase "invoke"](lambda-runtime-environment.md#runtimes-lifecycle-invoke)).
+ `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
<a name="using-extensions-reg"></a>

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](monitoring-metrics.md) `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.

**nota**  
La métrica `MaxMemoryUsed` es una de las [métricas recopiladas por Lambda Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Lambda-Insights-metrics.html) y no una métrica nativa de Lambda.

## Permisos
<a name="using-extensions-permissions"></a>

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 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.