Mysql 使用节点管理Lambda上的RDS连接

Mysql 使用节点管理Lambda上的RDS连接,mysql,node.js,aws-lambda,Mysql,Node.js,Aws Lambda,注意到一个有趣的行为,并且想知道如果Lambda是如何被调用(并且似乎是被复制的?)的,那么管理连接的最佳实践可能是什么,以及管理数据库如何关闭数据库连接 在一个脚本中,我用以下逻辑实例化了连接: 有一个连接对象最初设置为null 调用某些例程时,如果对象为null,则实例化/连接该对象 当脚本“完成”时,我们调用该连接对象上的mysql.end() 在单个Lambda调用中执行此操作非常有效。脚本将退出(而不是超时),其连接将被整齐地删除 但是,当两个AWS网关调用调用相同的Lambda函数时

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

在一个脚本中,我用以下逻辑实例化了连接:

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

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

    似乎国家和一切都被复制了?结果是一个具有非空连接的陈旧mysql对象,在该对象上调用了.end()。调用.end()后,无法将查询排队-因此第一次网关调用成功,但后续网关调用失败

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


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

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

    如果要手动关闭连接,则确保在重复使用容器时重新连接连接。i、 e.确保调用end()后将连接设置为null,以便在重复使用时尝试重新连接