6

我有一个返回 base64 字符串的 lambda 函数,当我从代码中调用 lambda 时它可以工作,但是当我在 ALB 后面调用 lambda 并且 base64 字符串很大时,ALB 给我错误 502 Bad Gateway。注意:对于小尺寸字符串 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;
  };
4

3 回答 3

8

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

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

于 2019-04-25T20:10:42.373 回答
1

这可能是由于AWS ALB 文档中提到的几个原因-

  • 响应正文超过 1 MB
  • 在达到其配置的超时之前未响应的 Lambda 函数

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

如果原因是由于 lambda 超时,那么这可以在 lambda 配置中进行扩展。默认值为 3 秒,最长可延长至 15 分钟。如果达到 15 分钟的限制,则无能为力。文档

于 2020-05-27T06:02:32.037 回答
1

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

// 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);
};
于 2021-10-13T10:49:19.693 回答