我有一个AWS函数,计划每小时运行一次(如这里所描述的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,而且我看不到将配置引入到事件中的方法。
发布于 2015-11-02 11:13:30
我找到了办法。对于该函数的测试版本,我将其命名为TEST-CopyFtpFilesToS3
,对于函数的生产版本,我将其命名为PRODUCTION-CopyFtpFilesToS3
。这允许我使用正则表达式提取环境名称。
然后,我将config/test.json
和config/production.json
存储在我上传的压缩文件中,作为函数的代码。当函数运行时,这个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);
}
});
});
};
https://stackoverflow.com/questions/33431699
复制相似问题