代码之家  ›  专栏  ›  技术社区  ›  Code

Postgres连接是否使用Lambda容器自动销毁?

  •  0
  • Code  · 技术社区  · 6 年前

    如果有节点.js创建到RDS Postgres数据库的连接的Lambda函数,当Lambda容器被销毁时,该连接是否自动被销毁(即不配置任何空闲超时设置)?

    (关于这一点,我看到的反应不一。)

    1 回复  |  直到 6 年前
        1
  •  1
  •   Maurice    6 年前

    当Lambda运行您的函数时,它会创建一个执行上下文,这将是您的“容器”,尽管它更像是一个用于更好隔离的微型VM(正如我们在re:invent2018中了解到的)。

    引用 documentation (我的)。

    执行Lambda函数后,AWS Lambda 维护 在另一个Lambda的预期下执行上下文一段时间 函数调用 Lambda函数完成后的上下文,并解冻 重用,如果AWS Lambda选择在Lambda

    Lambda函数代码中的任何声明(在处理程序之外) ,提供额外的 Lambda函数 重新建立连接时,将在中使用原始连接 如果在创建连接之前存在连接。

    [...]

    在编写Lambda函数代码时, 不要假设AWS Lambda自动重用执行上下文以进行后续操作 其他因素可能决定需要AWS Lambda 创建新的执行上下文,这可能导致意外的 结果,例如数据库连接失败。

    • 如果Lambda存储了一个冻结的上下文,那么 可以 使用它,但没有保证
    • Lambda可能会在执行之后存储您的上下文一段时间,从而保持数据库连接(如果它是在处理程序函数之外建立/存储的)。

    如果您需要确保连接在执行结束时终止,那么您必须自己终止连接,或者将其保存在handler函数中,您不能依赖Lambda来完成这项工作。