lambda - 在所有 lambda 函数中访问单个查询输出
问题描述
我在使用 lambda 函数的 nodejs 中有无服务器应用程序,我已将我的应用程序的所有 toast 消息存储在一个数据库表中,并希望在所有 lambda 函数中获取这些 toast 消息。由于 lambda 函数独立工作,每当我需要所有 lambda 函数中的 toast 消息时,我都必须调用数据库查询获取,但这种方法对我来说看起来很耗时并且会减慢我的应用程序。有没有办法在单个查询调用中访问存储在表中的那些 toast 消息,而不是每次调用任何 lambda 函数时都调用数据库查询?
任何帮助深表感谢。提前致谢!
解决方案
init
您可以在Lambda 阶段获取这些消息。出于您的目的,您可以想象 Lambda 的生命周期有两个阶段:
init
- “运行时”(每个请求都调用它)
您需要做的是在该init
阶段加载这些消息,因为此代码在 Lambda“上线”之前只运行一次。
对于 NodeJS,它可能看起来像这样:
// This code will run only once, when the Lambda is initialized
const init = async () => {
const messages = await loadMessages();
// Perform any async calls here to fetch config data.
// We'll just dummy up a fake promise as a simulation.
return new Promise((resolve, reject) => {
console.log('fetching config data...');
resolve({ "messages": messages });
});
};
const initPromise = init();
exports.handler = async (event, context, callback) => {
// Code that runs on every request goes here...
const config = await initPromise;
console.log(config.messages)
};
来源:https ://serverlessfirst.com/fff-function-initialisation/
您可以在其中loadMessages()
查询 DynamoDB 并获取您的消息。
注意:您的 Lambda 将“存活”一段时间(大约 15 分钟)。这意味着,如果您更改 DynamoDB 中的消息,它们也需要一段时间才能“生效”。
推荐阅读
- python - matplotlib 中的烛台
- laravel - 如何通过 Postman 在 Laravel 中测试 Api?
- nas - 使用卓越 2 是否可以与个人 NAS 而不是卓越的云同步文件?
- c++ - 使用智能感知检测 C++ 中变量的赋值
- javascript - 在浏览器中使用 handlebars.js。如何?需要吗?常见的?AMD?通天塔?什么?
- javascript - Object.assign / 未定义的对象键
- javascript - Firebase 实时数据库无法正常工作
- reactjs - 测试按钮单击 ReactJS 上是否呈现另一个组件
- cmake - cmake 忽略了 fortran 定义的宏
- .net - .Net框架中的TextFile加密并能够在linux下解密