¿Cómo puedo resolver los errores que recibo al integrar API Gateway con una función de Lambda?

7 minutos de lectura
0

Quiero resolver los errores que recibo al integrar Amazon API Gateway con una función de AWS Lambda.

Resolución

Active el registro para su API y su fase

1.    En la consola de API Gateway, busque el Editor de fases de su API.

2.    En el panel Editor de Etapas, seleccione la pestaña Registros/Rastreo.

3.    En la pestaña Registros/Rastreo, para ver la Configuración de CloudWatch, haga lo siguiente para activar el registro:
Active la casilla Habilitar registros de CloudWatch.
En Nivel de registro, elija INFO para generar registros para todas las solicitudes. O bien, elija ERROR para generar registros únicamente para las solicitudes a su API que generen un error.
Para las API de REST, active la casilla Registrar todos los datos de las solicitudes/respuestas. O bien, en el caso de las API de WebSocket, active la casilla Registrar todos los datos de mensajes.

4.    Bajo Registro de acceso personalizado, haga lo siguiente para activar el registro de acceso:
Elija la casilla Habilitar registro de acceso.
Para el ARN de destino del registro de acceso, introduzca el nombre de recurso de Amazon (ARN) de un grupo de registros de CloudWatch o de una transmisión de Amazon Kinesis Data Firehose.
Introduzca un Formato de registro. Como guía, elija CLF, JSON, XML, o CSV para ver un ejemplo en ese formato.

5.    Seleccione Guardar cambios.
Nota: La consola no confirma que se haya guardado la configuración.

Para obtener más información, consulte Configurar el registro de API de CloudWatch mediante la consola de API Gateway.

Determine los tipos de integración, verifique los errores y siga los siguientes pasos

1.    Determine si una integración de proxy de Lambda o una integración personalizada de Lambda está configurada en API Gateway. Puede comprobar el tipo de integración revisando el resultado de la función Lambda o ejecutando el comando get-integration.

2.    Compruebe que los errores de API Gateway se correspondan con los errores de Lambda. Ejecute la siguiente consulta de CloudWatch Logs Insights para encontrar un código de estado de error durante un período de tiempo específico:

parse @message '(*) *' as reqId, message
    | filter message like /Method completed with status: \d\d\d/
    | parse message 'Method completed with status: *' as status
    | filter status != 200
    | sort @timestamp asc
    | limit 50

A continuación, ejecute la siguiente consulta de CloudWatch Logs Insights para buscar registros de errores de Lambda durante el mismo período de tiempo:

fields @timestamp, @message
    | filter @message like /(?i)(Exception|error|fail)/
    | sort @timestamp desc
    | limit 20

3.    Según el tipo de error que identifique en sus registros, elija una de las siguientes opciones:

Si recibe el siguiente error, complete los pasos de la sección Resolver problemas de concurrencia.

(XXXXX) Lambda invocation failed with status: 429. Lambda request id: XXXXXXXXXX
(XXXXX) Execution failed due to configuration error: Rate Exceeded.
(XXXXX) Method completed with status: 500

Si recibe alguno de los siguientes errores, complete los pasos de la sección Resolver problemas de tiempo de espera.

Para una integración personalizada de Lambda:

< 29 sec:
(XXXXX) Method response body after transformations: {"errorMessage":"2019-08-14T02:45:14.133Z xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Task timed out after xx.01 seconds"}
> 29 sec:
(XXXXX) Execution failed due to a timeout error

Para una integración de proxy de Lambda:

< 29 sec:
(XXXXX) Endpoint response body before transformations: {"errorMessage":"2019-08-14T02:50:25.865Z xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Task timed out after xx.01 seconds"}
> 29 sec:
(XXXXX) Execution failed due to a timeout error

Si recibe el siguiente error, complete los pasos de la sección Resolver errores de la función.

(XXXXX) Execution failed due to configuration error: Malformed Lambda proxy response
(XXXXX) Method response body after transformations: {"errorMessage": "Syntax error in module 'lambda_function'"}

Resolver problemas de simultaneidad

Recibe errores de limitación 429 o errores 500 cuando las solicitudes adicionales llegan de API Gateway más rápido de lo que su función Lambda puede escalar.

Para resolver estos errores, analice las métricas Count (API Gateway), Throttles (Lambda) y ConcurrentExecutions (Lambda) en CloudWatch. Tenga en cuenta lo siguiente:

  • El recuento (API Gateway) es el número total de solicitudes de API en un período determinado.
  • Throttles (Lambda) son el número de solicitudes de invocación que están restringidos. Cuando todas las instancias de la función procesan solicitudes y no hay simultaneidad disponible para escalar verticalmente, Lambda rechaza las solicitudes adicionales con el error TooManyRequestsException. Las solicitudes restringidas y otros errores de invocación no se cuentan como invocaciones o errores.
  • ConcurrentExecutions (Lambda) es el número de instancias de funciones que procesan eventos. Si este número alcanza su cuota de ejecuciones simultáneas para la región de AWS, se limitan las solicitudes de invocación adicionales. Las solicitudes de invocación también se limitan cuando el número de instancias de la función alcanza el límite de concurrencia reservado que configuró en la función.

Nota: Para obtener más información, consulte Métricas de API Gateway y Métricas de funciones de trabajo con Lambda.

Si establece la simultaneidad de reserva en la función Lambda, defina un valor de simultaneidad de reserva más alto para la función Lambda. O bien, elimine el valor de simultaneidad inversa de la función Lambda. A continuación, la función se basa en el conjunto de ejecuciones simultáneas no reservadas.

Si no configura la simultaneidad de reserva en la función Lambda, consulte la métrica ConcurrentExecutions para averiguar el uso. Para obtener más información, consulte Cuotas de Lambda.

Resolver problemas de tiempo de espera

El tiempo de espera de la integración es de 29 segundos (un límite estricto) para todas las integraciones de API Gateway. Puede que se encuentre con dos escenarios al crear una API de API Gateway con integración Lambda. Los escenarios se crean cuando el tiempo de espera es inferior a 29 segundos o superior a 29 segundos.

Si el tiempo de espera de la función Lambda es inferior a 29 segundos, compruebe los registros de Lambda para investigar este problema. Si la función Lambda debe ejecutarse después de 29 segundos, considere la posibilidad de invocar la función Lambda de forma asíncrona.

Para la integración personalizada de Lambda, siga estos pasos:

1.    Abra la consola de API Gateway.

2.    Desde el panel de navegación, seleccione APIs y, a continuación, elija su API.

3.    Elija Recursos y, a continuación, elija su método.

4.    Elija Solicitud de integración.

5.    Elija Solicitud de método.

6.    Amplíe los Encabezados de las solicitudes HTTP.

7.    Seleccione Añadir encabezado.

8.    En Name, introduzca un nombre para su encabezado. Por ejemplo: X-Amz-Invocation-Type

**Importante:**Debe mapear su encabezado desde 'Evento' (se requieren comillas simples).

Para la integración de proxy de Lambda:

Utilice dos funciones Lambda: la función A y la función B. API Gateway invoca primero la función A de forma sincronizada. A continuación, la función A invoca la función B de forma asincrónica. La función A puede devolver una respuesta correcta a API Gateway cuando la función B se invoca de forma asincrónica.

Si utiliza la integración de proxy de Lambda, considere cambiarla por una integración personalizada. Sin embargo, debe configurar las plantillas de mapeo para transformar la solicitud/respuesta al formato deseado. Para obtener más información, consulte Configurar la invocación asincrónica de la función Lambda del backend.

**Nota:**Como una función Lambda asíncrona se ejecuta en segundo plano, el cliente no puede recibir datos de una función Lambda directamente. Debe tener una base de datos intermedia para almacenar cualquier dato persistente.

Resolver errores de funciones

Si recibe un error de función al invocar la API, compruebe si hay algún error de sintaxis en la función Lambda. Este error también aparece si la función Lambda no devuelve un objeto JSON válido que API Gateway espera para las integraciones de proxy.

Para resolver este error, siga los pasos de la sección Activar el registro para su API y su fase.


Información relacionada

Gestione los errores de Lambda estándar en API Gateway

Gestione los errores de Lambda personalizados en API Gateway

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año