如何解决无法访问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>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。