如果我有一组公共配置,就像许多Lambda函数使用的一组常量一样。有没有什么方法可以在一个地方共享它们之间的数据,这样我就可以轻松地修改这些值,而无需逐个更新内部每个lambda函数?
我可以将数据放到数据库中,但会为每个lambda请求引发一个额外的查询并运行得更慢。
答案 0 :(得分:3)
如果配置不经常变化,我会把它扔进S3并让每个lambda在启动时加载它。
如果它确实发生了很大变化,或者你想构建某种UI来更新设置,那么你可以去DB路线。如果你在lambda启动时加载配置 - 也就是在处理函数之外你只需要加载配置一次,只要lambda没有回到睡眠状态,所以惩罚可能不是那么陡峭
// this will only be loaded when the Lambda starts up
// keep in mind if you are loading from an external resource
// it will probably be async so your function should return a Promise
var config = someFunctionThatLoadsConfigFromS3();
// entry point for Lambda will be called for every event(api gateway request)
module.exports.handler = function(event, context) {
config.then(function(config) {
// do some stuff with config
context.done(null, 'return a value');
}).catch(....);
};
答案 1 :(得分:1)
在部署包中嵌入配置可提供性能,稳定性和一些成本节约
我正在使用的流程:
一些好处:
这是我在一年中大规模运行各种lambda函数的经验。无论如何,无需停机即可完成部署的挑战。
答案 2 :(得分:0)
您是否使用AWS cloudformation来配置这些lambdas?如果是这样,您可以将公共配置变量传递到主堆栈,将任何必要的项继承到子lambda堆栈中,并将它们添加为environment variables
直接向AWS Lambda添加环境变量可以降低存储成本和对AWS存储服务的不必要调用。
请参阅this文章,了解多个环境的实施情况
答案 3 :(得分:0)
您可以使用Lambda Layers在不同的lambda函数之间共享代码。然后,lambda中的代码将在/opt
文件夹中的每个函数中提供。