Java 无法访问Lambda函数中的环境变量

Java 无法访问Lambda函数中的环境变量,java,amazon-web-services,aws-lambda,environment-variables,Java,Amazon Web Services,Aws Lambda,Environment Variables,我想从lambda函数中访问环境变量,但是我在实现这一点时遇到了问题 我使用serverless来管理lambda函数的创建和部署。在我的无服务器文件中的一个函数定义中,我定义了两个环境变量: 功能: 更新项目: 处理程序:。。。 环境: 函数名称:updateItemById 主题名称:${self:custom.topicName} 事件:。。。 在lambda函数中,我访问环境变量TOPIC\u NAME,如下所示: Optional topicName=Optional.of(Syst

我想从lambda函数中访问环境变量,但是我在实现这一点时遇到了问题

我使用serverless来管理lambda函数的创建和部署。在我的无服务器文件中的一个函数定义中,我定义了两个环境变量:

功能:
更新项目:
处理程序:。。。
环境:
函数名称:updateItemById
主题名称:${self:custom.topicName}
事件:。。。
在lambda函数中,我访问环境变量
TOPIC\u NAME
,如下所示:

Optional topicName=Optional.of(System.getenv(“TOPIC_NAME”));
由于
TOPIC\u NAME
环境变量不存在,因此每次执行lambda函数时,此代码都会引发异常。但是,我可以看到环境变量存在于:

  • serverless.yml文件
  • serverless生成的CloudFormation文件
  • AWS控制台中显示的CloudFormation文件
  • lambda功能如AWS控制台所示
在lambda函数中,我使用一个小循环打印出所有环境变量:

Map envVars=System.getenv();
对于(字符串s:envVars.keySet()){
System.out.println(s+“-”+envVars.get(s));
}
将显示
FUNCTION\u NAME
环境变量,但不显示
TOPIC\u NAME
变量。我尝试过重命名、添加和删除环境变量,但这个打印循环的输出没有任何更改。我已经多次重新部署了我的代码,无论有没有代码更改,配置文件更改,我都通过控制台手动添加了环境变量。我已经验证了lambda函数的最新版本正在运行。我所做的一切都不起作用

从行为来看,运行lambda函数的容器似乎从未刷新过,因此始终包含旧的环境变量。然而,这与我读到的所有内容以及我期望lambda容器如何工作背道而驰

${self:custom.topicName}
您需要确保在
serverless.yml
中配置了以下顶级引用:

。。。
供应商:aws
自定义:
主题名称:

这确实存在于我的无服务器文件中。无服务器成功生成环境变量;它位于CloudFormation文件中,并根据AWS控制台显示为存在于Lambda函数中。它只是不存在于lambda函数本身中。@Puffin-所以即使手动将变量添加到UI中也不会返回循环的输出?您能否将粘贴链接到完整的serverless.yml(敏感数据根据需要进行模糊处理)。