gpt4 book ai didi

amazon-web-services - 如何强制重新加载 lambda 函数的全局变量?

转载 作者:行者123 更新时间:2023-12-04 08:06:25 25 4
gpt4 key购买 nike

我计划将我的 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 函数,并在每次配置更改时重新开始。我知道我可以重新部署它们,这将完全符合我的要求。但这正是我首先要逃避的。那么,我有哪些选择?

最佳答案

您可以使用 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
}
});

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

关于amazon-web-services - 如何强制重新加载 lambda 函数的全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55244420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com