AWS Lambda函数

时间:2015-10-25 23:23:10

标签: aws-lambda

我有一个需要连接到远程TCP服务的AWS Lambda函数。将Lambda函数部署到AWS后,有没有办法使用远程服务的IP地址配置Lambda函数?或者我必须在部署之前将配置烘焙到打包的Lambda函数中?

4 个答案:

答案 0 :(得分:4)

我找到了一种方法,用于支持测试环境和可以帮助您的生产环境。

对于函数的测试版本,我将其称为TEST-ConnectToRemoteTcpService,对于函数的生产版本,我命名函数PRODUCTION-ConnectToRemoteTcpService。这允许我使用正则表达式提取环境名称。

然后我将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);
      }
    });
  });
};

答案 1 :(得分:4)

从2016年11月18日开始,AWS Lambda对环境变量的支持为added。向现有函数添加变量可以通过命令行完成,如下所示,也可以从AWS控制台完成。

aws lambda update-function-configuration \
    --function-name MyFunction \
    --environment Variables={REMOTE_SERVICE_IP=100.100.100.100}

可以找到文档here

答案 2 :(得分:1)

您可以通过SNS主题订阅调用Lambda函数,并让它自己从SNS事件内的有效负载进行配置。

以下是有关如何执行此操作的官方指南Invoking Lambda via SNS

答案 3 :(得分:0)

一些选项,具体取决于用例

  • 如果您的配置不会更改,那么您可以使用S3对象并从Lambda访问,或将Lambda设置为触发新的配置更改。 (虽然这是最便宜的方式,但与其他替代方案相比,你可以做的事情有限)
  • 如果配置不断变化,则DynamoDB - Key / value是另一种选择。
  • 如果DynamoDB对于频繁的读/写而言价格昂贵并且不值得,那么您可以将TCP服务后配置到SQS队列中。 (如果您想在服务发布新配置时触发,则为SNS)