无服务器框架lambda函数中来自Cloudfront的错误

时间:2019-07-15 16:09:31

标签: aws-lambda serverless-framework serverless

我正在尝试部署一个简单的Slack lambda api,该api使用@slack/client库从特定通道中删除成员和固定消息。我遇到的问题是函数执行没有问题,并且删除了通道成员也没有问题,但是我的Lambda函数不断返回:

HTTP/1.1 502 Bad Gateway
...
X-Cache: Error from cloudfront
...

{
    "message": "Internal server error"
}

作为响应主体。当我使用sls logs -f api检查日志时,也没有看到任何错误。我看到我的函数的console.log成功执行。

我的serverless.yml如下:

provider:
  name: aws
  runtime: nodejs10.x
  profile: serverless

functions:
  api:
    handler: handler.api
    timeout: 30
    events:
      - http:
          method: POST
          path: clean

我的api代码是:

module.exports.api = async (event, context, callback) => {
  let channel = JSON.parse(event.body).ctf
  let id = await findChannelId(channel)
  removeMembersFromChannel(id[0]).then(() => {
    removePinsFromChannel(id[0]).then(() => {
      callback(null, {
        statusCode: 200,
        body: JSON.stringify({
          message: `Cleaned ${channel} ${id}`,
        }, null, 2),
      })
    })
  })
};

我尝试过的事情:

  • 返回响应,而不使用callback
  • 使用承诺并异步等待
  • 使用sls invoke local在本地测试功能
  • 我的大部分搜索都表明这可能是权限问题,但是所有参考都用于s3,这是我没有使用过的东西。

问题

  • 为什么会出现此错误,以及如何解决此问题?
  • 在引用this之后,在处理程序函数中,我正在使用JSON.stringify。使用serverless-framework,如何避免使用Lambda代理集成?

1 个答案:

答案 0 :(得分:0)

请添加console.log以通过cloudwatch进行详细日志记录,并使用X射线。 Cloudfront的一些典型问题: -需要大量时间传播到边缘位置(也许您需要重新创建CDN) -来自lambda @ edge的日志位于调用的区域