等待 lambda 初始化



我想在我的lambda事件处理方法之外进行一些初始化,主要只是加载环境变量,但其中一些是用KMS加密的,所以我需要解密它们,但我必须等待Promise解决。Javascript不是我的主要语言,所以我不确定实现这一目标的明智方式(如果有的话(。

我当前的实现如下所示

const controller = parseEnv(process.env).then((parsedEnv) => {
return new InstallController(parsedEnv);
});
exports.handler = async (event, context, callback) => {
const install = await controller;
return install.handle(event, context, callback);
};

理想情况下,我想将const install = await controller;移动到exports.handler功能之外。我可以在不使用硬编码睡眠的情况下执行此操作吗?

Lambda 是为serverless架构设计的,这意味着如果没有任何调用,lambda 函数可能会进入"睡眠"。

然后,如果您连续调用 lambda 函数,则处理程序外部的变量已被缓存。

我将向你展示我的方式:

const initInstall = async () => {
const parsedEnv = await parseEnv(process.env);
return new InstallController(parsedEnv);
};
let install = null;
exports.handler = async (event, context, callback) => {
if (!install) {
install = await initInstall();
} else {
// Hit from "cache"
}
return install.handle(event, context, callback);
};

我重构const controllerinitInstall函数,它是一个异步函数。

并创建一个称为install的变量来"缓存"InstallController对象。

handler函数中,只需检查是否存在install,如果没有,则将initInstall的结果分配给install

最新更新