【发布时间】:2016-10-08 03:29:42
【问题描述】:
我有一个 spring-boot 应用程序,我需要为其指定石墨服务器和端口(以发送指标)。为此,我必须安装和配置statsd。我使用ebextensions 文件来做到这一点。
commands:
01_nodejs_install:
command: sudo yum -y install nodejs npm --enablerepo=epel
ignoreErrors: true
02_mkdir_statsd:
command: mkdir /home/ec2-user/statsd
ignoreErrors: true
03_fetch_statsd:
command: git clone https://github.com/etsy/statsd.git /home/ec2-user/statsd
ignoreErrors: true
04_change_example_config:
command: "cat exampleConfig.js | sed 's/2003/<graphite-port>/g' | sed 's/graphite.example.com/<my-graphite-server>/g' > config.js"
cwd: /home/ec2-user/statsd
05_run_statsd:
command: setsid node stats.js config.js >/dev/null 2>&1 < /dev/null &
cwd: /home/ec2-user/statsd
这个配置的问题是我只能在这里为所有环境指定 1 个石墨服务器。
所以我决定将命令 04 和 05 移动到 container_commands。我正在考虑使用 beanstalk 控制台/UI 定义一个名为 ENV_NAME 的环境变量,并根据环境将其设置为 dev、qa 或 prod。然后我可以使用container_commands 的test 选项,仅针对基于此ENV_NAME 的特定环境运行04 和05 命令。
所以我的问题是 - 我如何使用 AWS 控制台来定义环境变量?我尝试使用 Beanstalk 控制台来定义我的变量,如文档 here 中所述,但它不起作用。我还 found(看到 5 个赞成的答案)这个方法只设置 JVM 属性而不是 ENV 变量。
我无法使用ebextensions 定义环境变量,因为那样我会遇到同样的问题 - 无法为不同的环境定义不同的环境变量 :)
所以我需要帮助:
- 使用 beanstalk UI 设置
ENV_NAME环境变量。
或者
- 建议使用
container_commands中的ENV_NAME系统属性来根据ENV_NAME的值判断是否运行命令。
如果您知道为不同环境指定不同 Graphite 服务器的更简单/更好的方法,请随时参与。
【问题讨论】:
标签: amazon-web-services environment-variables amazon-elastic-beanstalk ebextensions