【发布时间】:2017-11-09 10:03:45
【问题描述】:
注意到一个有趣的行为,并且想知道在如何调用 Lambda(并且看似复制?)和管理数据库如何关闭数据库连接的情况下管理连接的最佳实践是什么。
在我拥有的一个脚本中,我用这个逻辑实例化了连接:
- 有一个连接对象最初设置为 null。
- 在调用某些例程时,如果对象为 null,则将其实例化/连接。
- 当脚本“完成”后,我们在该连接对象上调用 mysql.end()。
在单个 Lambda 调用中这样做非常有效。该脚本将退出(而不是超时),并且它的连接被整齐地删除。
但是,当两个 AWS Gateway 调用调用相同的 Lambda 函数时,就会出现问题。
似乎状态和一切都被复制了?结果是具有非空连接的陈旧 mysql 对象,在该对象上调用了 .end() 。调用 .end() 后,您无法将查询加入队列 - 因此第一次网关调用成功,但后续网关调用失败。
如果我删除对 mysql.end() 的所有调用,连接问题就会消失,但是 Lambda 脚本现在会超时(30 秒),而不是直接退出。
在 Lambda 上解决这种情况的方法是什么?
【问题讨论】:
标签: mysql node.js aws-lambda