尽管回调正确,但AWS“格式错误的Lambda代理响应”

时间:2018-06-21 10:22:27

标签: javascript amazon-web-services aws-lambda amazon-cloudfront

我只是从Serverless开始,还有其他有趣的事情-因此,如果我在某种程度上听起来很基础,请原谅我。

我通过以下链接开始学习本教程:part 1part 2。 在成功安装和配置完东西之后,到了必须调用curl请求以测试addRating函数的部分,而不是所需的输出时,我得到了iths错误:

HTTP/2 502
content-type: application/json
content-length: 36
date: Thu, 21 Jun 2018 09:59:35 GMT
x-amzn-requestid: cd0xxx
x-amz-apigw-id: I0xxx
x-cache: Error from cloudfront
via: 1.1 c438xxx.cloudfront.net (CloudFront)
x-amz-cf-id: MFxxx==

我尝试在网上寻找答案,但没有发现任何特别的问题。 一些信息表明我需要设置我的API网关,但是另一方面,我看到它在本教程中运行良好,而未配置任何api网关。 这里可能是什么问题,什么是最好的解决方法?

更新:

在Michael的帮助下,我设法找到了在第一次项目部署时发送到AWS的API网关。原来位置与API中的位置不同,导致它在列表中不可见。

运行测试,将实际问题命名为Malformed Lambda proxy response。研究表明,此问题是由于功能的错误响应而发生的。我已经更新了回复,使其看起来像这样:

callback(null, {
      statusCode: 200,
      headers: {
        'Access-Control-Allow-Origin': '*'
      },
      body: JSON.stringify({ averageRating: average }),
      isBase64Encoded: false
    })

为了更好地匹配Amazon docs。但是-问题仍然存在。

此外,尽管回调看起来像这样,测试“ hello”功能仍然可以正常工作:

const response = {
    statusCode: 200,
    body: JSON.stringify({
      message: 'Go Serverless v1.0! Your function executed successfully!',
      input: event,
    }),
  };

  callback(null, response);

更新: 将回调设置为context.succeed(response);会导致同样的问题

0 个答案:

没有答案