当前位置: 首页 > 知识库问答 >
问题:

AWS lambda api网关错误“lambda代理响应格式错误”

孔安福
2023-03-14

我正在尝试使用AWS lambda设置一个hello world示例并通过api网关提供它。我单击了“创建Lambda函数”,它设置了api网关并选择了空白函数选项。我添加了在AWS网关上找到的lambda函数入门指南:

exports.handler = function(event, context, callback) {
  callback(null, {"Hello":"World"});  // SUCCESS with message
};

问题是,当我向它发出GET请求时,它会返回502响应{“message”:“Internal server error”}。日志显示“由于配置错误,执行失败:Lambda代理响应格式错误”。

共有3个答案

曹旭东
2023-03-14

是的,所以我认为这是因为你没有实际返回正确的http响应,这就是为什么你会得到错误。

就我个人而言,我使用了一组这样的函数:

    module.exports = {
        success: (result) => {
            return {
                statusCode: 200,
                headers: {
                    "Access-Control-Allow-Origin" : "*", // Required for CORS support to work
                    "Access-Control-Allow-Credentials" : true // Required for cookies, authorization headers with HTTPS
                },
                body: JSON.stringify(result),
            }
        },
        internalServerError: (msg) => {
            return {
                statusCode: 500,
                headers: {
                    "Access-Control-Allow-Origin" : "*", // Required for CORS support to work
                    "Access-Control-Allow-Credentials" : true // Required for cookies, authorization headers with HTTPS
                },
                body: JSON.stringify({
                    statusCode: 500,
                    error: 'Internal Server Error',
                    internalError: JSON.stringify(msg),
                }),
            }
        }
} // add more responses here.

然后您只需执行以下操作:

var responder = require('responder')

// some code

callback(null, responder.success({ message: 'hello world'}))
桂德义
2023-03-14

如果lambda用作代理,则响应格式应为

{
"isBase64Encoded": true|false,
"statusCode": httpStatusCode,
"headers": { "headerName": "headerValue", ... },
"body": "..."
}
劳嘉实
2023-03-14

通常,当您看到格式错误的Lambda代理响应时,这意味着Lambda函数的响应与API网关期望的格式不匹配,如下所示

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

如果您不使用Lambda代理集成,您可以登录API Gateway控制台并取消选中Lambda代理集成复选框。

此外,如果您看到Lambda代理响应格式不正确,可能意味着对Lambda函数的请求已被Lambda限制,您需要请求增加Lambda函数的并发执行限制。

 类似资料:
  • 问题内容: 我正在尝试使用AWS Lambda建立一个hello world示例,并通过api网关为其提供服务。我单击了“创建Lambda函数”,这将设置api通道并选择了Blank Function选项。我添加了在AWS网关入门指南中找到的lambda函数: 问题是,当我向它发出GET请求时,它返回了502响应。并且日志显示“由于配置错误,执行失败:Lambda代理响应格式错误”。 问题答案:

  • 我试图用AWS lambda建立一个hello world示例,并通过api网关为其服务。我点击了“创建一个Lambda函数”,它设置了api网关,并选择了空白函数选项。我添加了在AWS网关入门指南上找到的lambda函数: 问题是,当我向它发出GET请求时,它返回502响应。日志上写着“由于配置错误执行失败:Lambda代理响应不正确”。

  • 我试图在aws.lamda-service上的node.js中创建函数,并在函数控制台进行测试,效果良好,但当调用api时,它不能导出到外部,api网关错误“malformed Lambda proxy response”状态错误502 有什么想法吗

  • 我用无服务器创建了一个lambda函数。我用lambda控制台测试了lambda函数,它工作得很好。但是,在转换之前,我得到了endpoint响应体:null和执行失败,原因是配置错误:当我试图为该函数调用APIendpoint时,错误的Lambda代理响应。 并且调用了查询字符串参数的endpoint:。 我不知道为什么我的函数已经以这里的格式返回了响应,但仍然得到了格式错误的Lambda代理响

  • 我有以下来自数据库的路由配置 所有代理服务都将返回公共响应json以防出现错误场景

  • 我正在从AWS API网关调用AWS Lambda函数。返回的JSON需要压缩,因为它有时会变得太大(身体大小太大等)。但是,我在通过API网关获取响应时遇到了一些问题。这是我的Java代码: 我已经检查了Base64输出,它似乎工作正常(粘贴了它)https://www.base64decode.org/). 此外,当我与Postman核对时,我得到一个二进制blob,如果我将响应保存为以.gz