繁体   English   中英

重启AWS lambda function 清除缓存

[英]Restarting AWS lambda function to clear cache

我有一个 AWS Lambda function,它在冷启动时从 s3 调用创建一个 object。 然后,我将 object 保存在缓存中,而 function 处于热状态以减少加载时间。 当文件在 s3 中更改时,我有一个触发器来运行 lambda,但并非 lambda 的所有正在运行的实例都会重新启动并从 s3 中拉出。

有没有办法关闭 lambda 的所有实例,强制完全冷启动?

另外,我不想使用 python。

我根据@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"

使用UpdateFunctionCode API 端点强制刷新所有容器。 AWS 开发工具包对此进行了封装,使您可以更轻松地使用首选语言调用 API。

目前,无法强制重新启动正在运行的 Lambda 容器。

但是,您可以重新部署该函数,以便从那时起开始使用新容器。

如果您使用的是 Lambda 版本控制系统,另一种方法是发布新版本并使用别名将所有流量定向到它。

下面是一个例子:

发布版本aws lambda publish-version --function-name your-function-name-here

更新指向新版本的别名aws lambda update-alias --function-name your-function-name-here --name alias-name-here --function-version 123 (使用来自上面的第一个命令)

强制 lambda 丢弃现有容器的唯一方法是使用不同的东西重新部署函数。

在此处查看我的答案: 强制丢弃 AWS Lambda 容器

祝你好运,萌

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

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

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

我已经增加了+1 秒,保存,并且功能得到了刷新内存和超时设置

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

我发现这个问题最简单的答案是。 对函数进行一些更改,例如添加简单的注释行或删除任何空格,然后重新部署该函数。

它会在部署时清除缓存。

按照Renato Byrro 的回答,我使用 lambda function JavaScript AWS SDK 通过更新描述重新启动另一个 lambda function。

import { LambdaClient, UpdateFunctionConfigurationCommand } from '@aws-sdk/client-lambda';

const forceLambdaRestart = async event => {
    try {
        const client = new LambdaClient({
            region: 'your region here',
            credentials: {
                accessKeyId: 'your access key id',
                secretAccessKey: 'your secret access key',
            },
        });

        const command = new UpdateFunctionConfigurationCommand({
            FunctionName: event.functionName,
            Description: `forced update ${Date.now()}`,
        });

        const data = await client.send(command);

        console.log(data);
        return data;
    } catch (error) {
        console.error(error);
        return error;
    }
};

forceLambdaRestart();

似乎这足以重新启动 lambda 并清除内存缓存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM