Control de errores y reintentos automáticos en AWS Lambda - AWS Lambda

Control de errores y reintentos automáticos en AWS Lambda

Al invocar una función, se producen dos tipos de error. Se producen errores de invocación cuando se rechaza la solicitud de invocación antes de que su función la reciba. Los errores de función se producen cuando el código de la función o el tiempo de ejecución devuelve un error. En función del tipo de error, el tipo de invocación y el cliente o servicio que invoca la función, varía el comportamiento de reintentos y la estrategia para gestionar los errores.

Problemas con la solicitud, el intermediario o la cuenta pueden provocar errores de invocación. Los errores de invocación incluyen un tipo de error y un código de estado en la respuesta que indican la causa del error.

Errores de invocación comunes

  • Solicitud: el evento de solicitud es demasiado grande o no es un JSON válido, la función no existe o el valor de un parámetro es de un tipo erróneo.

  • Intermediario: el usuario o servicio no tiene permiso para invocar la función.

  • Cuenta: el número máximo de instancias de función ya se están ejecutando o se realizan solicitudes con demasiada rapidez.

Clientes tales como AWS CLI y el SDK de AWS reintentan si se supera el tiempo de espera de cliente, hay errores de limitación controlada (429) y otros errores no causados por una solicitud incorrecta. Para obtener una lista completa de los errores de invocación, consulte Invocar.

Los errores de función se producen cuando el código de la función o el tiempo de ejecución que utiliza devuelve un error.

Errores de funciones comunes

  • Función: su código de la función genera una excepción o devuelve un objeto de error.

  • Tiempo de ejecución: el tiempo de ejecución terminó la función al agotarse el tiempo de espera, al detectarse un error de sintaxis o al no haber podido serializar el objeto de respuesta en JSON. La función salió con un código de error.

A diferencia de los errores de invocación, los errores de funciones no hacen que Lambda devuelva un código de estado de la serie 400 o de la serie 500. Si la función devuelve un error, Lambda lo indica incluyendo un encabezado con el nombre X-Amz-Function-Error, y una respuesta con formato JSON con el mensaje de error y otros detalles. Para ver ejemplos de errores de las funciones en cada idioma, consulte los siguientes temas.

Al invocar una función directamente, se determina la estrategia para la gestión del seguimiento de errores. Puede volver a probar, enviar el evento a una cola para su depurar o ignorar el error. El código de la función puede haberse ejecutado en su totalidad, en parte o no haberse ejecutado. Si vuelve a intentarlo, asegúrese de que el código de la función pueda gestionar el mismo evento varias veces sin generar transacciones duplicados u otros efectos colaterales no deseados.

Al invocar una función indirectamente, que debe tener en cuenta el comportamiento de reintento del invocador y cualquier servicio que la solicitud encuentra en el proceso. Esto incluye los siguientes escenarios.

  • Invocación asíncrona: Lambda reintenta los errores de funciones dos veces. Si la función no tiene capacidad suficiente para gestionar todas las solicitudes entrantes, los eventos podrían esperan en la cola durante horas o días para su envío a la función. Puede configurar una cola de mensajes fallidos en la función para capturar eventos que no se hubieran procesado correctamente. Para obtener más información, consulte Invocación asincrónica.

  • Mapeos de fuente de eventos: los mapeos de fuentes de eventos que leen desde flujos reintentan el lote de elementos completo. Los errores repetidos bloquean el procesamiento del fragmento afectado hasta que se resuelve el error o los elementos caduquen. Para detectar fragmentos estancados, puede monitorizar la métrica antigüedad del iterador.

    Para mapeos de orígenes de eventos que leen de una cola, debe determinar el período de tiempo entre los reintentos y el destino de los eventos fallidos configurando el tiempo de espera de visibilidad y la política de redireccionamiento en la cola de origen. Para obtener más información, consulte AWS LambdaMapeos de origen de eventos de y los temas específicos del servicio en Utilización de AWS Lambda con otros servicios.

  • Servicios de AWS: los servicios de AWS pueden invocar la función de forma sincrónica o asincrónica. Para la invocación síncrona, el servicio decide si volver a intentarlo. Por ejemplo, las operaciones por lotes de Amazon S3 reintentan la operación si la función Lambda devuelve un código de respuesta TemporaryFailure. Los servicios que solicitan proxy de un usuario o cliente ascendente pueden tener una estrategia de reintento o pueden transmitir la respuesta de error de vuelta al solicitante. Por ejemplo, API Gateway siempre retransmite la respuesta de error al solicitante.

    Para invocación asíncrona, el comportamiento es el mismo que cuando se invoca la función de forma síncrona. Para obtener más información, consulte los temas específicos de servicios en la documentación de Utilización de AWS Lambda con otros servicios y el servicio de invocación.

  • Otras cuentas y clientes: al conceder acceso a otras cuentas, puede utilizar políticas basadas en recursos para restringir los servicios o recursos que pueden configurar para invocar la función. Para proteger su función de sobrecargas, considere la posibilidad de colocar una capa de API delante de su función con Amazon API Gateway.

Para ayudarle a abordar errores en aplicaciones de Lambda, Lambda se integra con servicios como Amazon CloudWatch y AWS X-Ray. Puede utilizar una combinación de registros, métricas, alarmas y seguimiento para detectar y identificar rápidamente problemas en el código de la función, la API u otros recursos que admiten la aplicación. Para obtener más información, consulte Monitorización y solución de problemas de aplicaciones de Lambda .

Para ver una aplicación de muestra que utiliza una suscripción de CloudWatch Logs, el seguimiento de X-Ray y una función de Lambda para detectar y procesar errores, consulte Aplicación de ejemplo de procesamiento de errores para AWS Lambda.