How do I resolve HTTP 502 errors from API Gateway REST APIs with Lambda proxy integration?

3 minute read
0

I configured Amazon API Gateway proxy integration to work with an AWS Lambda function. When I call my REST API, I receive a configuration error and an HTTP 502 status code. How do I resolve the issue?

Short description

If your Lambda function's permissions are incorrect or the response to the API request isn't formatted correctly, then API Gateway returns an HTTP 502 status code.

Example HTTP 502 error messages as it appears in Amazon CloudWatch Logs

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

-or-

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

For API Gateway to handle a Lambda function's response, the function must return output according to the following JSON format:

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

For more information, see Output format of a Lambda function for proxy integration.

Resolution

1.    Review your REST API's CloudWatch metrics with the API dashboard in API Gateway.
-or-
Review your REST API's log events in the Amazon CloudWatch console.

2.    In the logs, review the format of your Lambda function's response to your API. If the response isn't in the required JSON format, then reformat it.

3.    Verify that the Lambda function's resource policy allows access to invoke the function with API Gateway.

4. If the Lambda function execution fails due to a package permission issue, then verify the permissions. For instructions, see How do I troubleshoot "permission denied" or "unable to import module" errors when uploading a Lambda deployment package?

5.    Verify that the Lambda function handler name and configuration are valid.

6.    If the Lambda execution fails during runtime, check the Lambda function logs and update the code.

7.    After making your changes, you can test your REST API method in the API Gateway console.

Example Node.js Lambda function with the response correctly formatted

Note: Node.js Lambda functions support async handlers and non-async handlers. The following example function uses an async handler.

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;
};

In this example response, there are four fields:

  • statusCode is an integer interpreted by API Gateway that's returned to the caller of the API method.
  • headers are collected and then sent back with the API Gateway response.
  • body must be converted to a string if you're returning data as JSON.
    Note: You can use JSON.stringify to handle this in Node.js functions. Other runtimes require different solutions, but the concept is the same.
  • isBase64Encoded is a required field if you're working with binary data. If you don't use this field, it's a best practice to set the value to FALSE.

Related information

Setting up CloudWatch logging for a REST API in API Gateway

Monitoring REST APIs with Amazon CloudWatch metrics

AWS OFFICIAL
AWS OFFICIALUpdated 2 years ago
2 Comments

To resolve HTTP 502 errors from API Gateway REST APIs with Lambda proxy integration, follow these steps:

  1. Run a Test on Your Lambda Function:

    • Start by running a test on your Lambda function to identify the exact issue. This will provide detailed error information and help pinpoint the root cause.
  2. Understand the 502 Error:

    • A 502 error indicates that the server, acting as a gateway or proxy, received an invalid response from the backend server (your Lambda function). This can be due to various reasons such as timeouts, code errors, or misconfigurations.
  3. Common Causes and Solutions:

    • Backend Timeout: Ensure your Lambda function executes within the timeout period set in API Gateway.
    • Lambda Function Errors: Check CloudWatch logs for any exceptions or errors in your Lambda function. Fix any issues in the code.
    • Invalid Response Format: Ensure your Lambda function returns a properly formatted response that matches API Gateway expectations.
    • Misconfigured Integration Request/Response: Verify that the integration request and response mappings in API Gateway are correctly configured.
replied 3 months ago

Thank you for your comment. We'll review and update the Knowledge Center article as needed.

profile pictureAWS
MODERATOR
replied 3 months ago