如何强制重载lambda函数的全局变量?

问题描述 投票:1回答:1

我打算将我的lambda函数配置从环境变量移动到DynamoDb,因为我的lambda函数共享配置,而且每次配置更改时我都不想重新部署我的lambda函数(我的配置经常更改,一旦我们必须更改)重新部署这么多lambda函数)。

但是为了提高我的lambda函数的性能并降低成本,我不会在每次执行时加载配置。相反,我将配置加载到一个全局变量,因为全局变量在执行过程中持续存在(只要lambda函数预热)我可以重用相同的配置而无需访问DynamoDb。这是一个示例代码:

let config = null;
function getConfig() {
    if (config)
        return Promise.resolve(config);
    else {
        //Load config from DynamoDb and return it in form of a promise
    }
}

exports.handler = function(event, context, callback) {   
    getConfig()
        .then(config => {
            //Your code that makes use of config
        })
}

到目前为止一切都很好。现在,考虑使用新配置更新DynamoDb的时间。热身的lambda函数将继续使用旧的配置,然后由AWS关闭并面临冷启动。

我想要做的是发出lambda函数的信号并强制它们刷新它们的热量lambda函数,并在每次配置更改时重新开始。我知道我可以重新部署它们,这将完全符合我的要求。但这正是我从一开始就逃避的原因。那么,我的选择是什么?

amazon-web-services configuration aws-lambda cold-start
1个回答
1
投票

您可以使用node-cache来实现您想要做的事情。如果您的函数已预热,此库设置的值将保持不变,并在设置的TTL后过期。

用法很简单,它看起来像这样:

//try get from cache
cache.get(key, function(error, data) {
  if (error) {
    //handle error
  }
  if (!data) {
    //value not found in cache, so load values here
    //and then set using cache.set
    cache.set(key, data, TTL, function(error, success) {
      if (error) {
        //handle error
      }
      if (success) {
        //handle success
      }
    });
  }
  else {
    //value found in cache
  }
});

注意:确保在函数处理程序之外初始化节点缓存实例

© www.soinside.com 2019 - 2024. All rights reserved.