我想在lambda事件处理方法之外进行一些初始化,大部分只是加载环境变量,但是其中一些已使用KMS加密,因此我需要解密它们,但我必须等待{{1} } 解决。 Javascript不是我的主要语言,因此我不确定要实现这一目标的明智方式。
我当前的实现方式如下
Promise
理想情况下,我想将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;
函数之外。我可以不使用硬编码的睡眠来做到这一点吗?
答案 0 :(得分:1)
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 controller
重构为initInstall
函数,它是一个异步函数。
并创建一个名为install
的变量以“缓存” InstallController
对象。
在handler
函数中,只需检查install
是否存在,如果不存在,则将initInstall
的结果分配给install
。