计划的 AWS Lambda 函数的运行时配置
Runtime Configuration for scheduled AWS Lambda function
我有一个 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,而且我看不到将配置添加到事件中的方法。
我找到了一个方法。对于函数的测试版本,我将其命名为 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);
}
});
});
};
我有一个 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,而且我看不到将配置添加到事件中的方法。
我找到了一个方法。对于函数的测试版本,我将其命名为 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);
}
});
});
};