¿Cómo puedo solucionar los errores HTTP 502 de las API de REST de API Gateway con la integración de proxy de Lambda?

4 minutos de lectura
0

He configurado la integración del proxy de Amazon API Gateway para que funcione con una función de AWS Lambda. Cuando llamo a mi API de REST, aparece un error de configuración y un código de estado HTTP 502. ¿Cómo puedo resolver el problema?

Descripción breve

Si los permisos de la función de Lambda son incorrectos o la respuesta a la solicitud de API no tiene el formato correcto, API Gateway devuelve un código de estado HTTP 502.

Ejemplos de mensajes de error HTTP 502 tal y como aparecen en los Registros de Amazon CloudWatch

Wed Aug 03 08:10:00 UTC 2022 : Execution failed due to configuration error:
WE Aug 03 09:10:00 UTC 2022 : Method completed with status: 502

Alternativa:

Wed Aug 03 08:20:33 UTC 2022 : Lambda execution failed with status 200 due to customer function error: [Errno 13] Permission denied: '/var/task/lambda_function.py'. Lambda request id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Wed Aug 03 08:20:33 UTC 2022 : Method completed with status: 502

Para que API Gateway gestione la respuesta de una función de Lambda, la función debe devolver la salida según el siguiente formato JSON:

{
    "isBase64Encoded": true|false,
    "statusCode": httpStatusCode,
    "headers": { "headerName": "headerValue", ... },
    "body": "..."
}

Para obtener más información, consulte Output format of a Lambda function for proxy integration.

Resolución

1.    Revise las métricas de CloudWatch de su API de REST con el panel de API de API Gateway.
\Alternativa:
Revise los eventos de registro de su API de REST en la consola de Amazon CloudWatch.

2.    En los registros, revise el formato de la respuesta de la función de Lambda a su API. Si la respuesta no está en el formato JSON necesario, vuelva a formatearla.

3.    Compruebe que la política de recursos de la función de Lambda permita el acceso para invocar la función con API Gateway.

4. Si la ejecución de la función de Lambda falla debido a un problema con los permisos del paquete, verifique los permisos. Para obtener instrucciones, consulte How do I troubleshoot «permission denied» or «unable to import module» errors when uploading a Lambda deployment package?

5.    Compruebe que el nombre y la configuración del controlador de funciones de Lambda sean válidos.

6.    Si la ejecución de Lambda falla durante el tiempo de ejecución, compruebe los registros de las funciones de Lambda y actualice el código.

7.    Tras hacer los cambios, puede probar el método de la API de REST en la consola de API Gateway.

Ejemplo de función de Lambda Node.js con la respuesta formateada correctamente

Nota: Las funciones de Lambda Node.js admiten controladores asíncronos y no asíncronos. La siguiente función de ejemplo utiliza un controlador asíncrono.

exports.handler = async (event) => {

    const responseBody = {
        "key3": "value3",
        "key2": "value2",
        "key1": "value1"
    };

    const response = {
        "statusCode": 200,
        "headers": {
            "my_header": "my_value"
        },
        "body": JSON.stringify(responseBody),
        "isBase64Encoded": false
    };

    return response;
};

En este ejemplo de respuesta, hay cuatro campos:

  • statusCode: es un número entero interpretado por API Gateway que se devuelve al usuario que llama al método API.
  • headers: se recopilan y, a continuación, se devuelven con la respuesta de API Gateway.
  • body: debe convertirse en una cadena si va a devolver datos como JSON.
    Nota: Puede usar JSON.stringify para controlar esto en las funciones de Node.js. Otros tiempos de ejecución requieren soluciones diferentes, pero el concepto es el mismo.
  • isBase64Encoded: es un campo obligatorio si trabaja con datos binarios. Si no utiliza este campo, se recomienda establecer el valor en FALSE.

Información relacionada

Setting up CloudWatch logging for a REST API in API Gateway

Monitoring REST APIs with Amazon CloudWatch metrics

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años