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

10 minutos de lectura
0

Mi función de AWS Lambda agota el tiempo de espera de forma intermitente, incluso si no he implementado ningún cambio en el código. ¿Cómo soluciono y prevengo los errores de tiempo de espera de invocación de funciones de Lambda?

Resolución

El tiempo de espera de las funciones de Lambda puede agotarse por varias razones. Para solucionar los problemas de tiempo de espera de las funciones de Lambda, determine antes qué causa el problema. Para ello, use uno de los servicios y características de AWS que se enumeran en este artículo. A continuación, solucione el problema en función de su caso de uso.

Para evitar que se agote el tiempo de espera de la función de Lambda, consulte la sección Prácticas recomendadas para evitar tiempos de espera de funciones de Lambda de este artículo

Verifique que se agota el tiempo de espera de su función de Lambda

Para recuperar los ID de solicitud de cualquier invocación con el tiempo de espera agotado, busque en el grupo de registros de Amazon CloudWatch de la función la frase Task timed out (Se agotó el tiempo de espera de la tarea). A continuación, utilice los ID de solicitud de las invocaciones con el tiempo de espera agotado asociadas para recuperar los registros completos de cada tiempo de espera de invocación agotado.

Para obtener instrucciones, consulte ¿Cómo puedo determinar si se agota el tiempo de espera de mi función de Lambda?

Identificar qué causa que la función de Lambda agote el tiempo de espera

Use uno o más de los siguientes métodos para identificar el punto de error que provoca que se agote el tiempo de espera de la función:

Revise los registros de CloudWatch para Lambda

Puede usar Amazon CloudWatch para ver todos los registros generados por el código de la función e identificar posibles problemas. Para obtener instrucciones, consulte Accessing CloudWatch Logs for Lambda (Acceso a los registros de Amazon CloudWatch Logs para AWS Lambda).

Si la función devuelve un seguimiento de pila, el mensaje de error del seguimiento de pila especifica qué causa el 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 registros.

Si no puede determinar qué causa los tiempos de espera después de revisar los registros, intente llevar a cabo una o más de las siguientes soluciones:

Para agregar más resultados de registro al código de la función, consulte la siguiente documentación para el tiempo de ejecución de Lambda que utilice:

Utilice AWS X-Ray para identificar los cuellos de botella en el rendimiento del código

Si su función de Lambda utiliza recursos, microservicios, bases de datos o API web HTTP de AWS de distribución, puede usar AWS X-Ray para solucionar problemas de rendimiento del código.

Para obtener más información, consulte Using AWS Lambda with AWS X-Ray (Uso de AWS Lambda con AWS X-Ray).

Utilice Lambda Insights para recopilar métricas de sistema para su función

Lambda Insights recopila métricas de sistema, incluidas métricas de tiempo de CPU, memoria, disco y red. También recopila información de diagnóstico, incluidos los arranques en frío y los apagados de los empleados de Lambda para ayudarlo a aislar los problemas de las funciones de Lambda.

Para obtener más información, consulte Using Lambda Insights (Uso de Lambda Insights).

Nota: El uso de Lambda Insights incurre en cargos en su cuenta de AWS. Se le cobrará por el tiempo de invocación consumido por la extensión de Lambda en incrementos de 1 ms.

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

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

Para obtener más información, consulte Troubleshoot networking issues in Lambda (Solución de problemas de redes en Lambda).

Nota: Tenga en cuenta lo siguiente si elige configurar registros de flujo de VPC:

  • Los cargos por ingesta y archivo de datos para los registros delegados se aplican cuando se publican registros de flujo en una de las siguientes opciones:
  • CloudWatch Logs
  • Amazon Simple Storage Service (Amazon S3)

Utilice rastreos de conexiones HTTP para registrar de forma detallada las solicitudes de red generadas por el código de la función durante una invocación

Para obtener más información, consulte Registro de rastreos de conexiones HTTP.

Prácticas recomendadas para evitar tiempos de espera de funciones de Lambda

Asegúrese de que su función de Lambda sea idempotente

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

Para obtener más información, consulte How do I make my Lambda function idempotent? (Cómo puedo hacer que mi función de Lambda sea idempotente?)

Inicialice la lógica estática de la función fuera del gestor de funciones

Al inicializar una función de Lambda, Lambda asigna hasta 10 segundos para que se complete la fase Init de la invocación. Debido a esta restricción de tiempo, se recomienda hacer lo siguiente fuera del gestor de funciones en el código de inicialización:

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

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

Para obtener más información, consulte Optimizing static initialization (Optimización de la inicialización estática). También puede consultar Downstream unavailability (Sin disponibilidad de distribución) en la Lambda Operator Guide (Guía para operadores de Lambda) y Function code (Código de función) en la Lambda Developer Guide (Guía para desarrolladores de Lambda).

Nota: Lambda elimina las conexiones inactivas a los recursos de distribución. Para permitir que su función mantenga una conexión persistente, use la variable tcp_keepalive que está asociada al tiempo de ejecución de Lambda que esté utilizando.

Verifique que la configuración del recuento de reintentos y el tiempo de espera del SDK de AWS que utiliza le dé tiempo suficiente para que la función se inicialice

Si llama a la API con un AWS SDK y se produce un error en la llamada, el AWS SDK vuelve a intentar la llamada automáticamente. El número de veces que el SDK de AWS vuelve a intentarlo y durante cuánto tiempo depende de la configuración, que varía entre cada SDK de AWS. Es posible que su función necesite más tiempo para inicializarse de lo que permite la configuración predeterminada del SDK de AWS.

Para obtener más información, consulte How do I troubleshoot retry and timeout issues when invoking a Lambda function using an AWS SDK? (¿Cómo soluciono los problemas de reintento y tiempo de espera agotado al invocar una función de Lambda que utiliza un AWS SDK?)

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

La simultaneidad aprovisionada inicializa un número solicitado de entornos en tiempo de ejecución para que estén preparados para responder de inmediato a las invocaciones de la función. Para configurar la simultaneidad aprovisionada de la función, siga las instrucciones de Configuring provisioned concurrency (Configuración de la simultaneidad aprovisionada).

Nota: La configuración de la simultaneidad aprovisionada incurre en cargos en su cuenta de AWS. Puede configurar la simultaneidad aprovisionada en una versión de una función o en un alias de función de Lambda.

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

La cantidad de ancho de banda de red y CPU asignados 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, consulte Memory and computing power (Memoria y potencia de cálculo) en la Lambda Operator Guide (Guía para operadores de Lambda).

Asegúrese de que cualquier proceso en segundo plano que utilice la función de Lambda se complete antes de que el gestor de funciones devuelva una cadena

Para obtener más información, consulte Understanding container reuse in AWS Lambda (Explicación de la reutilización de contenedores en AWS Lambda).

Verifique que su 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, otros servicios de AWS pueden tener límites de tiempo de espera diferentes.

Por ejemplo, Amazon API Gateway espera un máximo de 29 segundos para que se complete una invocación de proxy de función de Lambda. Para obtener más información, consulte How can I resolve the errors that I receive when I integrate API Gateway with a Lambda function? (¿Cómo puedo resolver los errores que recibo cuando integro API Gateway con una función de Lambda?) También puede consultar Using AWS Lambda with other services (Utilización de AWS Lambda con otros servicios).

Confirme que hay una ruta de red válida al punto de conexión que su función está tratando de alcanzar

Para revisar la configuración de red, siga las instrucciones de How do I troubleshoot timeout issues with a Lambda function that's in an Amazon VPC? (¿Cómo resuelvo los problemas de tiempo de espera con una función de Lambda en una Amazon VPC?)


OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año