是否可以从 .ebextensions 配置文件中引用 PARAM1 / PARAM2 等容器环境属性。如果是这样,怎么做?我试过 $PARAM1 但它似乎是一个空值。
我想在启动时将主机名设置为包含 DEV、QA 或 PROD,我通过 PARAM1 环境变量将它们传递给我的容器。
commands:
01-set-correct-hostname:
command: hostname myappname{$PARAM1}.com
是否可以从 .ebextensions 配置文件中引用 PARAM1 / PARAM2 等容器环境属性。如果是这样,怎么做?我试过 $PARAM1 但它似乎是一个空值。
我想在启动时将主机名设置为包含 DEV、QA 或 PROD,我通过 PARAM1 环境变量将它们传递给我的容器。
commands:
01-set-correct-hostname:
command: hostname myappname{$PARAM1}.com
事实证明,您只能在该container_commands
部分执行此操作,而不能在该部分执行此操作commands
。
这有效:
container_commands:
01-set-correct-hostname:
command: "hostname myappname{$PARAM1}.com"
这对我有用。我尝试了接受的方法,但没有产生预期的结果(输出中包含大括号)。对上传到 Elastic Beanstalk 时从 .config 文件执行的命令进行故障排除也是一个挑战(或者我只是不知道该去哪里查看)。
AWS 环境:
Elastic Beanstalk 环境属性(配置 -> 软件配置 -> 环境属性):
部署工件的 .ebextensions 文件夹中包含的示例 .config 文件:
container_commands:
0_test-variable:
cwd: /tmp
command: "touch ${HELLO_VARIABLE}_0_.txt"
1_test-variable:
cwd: /tmp
command: "touch {$HELLO_VARIABLE}_1_.txt"
2_test-variable:
cwd: /tmp
command: "touch $HELLO_VARIABLE_2_.txt"
使用 Elastic Beanstalk 部署工件后,EC2 实例中的 /tmp 目录将包含以下文件(注意大括号和 $ 的位置):
为了使环境变量在命令阶段可用,我将它们解析为 bash 可源文件。
000001.envvars.config
...
commands:
000001_envvars_to_bash_source_file:
command: |
# source our elastic beanstalk environment variables
/opt/elasticbeanstalk/bin/get-config --output YAML environment|perl -ne "/^\w/ or next; s/: /=/; print qq|\$_|" > /var/tmp/envvars
chmod 400 /var/tmp/envvars
...
然后我使用: -
source /var/tmp/envvars
在随后的命令中。
接受的答案已经过时了。
现在您可以使用/opt/elasticbeanstalk/support/envvars
已经是可以获取的 shell 脚本的文件:
commands:
01_update_composer:
command: |
. /opt/elasticbeanstalk/support/envvars
/usr/bin/composer.phar self-update
container_commands:
01_run_composer:
command: |
composer.phar install --no-scripts --no-dev # already has user-specified env variables
更新:
经过一些更深入的调查后发现container_commands:
包括您的环境变量,但commands:
不包括。
该博客详细描述了有关如何实现此目的的各种选项。
https://www.onica.com/blog/how-to-call-and-export-variables-in-elastic-beanstalk/