等待lambda初始化

时间:2020-01-16 03:26:14

标签: javascript aws-lambda

我想在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;函数之外。我可以不使用硬编码的睡眠来做到这一点吗?

1 个答案:

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

相关问题