Aws lambda AWS Lambda函数的运行时配置
我有一个AWS Lambda函数,需要连接到远程TCP服务。在Lambda功能部署到AWS后,是否有任何方法可以使用远程服务的IP地址配置Lambda功能?或者,在部署之前,我必须将配置烘焙到打包的Lambda函数中吗?您可以通过SNS主题订阅调用Lambda函数,并让它从SNS事件中的有效负载进行自我配置Aws lambda AWS Lambda函数的运行时配置,aws-lambda,Aws Lambda,我有一个AWS Lambda函数,需要连接到远程TCP服务。在Lambda功能部署到AWS后,是否有任何方法可以使用远程服务的IP地址配置Lambda功能?或者,在部署之前,我必须将配置烘焙到打包的Lambda函数中吗?您可以通过SNS主题订阅调用Lambda函数,并让它从SNS事件中的有效负载进行自我配置 这是关于如何做到这一点的官方指南。我找到了一种支持测试环境和生产环境的方法,可以帮助您 对于函数的测试版本,我将其命名为testconnecttoremotecpservice,对于函数的生
这是关于如何做到这一点的官方指南。我找到了一种支持测试环境和生产环境的方法,可以帮助您 对于函数的测试版本,我将其命名为
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)
aws lambda update-function-configuration \
--function-name MyFunction \
--environment Variables={REMOTE_SERVICE_IP=100.100.100.100}
可以找到文档。可能有很多方法可以做到这一点。例如,可以让Lambda函数从DynamoDB表中读取配置。或者你可以让它听一个SNS主题,并从发布到该主题的消息中获取IP地址。也可以从S3存储桶中读取配置文件。