【问题标题】:runtime configuration for AWS Lambda functionAWS Lambda 函数的运行时配置
【发布时间】:2016-11-25 00:28:52
【问题描述】:

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

【问题讨论】:

  • 可能有很多方法可以做到这一点。例如,您可以让 Lambda 函数从 DynamoDB 表中读取配置。或者您可以让它监听一个 SNS 主题并从发布到该主题的消息中获取 IP 地址。或者您可以从 S3 存储桶中读取配置文件。

标签: aws-lambda


【解决方案1】:

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

对于函数的测试版本,我将其命名为 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);
      }
    });
  });
};

【讨论】:

    【解决方案2】:

    从 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找到。

    【讨论】:

      【解决方案3】:

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

      这是关于如何做到这一点的官方指南Invoking Lambda via SNS

      【讨论】:

        【解决方案4】:

        几个选项,取决于用例

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-11-10
          • 2016-09-22
          • 2020-01-04
          • 1970-01-01
          • 2018-04-23
          • 2021-12-03
          • 1970-01-01
          相关资源
          最近更新 更多