【发布时间】:2020-12-02 12:30:00
【问题描述】:
我想从我的 lambda 函数中访问环境变量,但是我在完成此操作时遇到了问题。
我使用无服务器来管理我的 lambda 函数的创建和部署。在我的无服务器文件中的一个函数定义中,我定义了 2 个环境变量:
functions:
update-item:
handler: ...
environment:
FUNCTION_NAME: updateItemById
TOPIC_NAME: ${self:custom.topicName}
events: ...
在我的 lambda 函数中,我访问环境变量 TOPIC_NAME,如下所示:
Optional<String> topicName = Optional.of(System.getenv("TOPIC_NAME"));
此代码每次执行 lambda 函数时都会引发异常,因为 TOPIC_NAME 环境变量不存在。但是,我可以看到环境变量存在于:
- serverless.yml 文件
- 无服务器生成的 CloudFormation 文件
- AWS 控制台中显示的 CloudFormation 文件
- AWS 控制台中显示的 lambda 函数
在 lambda 函数中,我使用一个小循环打印出所有环境变量:
Map<String, String> envVars = System.getenv();
for (String s : envVars.keySet()) {
System.out.println(s + " - " + envVars.get(s));
}
会显示FUNCTION_NAME 环境变量,但不会显示TOPIC_NAME 变量。我已经尝试重命名、添加和删除环境变量,并且此打印循环的输出没有变化。我已经多次重新部署我的代码,无论是否更改代码,更改配置文件,我已经通过控制台手动添加了环境变量。我已经验证了最新版本的 lambda 函数正在运行。我所做的一切都没有奏效。
根据行为,运行 lambda 函数的容器似乎永远不会被刷新,因此总是包含旧的环境变量。然而,这与我读过的所有内容以及我期望 lambda 容器的工作方式背道而驰。
【问题讨论】:
标签: java amazon-web-services aws-lambda environment-variables