我有一个AWS Lambda函数,计划每小时运行一次(如http://docs.aws.amazon.com/lambda/latest/dg/getting-started-scheduled-events.html所述)。
函数ftps来自数据提供程序的文件并将它们复制到S3。
我有一个测试环境和一个生产环境。对于每个环境,ftp地址和凭据都不同。
如何配置lambda函数以便它能够了解它运行的环境,并相应地获取ftp配置?
PS:我知道这个问题:runtime configuration for AWS Lambda function,但它没有帮助我,因为我使用2015年10月8日推出的新的预定lambda函数功能使用预定的lamdba,我看不出办法配置到事件中。答案 0 :(得分:1)
TEST-CopyFtpFilesToS3
,对于函数的生产版本,我命名函数PRODUCTION-CopyFtpFilesToS3
。这允许我使用正则表达式提取环境名称。
然后我将config/test.json
和config/production.json
存储在我上传的zip文件中作为该函数的代码。当函数运行时,此zip文件将被解压缩到目录process.env.LAMBDA_TASK_ROOT
中。所以我可以加载该文件并获得我需要的配置。
有些人不喜欢将配置存储在代码zip文件中,这很好 - 您只需从S3加载文件或使用您喜欢的任何策略。
从zip中读取文件的代码:
const readConfiguration = () => {
return new Promise((resolve, reject) => {
let environment = /^(.*?)-.*/.exec(process.env.AWS_LAMBDA_FUNCTION_NAME)[1].toLowerCase();
console.log(`environment is ${environment}`);
fs.readFile(`${process.env.LAMBDA_TASK_ROOT}/config/${environment}.json`, 'utf8', function (err,data) {
if (err) {
reject(err);
} else {
var config = JSON.parse(data);
console.log(`configuration is ${data}`);
resolve(config);
}
});
});
};