AWS ALB returns 502 来自 lambda 的错误网关

AWS ALB returns 502 Bad Gateway from lambda

我有一个 lambda 函数,它 return base64 字符串,当我从代码调用 lambda 时它可以工作,但是当我在 ALB 后面调用 lambda 并且 base64 字符串很大时,ALB 给我错误 502 Bad Gateway。 Note:for 小尺寸字符串 ALB 也可以。

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

检查您是否超出限制。根据 AWS 文档,当使用 Lambda 作为 ALB 目标时,最大响应大小为 1MB;如果响应超过 1MB,您将收到错误消息。

您可以查看此 link 以了解有关使用 Lambda 作为 ALB 目标的更多信息:https://docs.aws.amazon.com/elasticloadbalancing/latest/application/lambda-functions.html

这可能是由于 AWS ALB docs -

中提到的几个原因造成的
  • 响应正文超过 1 MB
  • Lambda 函数在达到配置的超时之前没有响应

如果达到负载大小限制,则无能为力。如果将 lambda 配置为 ALB 的目标,则 1 MB 是限制。

如果是lambda超时,可以在lambda配置中进行扩展。默认值为 3 秒,最多可延长至 15 分钟。如果达到 15 分钟的限制,人们将无能为力。 docs

以防对某人有帮助。我能够通过将代码更改为这样来解决类似的问题...

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