使用Node管理Lambda上的RDS连接

时间:2017-06-07 21:24:46

标签: mysql node.js aws-lambda

注意到一个有趣的行为,并且想知道如何调用Lambda(并且看似复制了?)以及管理数据库关闭数据库连接的方式,管理连接的最佳实践是什么。

在我使用的单个脚本中,我使用此逻辑实例化连接:

  1. 最初设置为null的连接对象。
  2. 当调用某些例程时,如果该对象为null,则将其实例化/连接。
  3. 当脚本“完成”时,我们在该连接对象上调用mysql.end()。
  4. 在单个Lambda调用中执行此操作非常有用。该脚本将退出(而不是超时),并且其连接被整齐地删除。

    但是,当两个AWS Gateway调用调用相同的Lambda函数时,会出现问题。

    看似状态,一切都被复制了?结果是一个陈旧的mysql对象,其中有一个非空连接,调用了.end()。在调用.end()之后,您无法将查询排入队列 - 因此第一次网关调用成功,但后续网关调用失败。

    如果删除对mysql.end()的所有调用,连接问题就会消失,但是,Lambda脚本现在超时(30秒)而不是整齐地退出。

    Lambda上的这种情况有什么解决方法?

1 个答案:

答案 0 :(得分:0)

如果要手动关闭连接,请确保在重用容器时重新连接。 ie确保在调用end()后将连接设置为null,以便在重用时尝试重新连接。