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.
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
- 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.
- 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.
- Compruebe que la política de recursos de la función de Lambda permita el acceso para invocar la función con API Gateway.
- 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 ¿Cómo soluciono los errores «permiso denegado» o «no se puede importar el módulo» al cargar un paquete de despliegue de Lambda?
- Compruebe que el nombre y la configuración del controlador de funciones de Lambda sean válidos.
- 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.
- Pruebe 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