【问题标题】:Serverless functions work locally but the deployed ones are unresponsive无服务器功能在本地工作,但部署的功能无响应
【发布时间】:2020-04-22 22:36:15
【问题描述】:

我们正在改变我们框架中的一些东西,例如让 sequelize 与 serverless-bundle 一起工作。

我们以这种格式测试了我们所有的新功能:

serverless invoke local --function getObjects

它运行得非常完美而且速度惊人。

部署顺利,没有错误,我们设置了调试标志。端点似乎可以工作,但 lambda 函数没有响应。

这是我们的一些 serverless.yml

  name: aws
  runtime: nodejs12.x
  stage: dev
  region: us-west-2
  logs:
    restApi: true

  iamRoleStatements:
    - Effect: Allow
      Action:
       - "cloudwatch:*"

  functions:
    getObjects:
      handler: objects/get.main
      events:
        - http:
            path: objects
            method: get
            cors: true
            authorizer: aws_iam

代码看起来与本地测试中的捆绑包相同,但它具有永久运行时,无论我在控制台中创建多大的 lambda 运行时都会超时。更奇怪的是,lambda 从不抛出错误,并且日志实际上是空的,这表明它甚至没有正确初始化函数。

以前有没有人看到过这种行为,或者有没有人知道如何解决它?

【问题讨论】:

  • 有趣的场景,您是否尝试禁用授权器以查看是否是它的原因?你还有来自 lambda 或 api 网关的 cloudwatch 日志吗?
  • 我刚刚尝试禁用授权者,但没有帮助。我们设置了日志,它们似乎可以工作,但它只进入第一个 console.log 打印接收到的事件输入,但它不打印任何其他内容。例如,对于 get 调用,它只记录 INPUT {} 然后无论我们让它运行多长时间最终都会超时。
  • 更奇怪的是,如果我将构建的 bundle 文件从 lambda 中提取到一个编辑器中,我可以使用 node 在本地运行它,但它仍然无法在 lambda 中运行。
  • 你能分享你在node上执行的处理程序代码吗?

标签: aws-lambda serverless


【解决方案1】:

在我的情况下,我在 VPC 安全组 中设置了一个入站规则,它只允许我的 ip 地址的 tcp 连接。我将其更改为 anywhere,并且 api 也开始远程工作。

谢谢。

【讨论】:

    【解决方案2】:

    原来我们在无服务器中使用的 VPC 在我们的 RDS 安全组中没有得到授权。它从未产生错误,因为它正在等待与数据库的连接超时,并且从未拒绝对数据库的请求,因为它是由 IP 控制的。通过将 VPC 添加到安全组,它工作得很好!

    【讨论】:

      猜你喜欢
      • 2017-02-13
      • 1970-01-01
      • 1970-01-01
      • 2021-04-18
      • 2018-07-28
      • 1970-01-01
      • 2022-10-24
      • 1970-01-01
      • 2020-12-17
      相关资源
      最近更新 更多