重新启动AWS lambda函数以清除缓存

时间:2018-06-14 21:55:03

标签: amazon-web-services amazon-s3 aws-lambda

我有一个AWS Lambda函数,可以在冷启动时从s3调用创建一个对象。然后我将对象保留在缓存中,同时函数处于温暖状态以保持加载时间缩短。当在s3中更改文件时,我有一个触发器来运行lambda,但并不是所有正在运行的lambda实例都从s3重新启动并从s3中拉出。

有没有办法让所有lambda实例完全冷启动?

另外,我不想使用python。

8 个答案:

答案 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 versionaws 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)

我发现的最简单的方法是在“基本设置”中更改某些内容,例如超时: Basic Settings

我已将+1上调了一次,保存了,并且功能得到了刷新 Memory and timeout settings

答案 6 :(得分:0)

除了上面的一些有效答案外:我碰巧在(平均)AWS Lambda实例生存期内运行了一个实验。我找不到运行时间超过(平均)两个小时以上的实例:https://xebia.com/blog/til-that-aws-lambda-terminates-instances-preemptively/

TL; DR:AWS Lambda会在两个小时后抢先终止实例(甚至是处理流量的实例),标准差为30分钟。

答案 7 :(得分:0)

只需添加一个新的环境变量和/或更改现有的环境变量。我创建了一个名为 BOGUS 并给它一个数字,每当我想强制冷启动时,我都会增加这个数字。