Saltar al contenido

¿Cómo soluciono los errores de tiempo de espera de invocación de la función de Lambda?

9 minutos de lectura
0

El tiempo de espera de mi función de AWS Lambda se agotó de forma intermitente, aunque no implementé ningún cambio de código.

Resolución

El tiempo de espera de las funciones de Lambda puede agotarse por diversos motivos. Para solucionar los tiempos de espera de las funciones de Lambda, primero determina la causa del problema. A continuación, corrige el problema en función de tu caso de uso.

Comprobación del tiempo de espera agotado en la función de Lambda

Para recuperar los ID de solicitud de cualquier invocación que haya agotado el tiempo de espera, busca el grupo de registro de Amazon CloudWatch de la función de la frase La tarea ha agotado el tiempo de espera. A continuación, utiliza los ID de solicitud de las invocaciones que han agotado el tiempo de espera asociadas para recuperar los registros completos de cada tiempo de espera de la invocación.

Para obtener instrucciones, consulta ¿Cómo puedo determinar si mi función de Lambda está agotando el tiempo de espera?

Identificación de la causa del tiempo de espera de la función de Lambda

Utiliza uno o varios de los métodos siguientes para identificar el punto de error que provocó que se agotara el tiempo de espera de la función:

Revisión de los registros de CloudWatch para Lambda

Puedes usar Amazon CloudWatch para ver todos los registros generados por el código de tu función e identificar posibles problemas. Para obtener instrucciones, consulta Uso de Registros de CloudWatch Logs con Lambda.

Si la función devolvió un rastreo de la pila, el mensaje de error del rastreo de la pila especifica la causa del error.

Importante: Lambda genera automáticamente tres líneas de registro para cada invocación (START, END y REPORT). Estas tres líneas son las únicas líneas que aparecen en los registros de CloudWatch de la función si se cumple alguna de las siguientes condiciones:

  • No hay ningún otro registro explícito configurado en el código personalizado de la función de Lambda.
  • El límite de duración de la función se alcanza antes de que Lambda pueda ejecutar el código de la función que genera los registros.

Si no puedes determinar la causa de los tiempos de espera en los registros de CloudWatch, prueba una o más de las siguientes soluciones:

  • Comprueba que la configuración del recuento de reintentos y del tiempo de espera del AWS SDK que utilizaste deje suficiente tiempo para que la función se inicialice.
  • Aumenta temporalmente la configuración de tiempo de espera de la función de Lambda para que el código de la función tenga suficiente tiempo para generar datos de registro.
  • Aumenta la memoria configurada de la función para reducir la latencia de la duración de la invocación y aumentar la potencia informática.

Para agregar más resultados de registro al código de la función, consulta la siguiente documentación para la versión ejecutable de Lambda que utilizaste:

Uso de AWS X-Ray para identificar cualquier obstáculo en el rendimiento del código

Si la función de Lambda usa recursos, microservicios, bases de datos o API web HTTP posteriores a AWS, puedes usar AWS X-Ray para solucionar problemas de rendimiento del código.

Para obtener más información, consulta Visualización de las invocaciones de funciones de Lambda con AWS X-Ray.

Uso de Lambda Insights para recopilar métricas a nivel de sistema para su función

Lambda Insights recopila métricas a nivel de sistema, que incluyen métricas de tiempo de CPU, memoria, disco y red. También recopila información de diagnóstico, que incluye los arranques en frío y los cierres de los trabajadores de Lambda para ayudarte a aislar los problemas relacionados con las funciones de Lambda.

Nota: El uso de Lambda Insights genera cargos en tu cuenta de AWS. Se te cobrará por el tiempo de invocación que haya consumido la extensión de Lambda en incrementos de 1 ms.

Uso de los registros de flujo de la VPC para determinar por qué se denegó o no se envió una solicitud de invocación específica

Los registros de flujo de la VPC te permiten ver todo el tráfico de red que fluye hacia y desde una Amazon Virtual Private Cloud (Amazon VPC).

Para obtener más información, consulta Solución de problemas de red en Lambda.

Nota: Si decides configurar los registros de flujo de la VPC, se aplican las siguientes variables:

Uso del rastreo de cables HTTP para registrar detalladamente las solicitudes de red generadas por el código de la función durante una invocación

Para obtener más información, consulta Registro de rastreos de cables HTTP.

Prácticas recomendadas para evitar que se agoten los tiempos de espera de las funciones de Lambda

Asegúrate de que tu función de Lambda sea idempotente

Las llamadas a la API pueden tardar más de lo esperado debido a problemas transitorios de red. Los problemas de red también pueden provocar reintentos y solicitudes de API duplicadas. Para prepararte para estos casos, asegúrate de que la función de Lambda sea idempotente.

Para obtener más información, consulta ¿Cómo hago que mi función de Lambda sea idempotente?

Inicialización de la lógica estática de su función fuera del controlador de funciones

Al inicializar una función de Lambda, Lambda asigna hasta 10 segundos para que finalice la fase de inicio de la invocación. Debido a esta limitación de tiempo, se recomienda realizar las siguientes acciones fuera del controlador de funciones en el código de inicialización:

  • Importación de bibliotecas y dependencias
  • Definición de la configuración inicial
  • Inicialización de las conexiones a otros servicios y recursos posteriores

Esta inicialización estática permite que estos recursos se inicialicen una vez por entorno de pruebas y, a continuación, se reutilicen para todas las invocaciones futuras en el mismo entorno en tiempo de ejecución.

Para obtener más información, consulta Optimización de la inicialización estática.

Nota: Lambda elimina las conexiones inactivas a los recursos posteriores. Para permitir que la función mantenga una conexión persistente, utiliza la variable TCP keepAlive que está asociada al tiempo de ejecución de Lambda que utilizas.

Comprobación de que la configuración del recuento de reintentos y del tiempo de espera del AWS SDK que utiliza deja tiempo suficiente para que la función se inicialice

Si has utilizado un AWS SDK para realizar una llamada a la API y la llamada falla, el AWS SDK vuelve a intentar la llamada automáticamente. El número de veces que el AWS SDK se reintenta y la duración de cada reintento vienen determinados por la configuración que varía entre cada AWS SDK. Es posible que la función necesite más tiempo para inicializarse del que permite la configuración predeterminada del AWS SDK.

Para obtener más información, consulta ¿Cómo soluciono los problemas de reintento y tiempo de espera al invocar una función de Lambda mediante un AWS SDK?

(Opcional) Configuración de la simultaneidad aprovisionada para su función de Lambda

La simultaneidad aprovisionada inicializa una cantidad solicitada de entornos en tiempo de ejecución para que estén preparados para responder inmediatamente a las invocaciones de la función. Para configurar la simultaneidad aprovisionada para la función, sigue las instrucciones que se indican en Configuración de la simultaneidad aprovisionada.

Nota: La configuración de la simultaneidad aprovisionada implica cargos en tu cuenta de AWS. Puedes configurar la simultaneidad aprovisionada en una versión de una función o en un alias de función de Lambda.

Verificar que la función de Lambda tenga suficientes recursos del sistema

La cantidad de ancho de banda de la red y CPU asignada a la invocación de una función de Lambda viene determinada por la configuración de memoria de la función.

Para obtener más información, consulta Memoria y potencia de computación.

Asegúrate de que todos los procesos en segundo plano que utiliza la función de Lambda se hayan completado antes de que el controlador de funciones devuelva una cadena

Para obtener más información, consulta Comprender la reutilización de contenedores en AWS Lambda.

Comprobación de que la función de Lambda esté configurada para funcionar dentro de la configuración de tiempo de espera máximo de cualquier servicio de AWS integrado

Aunque el límite máximo de tiempo de espera de invocación de una función de Lambda es de 15 minutos, es posible que otros servicios de AWS tengan límites de tiempo de espera diferentes.

Por ejemplo, Amazon API Gateway espera un máximo de 29 segundos para que finalice la invocación del proxy de una función de Lambda.

Para obtener más información, consulta ¿Cómo puedo resolver los errores que recibo al integrar API Gateway con una función de Lambda? Consulta también Invocación de Lambda con eventos de otros servicios de AWS.

Confirmación de que hay una ruta de red válida al punto de enlace al que intenta llegar la función

Para revisar la configuración de la red, sigue las instrucciones que se indican en ¿Cómo soluciono los problemas de tiempo de espera con una función de Lambda que se encuentra en una Amazon VPC?

OFICIAL DE AWSActualizada hace un año