java - 无法访问 Lambda 函数中的环境变量
问题描述
我想从我的 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 容器的工作方式背道而驰。
解决方案
${self:custom.topicName}
您需要确保在您的 中配置了以下顶级参考serverless.yml
:
...
provider: aws
custom:
topicName: <some-topic-name>
推荐阅读
- python - 如何在 Python 中操作 FQDN 变量?
- xaml - CollectionView 中的对象绑定无法与 SwipeItem 一起正常工作
- firebase - 如何删除 Google Cloud Firestore 中项目的所有集合?
- winapi - RegCreateKeyExW 不创建密钥
- python - 使用 PySide 在灵活的网格布局中布局 QPushButton
- html - 引用本地字体
- php - 将图像大小添加到 WP 定制器生成的图像?
- python - 我对 functools.reduce() 内置函数有疑问
- r - 用许多具有相同结构的csv替换一个数据帧中的值 - R
- php - 使用准备好的语句登录不起作用 PHP