Amazon web services 我可以在内存中使用故事配置并在AWS Lambda中使用它吗

Amazon web services 我可以在内存中使用故事配置并在AWS Lambda中使用它吗,amazon-web-services,aws-lambda,Amazon Web Services,Aws Lambda,我有lambda函数,它监听dynamo流并处理dynamo中任何更新或插入的记录 目前,这个lambda代码有一个变量列表,我想将其转换为配置,因为这个列表可以更改 所以我想让我的lambda函数从配置中读取这个列表,但我不想要任何网络调用,所以我不能每次都调用s3/dynamo。我希望这个配置存储在本地内存中 我想初始化lambda,在这个初始化中,从表中读取这个配置,并将它存储在某个变量中,并在每次调用中使用它 我可以这样做吗?不,你不能。Lambda是无状态的-您不能指望在一次调用中读入

我有lambda函数,它监听dynamo流并处理dynamo中任何更新或插入的记录

目前,这个lambda代码有一个变量列表,我想将其转换为配置,因为这个列表可以更改

所以我想让我的lambda函数从配置中读取这个列表,但我不想要任何网络调用,所以我不能每次都调用s3/dynamo。我希望这个配置存储在本地内存中

我想初始化lambda,在这个初始化中,从表中读取这个配置,并将它存储在某个变量中,并在每次调用中使用它


我可以这样做吗?

不,你不能。Lambda是无状态的-您不能指望在一次调用中读入内存的任何内容在下一次调用中可用。您需要将配置信息存储在某个位置,并在每次读取时将其读回。

我让lambda函数(nodejs)从yaml文件读取静态配置文件。您可以根据需要对json文件执行同样的操作。该应用程序还可以在运行时从S3读取动态数据,注意这不是您想要做的

这意味着我能够将变量作为硬编码的值从代码中移出,并拥有一个单独的配置文件,您可以使用CI工具或类似工具在每个环境中更改预部署。这还意味着您可以在需要时从版本控制中排除配置

唯一的缺点是,在部署配置时,配置必须与lamda函数一起上载,因此在运行时其他lambda资产都可以使用它。抱歉,在运行时不能写回配置

您可以在文件夹中看到我有一个
config.yml
。每次实例化lambda时,我都使用nodejs模块将配置文件加载到内存中。它也不需要任何网络呼叫

在配置文件中,我有我需要的所有参数:

处理程序运行时配置集 违约: 资料来源:http://www.sourcerss.com/rss.php?key=abcd1234 bucket:myappbucket 地区:美国东部1 dataKey:data/rssdata dataOutKey:data/rssdata rssKey:myrss.xml 我在运行时加载配置,然后可以通过键名引用代码中的任何配置项。我只是碰巧用它来做s3操作,你可以做任何事情

const yaml_config=require(“节点yaml config”);
const config=yaml_config.load(uu dirname+“/config.yml”);
const aws=要求(“aws sdk”);
const bbpromise=require(“蓝鸟”);
consts3=bbpromisefyall(新的aws.s3({}));
变量参数={
Bucket:config.Bucket,
Key:config.dataOutKey,
正文:JSON.stringify(feed.entries),
ContentType:“应用程序/json”
};
s3.putObjectAsync(params).catch(语法错误,函数(e){
日志(“错误:”,e);
}).catch(函数(e){
日志(Catch:,e);
});
这使得为lambda处理程序添加新配置变得非常容易,因为我添加到
config.yml
的任何内容,例如
myNewVariable
现在都可以在处理程序中作为
config.myNewVariable
引用,而无需任何新工作


它允许配置根据环境进行更改,或在每次部署之前进行更改。然后在处理程序之前加载配置,并在lambda执行期间本地存储在内存中。

使用elasticache服务在lambda外部存储(在DynamoDB或其他地方)将是最好的,但如果配置很小,也可以将其存储为lambda函数的环境变量。每当配置发生变化时,只需更新这些环境变量,这样Lambda就会始终使用最新的配置执行,而不需要读取任何内容。如果你认为这是答案,请随意将其标记为答案。