我们知道lambda是按执行时间收费的。所以现在我想从lambda连接到SQL Server DB。如果我在每个lambda中创建一个连接,那么lambda将会很繁琐。
是否有什么最佳方法可以将我的SQL连接保持在一个地方,并且可以在我所有的lambda上使用。或至少有一个lambda活着才能执行多次。
我知道,应将lambda视为无状态,但我仍在寻找解决此问题的更好方法。我搜索了许多站点,但没有运气。我在Google中发现对AWS的帮助和参考较少。
答案 0 :(得分:3)
是的,有更好的解决方案。
基本上,您是对的,应将Lambda视为无状态。
但是,在AWS Lambda中,有容器重用的概念。这意味着,如果您经常调用Lambda,则很有可能将为您的上一个请求提供服务的容器用于为您的当前请求提供服务。如果发生这种情况,您将获得先前的执行上下文,该上下文包括先前执行时的所有声明和数据库连接(处理程序代码除外)。
以下是有关AWS Lambda容器重用的记录
执行Lambda函数后,AWS Lambda会维护 在期待另一个Lambda的情况下执行上下文一段时间 函数调用。实际上,该服务将冻结执行 Lambda函数完成后的上下文,并解冻 重用(如果AWS Lambda选择在Lambda时重用上下文) 函数再次被调用。这种执行上下文重用方法具有 具有以下含义:
- 您的Lambda函数代码中的任何声明(在处理程序代码之外,请参阅编程模型)保持初始化,从而提供了其他功能 再次调用该函数时的优化。 例如,如果您的 Lambda函数建立数据库连接,而不是 重新建立连接时,原始连接用于 随后的调用。我们建议您在代码中添加逻辑以进行检查 创建连接之前是否存在连接。
有关更多详细信息,请检查here
答案 1 :(得分:0)