如何在 VPC 上强制完全冷启动 AWS lambda 函数?
How do I force a complete cold start of an AWS lambda function on a VPC?
我有一个用 Python 编写的 lambda 函数,它使用几个重量级依赖项(NumPy、pandas、goodtables 等)并且还连接到 VPC(用于访问Postgres RDS 实例)
这个函数的冷启动执行时间很长(16.2秒),在一段时间后(> 4-6小时)执行
但是,如果我更新函数代码并再次调用它(在第一次执行后不久),冷启动执行时间会大大减少(3 秒)
如果我在不更新的情况下再次调用该函数,这是一个热启动,执行时间会进一步缩短(313 毫秒)
我怀疑第一次冷启动(16.2 秒)是在 Lambda 设置 ENI 以访问 VPC 资源时,ENI 在第二次冷启动(3 秒)期间被重用,因此重新创建避免了 ENI。
我正在尝试优化此函数的冷启动时间,并希望它从头开始,看看它在完全冷启动(即无 ENI + 冷启动)时能执行多快。
有没有办法重复这样做?
除了修改代码,您还可以尝试发布新版本的 lambda 函数以进行测试。根据 AWS,每次您发布 lambda 函数的新版本时,您的函数所在的所有容器 运行 都会被销毁然后重新创建,这应该强制完全冷启动。
我也在想同样的事情,虽然您可以 "throttle" 在测试场景中将保留计数设为零,但在生产场景中这很可能不是一个可行的选项。为此,请查看 or .
中的答案
您可以调高内存,保存并重新设置。
您还可以添加新的环境变量。
这会强制处理所有现有的热 lambda,并在下一次调用 lambda 时进行新的冷启动。
我有一个用 Python 编写的 lambda 函数,它使用几个重量级依赖项(NumPy、pandas、goodtables 等)并且还连接到 VPC(用于访问Postgres RDS 实例)
这个函数的冷启动执行时间很长(16.2秒),在一段时间后(> 4-6小时)执行
但是,如果我更新函数代码并再次调用它(在第一次执行后不久),冷启动执行时间会大大减少(3 秒)
如果我在不更新的情况下再次调用该函数,这是一个热启动,执行时间会进一步缩短(313 毫秒)
我怀疑第一次冷启动(16.2 秒)是在 Lambda 设置 ENI 以访问 VPC 资源时,ENI 在第二次冷启动(3 秒)期间被重用,因此重新创建避免了 ENI。
我正在尝试优化此函数的冷启动时间,并希望它从头开始,看看它在完全冷启动(即无 ENI + 冷启动)时能执行多快。
有没有办法重复这样做?
除了修改代码,您还可以尝试发布新版本的 lambda 函数以进行测试。根据 AWS,每次您发布 lambda 函数的新版本时,您的函数所在的所有容器 运行 都会被销毁然后重新创建,这应该强制完全冷启动。
我也在想同样的事情,虽然您可以 "throttle" 在测试场景中将保留计数设为零,但在生产场景中这很可能不是一个可行的选项。为此,请查看
您可以调高内存,保存并重新设置。
您还可以添加新的环境变量。
这会强制处理所有现有的热 lambda,并在下一次调用 lambda 时进行新的冷启动。