计划的AWS Lambda函数的运行时配置

时间:2015-10-30 08:37:29

标签: aws-lambda

我有一个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,我看不出办法配置到事件中。

1 个答案:

答案 0 :(得分:1)

我发现了一种方法。对于函数的测试版本,我称之为TEST-CopyFtpFilesToS3,对于函数的生产版本,我命名函数PRODUCTION-CopyFtpFilesToS3。这允许我使用正则表达式提取环境名称。

然后我将config/test.jsonconfig/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);
      }
    });
  });
};