为什么你需要DB
连接已关闭,未重新使用它Lambda
功能?
Each Lambda
函数运行意味着Container
运行后它们会存活一段时间(几十分钟,如果你连续调用它,它会保持存活)。
活着就意味着每个人Lambda
函数在运行后保留内存区域,以便可以重用它们。
例如,如果您在中定义了一个全局变量Lambda
功能如下。
(虽然是python代码,但我想你可以理解,因为它很简单)
variable = 10
def lambda_function(event, context):
global variable
print(variable)
variable += 1
If the Lambda
函数每 1 秒调用一次,它将打印如下。
10
11
12
13
14
.
.
.
正如你所看到的,每一个Lambda
调用的函数使用相同的全局变量。
如果全局变量是DB连接怎么办?您可以重用它们,而不是在每次 lambda 调用时重新打开连接。
然而,正如你所说,如果 100Lambda
函数同时执行,每个函数将打开 100 个连接Lambda
并发意味着不同Containers
分别具有不同的内存区域。
但最终,100 个连接将被重新用于连续的 100 个同时执行。
- - - - - 编辑 - - - - -
我同意@Arun
的评论。当流量稳定并逐渐增加和减少时,我的答案将很有用,以便连接可以充分重用并通过服务器端的保持活动状态关闭。流量的急剧增加和减少可能会浪费数据库连接而不适当关闭。
- - - - - 编辑 - - - - -2019-12-17
AWS 宣布新功能RDS proxy
虽然现在还是预览版。
如果您通过以下方式连接 RDSRDS proxy
,它将为您管理数据库连接池(Lambda RDS)。
详细可以参考这个link https://aws.amazon.com/about-aws/whats-new/2019/12/amazon-rds-proxy-available-in-preview/