Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Aws lambda AWS Lambda函数的运行时配置_Aws Lambda - Fatal编程技术网

Aws lambda AWS Lambda函数的运行时配置

Aws lambda AWS Lambda函数的运行时配置,aws-lambda,Aws Lambda,我有一个AWS Lambda函数,需要连接到远程TCP服务。在Lambda功能部署到AWS后,是否有任何方法可以使用远程服务的IP地址配置Lambda功能?或者,在部署之前,我必须将配置烘焙到打包的Lambda函数中吗?您可以通过SNS主题订阅调用Lambda函数,并让它从SNS事件中的有效负载进行自我配置 这是关于如何做到这一点的官方指南。我找到了一种支持测试环境和生产环境的方法,可以帮助您 对于函数的测试版本,我将其命名为testconnecttoremotecpservice,对于函数的生

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

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


这是关于如何做到这一点的官方指南。

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

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

然后我将
config/test.json
config/production.json
存储在zip文件中,作为函数的代码上传。当函数运行时,此zip文件将被解压缩到目录
process.env.LAMBDA\u TASK\u 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);
      }
    });
  });
};

一些选项,取决于用例

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

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

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

可以找到文档。

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