¿Cómo puedo solucionar los problemas de arranque en frío de la función de Lambda?

5 minutos de lectura
0

Mi función de AWS Lambda tiene una duración de arranque en frío de alta latencia.

Solución

La configuración inicial de una solicitud de función de Lambda para el entorno y el código se denomina tiempo de inicio en frío o latencia de inicio. Para minimizar el tiempo de inicio en frío y la latencia de la función de Lambda, siga estas instrucciones según su caso de uso.

Prácticas recomendadas de configuración y código de funciones de Lambda

  • Aumente la memoria asignada a la función de Lambda. El rango de inicio en frío depende del tamaño de la función, de la cantidad de memoria que haya asignado y de la complejidad del código. Añadir más memoria aumenta proporcionalmente la cantidad de CPU, lo que incrementa la potencia de computación total disponible. Para obtener más información, consulte Memoria y potencia de computación.
  • Minimice el tamaño del paquete de despliegue. Cuanto más pequeño sea el paquete de despliegue, más rápido se iniciará la función. Minimice la cantidad de dependencias y bibliotecas externas que importa la función y mantenga el tamaño del paquete de despliegue por debajo de 50 MB. Para obtener más información, consulte Paquetes de despliegue de Lambda.
  • Optimice el código de la función de Lambda para minimizar el tiempo que tarda en inicializarse. Reduzca la cantidad de dependencias y bibliotecas externas que importa la función. Reduzca la cantidad de código que se ejecuta durante la inicialización.
  • Evite operaciones de computación complejas al inicio. Si la función requiere operaciones de computación complejas al inicio, como cargar grandes conjuntos de datos, puede hacerlo en segundo plano. Ejecute la computación en un proceso en segundo plano durante la fase Init. A continuación, almacene en caché los resultados para las invocaciones posteriores. El almacenamiento en caché de los resultados ayuda a reducir el tiempo necesario para llevar a cabo operaciones de computación complejas al inicio.
  • Reutilice las conexiones de bases de datos de Amazon Relational Database Service (Amazon RDS). Si su función se conecta a una base de datos de Amazon RDS, puede crear un proxy de base de datos Amazon RDS Proxy para la función. Un proxy de base de datos administra un conjunto de conexiones a bases de datos. La reutilización de las conexiones de bases de datos de Amazon RDS reduce el tiempo necesario para establecer una conexión cada vez que se invoca la función.
  • Configure la concurrencia aprovisionada. Las funciones que utilizan la concurrencia aprovisionada no muestran un comportamiento de inicio en frío porque el entorno de ejecución se prepara antes de la invocación. Puede especificar el número de instancias de funciones para mantener la temperatura y gestionar el tráfico.
  • Minimice la complejidad de sus dependencias. Utilice marcos simples que se carguen rápidamente al iniciarse el entorno de ejecución.
  • Para reducir el tiempo que Lambda tarda en desempaquetar los paquetes de despliegue creados en Java, coloque los archivos .jar de la dependencia en un directorio /lib separado. Separar los archivos .jar es más rápido que poner todo el código de la función en un solo contenedor con una gran cantidad de archivos .class. Para obtener más información, consulte Despliegue de funciones de Lambda en Java con archivos .zip o .jar.
  • Utilice la monitorización para descubrir problemas y la observabilidad para descubrir el porqué. Supervise el rendimiento de arranque en frío de las funciones y utilice Lambda Insights en Amazon CloudWatch para solucionar problemas de rendimiento.

Para obtener más información, consulte Prácticas recomendadas para trabajar con funciones de Lambda.

Larga duración de la fase Init en la concurrencia aprovisionada

En las funciones de Lambda bajo demanda, el inicializador estático se ejecuta después de recibir una solicitud, pero antes de invocar al controlador. Esto genera latencia para el solicitante y contribuye a la duración general del arranque en frío.

  • Determine si la concurrencia de la función supera el nivel configurado de concurrencia aprovisionado. Puede comprobar el número de veces que se invoca la función mediante la métrica ProvisionedConcurrencySpilloverInvocations de CloudWatch. Un valor distinto de cero indica que toda la concurrencia aprovisionada está en uso y que se ha producido alguna invocación con un arranque en frío.
  • Compruebe la frecuencia de invocación (solicitudes por segundo). Las funciones con concurrencia aprovisionada tienen una velocidad máxima de 10 solicitudes por segundo por concurrencia aprovisionada (solicitudes de la API de Lambda). Por ejemplo, una función configurada con 100 concurrencias aprovisionadas puede gestionar 1000 solicitudes por segundo. Si la velocidad de invocación supera las 1000 solicitudes por segundo, pueden producirse algunos arranques en frío. Para obtener más información, consulte el contenido de Lambda: Arranques en frío con concurrencia aprovisionada.

Para obtener más información, consulte ¿Cómo soluciono los problemas de concurrencia aprovisionada de la función de Lambda?

Solicitudes de Amazon API Gateway integradas con Lambda

Si utiliza Lambda con API Gateway y ve una métrica de latencia de integración alta, consulte los registros de CloudWatch de la función de Lambda. Se debe abordar la alta latencia cuando un punto de conexión de la API que está integrado con una función de Lambda tarda demasiado en enviar respuestas a un cliente. Los arranques en frío en las funciones de Lambda no se registran en la métrica de duraciones de la función, por lo que la latencia de integración de la API puede ser superior a la duración de la función. Para ver la duración de la función con un arranque en frío, utilice AWS X-Ray.

Para obtener más información, consulte ¿Cómo soluciono los problemas de alta latencia en mis solicitudes de API Gateway integradas con Lambda?

Información relacionada

¿Cómo puedo reducir la latencia de inicialización y duración de la invocación de mi función de Lambda en Java?

Mejora del rendimiento de inicio con Lambda SnapStart para la versión ejecutable 11 de Java

Funcionamiento de Lambda: optimización del rendimiento (parte 1)

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año