我有一个AWS Lambda函数,可以在冷启动时从s3调用创建一个对象。然后我将对象保留在缓存中,同时函数处于温暖状态以保持加载时间缩短。当在s3中更改文件时,我有一个触发器来运行lambda,但并不是所有正在运行的lambda实例都从s3重新启动并从s3中拉出。
有没有办法让所有lambda实例完全冷启动?
另外,我不想使用python。
答案 0 :(得分:10)
我根据@DejanVasic的评论和验证做出了答案
aws lambda update-function-configuration --function-name "myLambda" --description "foo"
这将迫使下一个lambda调用为“冷启动”。
要验证:
@timestamp, @message | sort @timestamp desc | limit 1000 | filter @message like "cold_start:true"
答案 1 :(得分:2)
目前,无法强制重新启动运行Lambda容器。
但是,您可以重新部署该功能,以便从那时起开始使用新容器。
答案 2 :(得分:1)
使用UpdateFunctionCode
API端点强制刷新所有容器。 AWS SDKs将其包装起来,以便您使用首选语言更轻松地调用API。
答案 3 :(得分:1)
如果您使用的是Lambda版本控制系统,另一种方法是发布新版本并使用别名将所有流量定向到该版本。
这是一个例子:
Publish version:
aws lambda publish-version --function-name your-function-name-here
Update the alias指向新版本:
aws lambda update-alias --function-name your-function-name-here --name alias-name-here --function-version 123
(在上面的第一个命令的输出消息中使用功能版本)
答案 4 :(得分:0)
强制lambda丢弃现有容器的唯一方法是使用不同的东西重新部署函数。
在这里查看我的答案:Force Discard AWS Lambda Container
祝你好运, 萌答案 5 :(得分:0)
答案 6 :(得分:0)
除了上面的一些有效答案外:我碰巧在(平均)AWS Lambda实例生存期内运行了一个实验。我找不到运行时间超过(平均)两个小时以上的实例:https://xebia.com/blog/til-that-aws-lambda-terminates-instances-preemptively/。
TL; DR:AWS Lambda会在两个小时后抢先终止实例(甚至是处理流量的实例),标准差为30分钟。
答案 7 :(得分:0)
只需添加一个新的环境变量和/或更改现有的环境变量。我创建了一个名为 BOGUS 并给它一个数字,每当我想强制冷启动时,我都会增加这个数字。