首页 > 解决方案 > 无法访问 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环境变量不存在。但是,我可以看到环境变量存在于:

在 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 容器的工作方式背道而驰。

标签: javaamazon-web-servicesaws-lambdaenvironment-variables

解决方案


${self:custom.topicName}

您需要确保在您的 中配置了以下顶级参考serverless.yml

...
provider: aws
custom:
  topicName: <some-topic-name>

推荐阅读