【问题标题】:Lambda times out without error when querying RDS查询 RDS 时 Lambda 超时且无错误
【发布时间】:2017-12-06 08:36:43
【问题描述】:

我有一个 lambda 函数,它在我第一次运行时成功运行(在新部署之后),但每次我尝试运行它时都会超时。它肯定与 RDS(MySql)有关,因为如果我调用查询,它可以正常工作。我可以在查询 RDS 之前或之后将任何我喜欢的内容 console.log 到 CloudWatch,所有日志都进入 CloudWatch,但不会引发任何错误。它显然在执行整个 lambda,只是没有返回。它也不是 lambda 回调代码,因为我再次可以简单地删除 RDS 查询,并且我得到一个没有打嗝的响应。

【问题讨论】:

    标签: mysql aws-lambda amazon-rds


    【解决方案1】:

    原来,这是因为我没有关闭 RDS 连接。显然,只要 RDS 连接保持打开状态,lambda 就不会响应。当然这是有道理的,因为您最终可能会打开无限数量的连接(取决于您的 lambda 函数的负载)。不幸的是,lambda 没有用于 RDS 的连接池功能。 :( Aurora Serverless 发布后,也许这不会成为问题?

    【讨论】:

    • 我不确定您的诊断是否正确。您可以保持连接打开并在调用中重复使用它,但您需要将 MySQL @@wait_timeout 设置为比 8 小时默认值更合适的值,这样连接的激增就不会持续太久......但 Lambda 有没有针对这种特殊脚枪的自动保护。
    • 如果这是 Node.js,不设置 context.callbackWaitsForEmptyEventLoop = false 将导致 Lambda 超时,因为该打开的连接无限期地阻塞了事件循环......但这会影响所有调用,包括第一个:stackoverflow.com/a/46062394/1695906
    • callbackWaitsForEmptyEventLoop 很可能是我所缺少的。我没有意识到这一点。谢谢!
    猜你喜欢
    • 2020-01-17
    • 2017-07-25
    • 2017-10-05
    • 2021-08-28
    • 2013-06-21
    • 2016-01-15
    • 2021-01-30
    • 1970-01-01
    • 2021-10-13
    相关资源
    最近更新 更多