首页 > 解决方案 > 在所有 lambda 函数中访问单个查询输出

问题描述

我在使用 lambda 函数的 nodejs 中有无服务器应用程序,我已将我的应用程序的所有 toast 消息存储在一个数据库表中,并希望在所有 lambda 函数中获取这些 toast 消息。由于 lambda 函数独立工作,每当我需要所有 lambda 函数中的 toast 消息时,我都必须调用数据库查询获取,但这种方法对我来说看起来很耗时并且会减慢我的应用程序。有没有办法在单个查询调用中访问存储在表中的那些 toast 消息,而不是每次调用任何 lambda 函数时都调用数据库查询?

任何帮助深表感谢。提前致谢!

标签: lambdaaws-lambda

解决方案


init您可以在Lambda 阶段获取这些消息。出于您的目的,您可以想象 Lambda 的生命周期有两个阶段:

  1. init
  2. “运行时”(每个请求都调用它)

您需要做的是在该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 中的消息,它们也需要一段时间才能“生效”。


推荐阅读