【发布时间】:2020-12-23 23:08:20
【问题描述】:
我有一个关于 AWS lambda 的问题,以及它进行数据库连接时的最佳实践。
我想编写一些 lambda 函数,每个函数将处理 CRUD 操作。 因此,对于函数 A,它将为一个数据模型执行 CRUD,而函数 B 将为另一个数据模型执行 CRUD。
现在我的问题是,这两个 lambda 函数可以共享到数据库的连接池吗? 我知道当它处于温暖状态时,可以在 lambda 中重用连接池。 或者我可以选择在请求完成后断开数据库吗?
【问题讨论】:
-
每个 Lambda 实例都在一个完全隔离的环境中运行,用于所有意图和目的。是的,一个暖实例可以保持一个打开的连接,但它无法与任何其他实例共享它。您需要在 Lambda 和您的数据库之间建立一个数据库代理/负载均衡器之类的东西来保持一些开放连接池;但这需要常量基础设施,这与“无服务器”的想法有些相反。
-
@deceze 那么这里的最佳做法是什么?我看到两个选项,一个是我可能在 lambda 完成后断开数据库。或者当 lambda 回到冷状态时让数据库连接自行消失。第二种选择是我创建一个 lambda 函数,它为我将拥有的每个数据模型执行 CRUD。不过不确定哪个是更好的选择。
-
如果您使用的是 Amazon RDS,您可以使用 AWS Lambda RDS 代理功能,它应该可以有效地满足您的需求。见blog post 和documentation。
-
@starcorn - 您应该在 Shutdown 生命周期事件中关闭连接。我们使用 Lambda 作为后台微程序,我们有不同的 lambda 函数来完成不同的工作,并考虑到 SRP 构建。
标签: amazon-web-services aws-lambda