我有一个需要连接到远程TCP服务的AWS Lambda函数。将Lambda函数部署到AWS后,有没有办法使用远程服务的IP地址配置Lambda函数?或者我必须在部署之前将配置烘焙到打包的Lambda函数中?
答案 0 :(得分:4)
我找到了一种方法,用于支持测试环境和可以帮助您的生产环境。
对于函数的测试版本,我将其称为TEST-ConnectToRemoteTcpService
,对于函数的生产版本,我命名函数PRODUCTION-ConnectToRemoteTcpService
。这允许我使用正则表达式提取环境名称。
然后我将config/test.json
和config/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)
一些选项,具体取决于用例