Dharam
Dharam

Reputation: 479

AWS ALB returns 502 Bad Gateway from lambda

I have a lambda function which return base64 string, when I invoke lambda from code it works, but when I call lambda behind ALB and base64 string is large size, ALB gives me error 502 Bad Gateway. Note:for small size string ALB also works.

// Lambda function handler

'use strict';


module.exports.handler = async (event, context) => {
  // ALB expects following response format
  // see: https://docs.aws.amazon.com/lambda/latest/dg/services-alb.html
  const response = {
    headers: {
      'Access-Control-Allow-Origin': '*',
      'Content-Type': 'application/json',
    },
    isBase64Encoded: true,
    statusCode: 200,
    statusDescription: '200 OK',
  };
// ALB gives error 502 when buffer size is large
  const answer = 'This is my audio buffer'.toString('base64');
  response.body = answer
  return response;
  };

Upvotes: 9

Views: 17258

Answers (3)

user1751825
user1751825

Reputation: 4319

Just in case it's helpful to someone. I was able to resolve a similar issue by changing the code to be like this...

// Lambda function handler

'use strict';

//note the 3rd 'callback' parameter
module.exports.handler = (event, context, callback) => {

  // Construct the response object like normal

  callback(null, response);
};

Upvotes: 1

Nithin Kumar Biliya
Nithin Kumar Biliya

Reputation: 3011

This could be due to couple of reasons as mentioned in the AWS ALB docs -

  • response body exceeds 1 MB
  • Lambda function that did not respond before its configured timeout was reached

There is nothing much that can be done if the payload size limit is reached. 1 MB is the limit if lambda is configured as a target for ALB.

If the reason is due to lambda timeout, then this can be extended in the lambda configuration. The default is 3 seconds and it can be extended upto 15 minutes. There is nothing much one can do if the 15 minutes limit is reached. docs

Upvotes: 2

hephalump
hephalump

Reputation: 6164

Check that you are not exceeding the limits. As per the AWS docs, when using Lambda as an ALB target the maximum response size is 1MB; if the response is more than 1MB you will get an error.

You can see this link for more information on using Lambda as a target for your ALB: https://docs.aws.amazon.com/elasticloadbalancing/latest/application/lambda-functions.html

Upvotes: 10

Related Questions