【发布时间】:2018-05-12 06:14:59
【问题描述】:
使用 RDS 创建 Java 8 Elastic Beanstalk 实例后,RDS 连接详细信息不作为环境变量可见(它们在其他正在运行的实例上可见)。
运行printenv 命令后,期望这些值可用,但它们不可用。
RDS_HOSTNAME=foo.com
RDS_USERNAME=foo
RDS_PASS=bar
这些是服务器配置所必需的
database:
driverClass: com.mysql.jdbc.Driver
user: ${RDS_USERNAME}
password: ${RDS_PASSWORD}
url: jdbc:mysql://${RDS_HOSTNAME}/${RDS_DB_NAME}
在应用程序触发期间它们不可用,日志显示 Java 异常,它无法找到环境变量。
io.dropwizard.configuration.UndefinedEnvironmentVariableException:未定义环境变量“RDS_USERNAME”;无法替换表达式“${RDS_USERNAME}”。 在 io.dropwizard.configuration.EnvironmentVariableLookup.lookup(EnvironmentVariableLookup.java:41) 在 org.apache.commons.lang3.text.StrSubstitutor.resolveVariable(StrSubstitutor.java:934) 在 org.apache.commons.lang3.text.StrSubstitutor.substitute(StrSubstitutor.java:855) 在 org.apache.commons.lang3.text.StrSubstitutor.substitute(StrSubstitutor.java:743) 在 org.apache.commons.lang3.text.StrSubstitutor.replace(StrSubstitutor.java:403) 在 io.dropwizard.configuration.SubstitutingSourceProvider.open(SubstitutingSourceProvider.java:39) 在 io.dropwizard.configuration.BaseConfigurationFactory.build(BaseConfigurationFactory.java:83) 在 io.dropwizard.cli.ConfiguredCommand.parseConfiguration(ConfiguredCommand.java:124) 在 io.dropwizard.cli.ConfiguredCommand.run(ConfiguredCommand.java:72) 在 io.dropwizard.cli.Cli.run(Cli.java:75) 在 io.dropwizard.Application.run(Application.java:93)
但是,如果我在 ec2 实例上运行以下命令
sudo /opt/elasticbeanstalk/bin/get-config environment
它以 JSON 格式打印出值:
{"CONFIG":"dev.yml","RDS_HOSTNAME":"foo.com","RDS_PASSWORD":"foo","M2":"/usr/local/apache-maven/bin","M2_HOME":"/usr/local/apache-maven","RDS_DB_NAME":"foo","JAVA_HOME":"/usr/lib/jvm/java","RDS_USERNAME":"foo","GRADLE_HOME":"/usr/local/gradle","RDS_PORT":"3306"}
任何想法如何为 ec2 用户恢复这些值?
我试过了:
- 重启 EB 实例
- 重建实例
-
cat将值放入脚本中,在eb deploy之后设置它们
任何想法,为什么它们在这个特定实例上不可见?
实例详情
Environment details foo: foo-service
Application name: foo-service
Region: eu-west-2
Platform: arn:aws:elasticbeanstalk:eu-west-2::platform/Java 8 running on 64bit Amazon Linux/2.6.0
Tier: WebServer-Standard
【问题讨论】:
-
你可以尝试在 /etc/environment 中初始化它们吗?当我需要确定环境变量存在时,我会确保将其添加到那里。所有用户 shell 都会以这种方式设置该变量。
标签: amazon-web-services amazon-ec2 environment-variables amazon-elastic-beanstalk