37

是否可以从 .ebextensions 配置文件中引用 PARAM1 / PARAM2 等容器环境属性。如果是这样,怎么做?我试过 $PARAM1 但它似乎是一个空值。

我想在启动时将主机名设置为包含 DEV、QA 或 PROD,我通过 PARAM1 环境变量将它们传递给我的容器。

commands:
  01-set-correct-hostname:
    command: hostname myappname{$PARAM1}.com
4

5 回答 5

28

事实证明,您只能在该container_commands部分执行此操作,而不能在该部分执行此操作commands

这有效:

container_commands:
  01-set-correct-hostname:
    command: "hostname myappname{$PARAM1}.com"

有关更多详细信息,请参阅http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html#customize-containers-format-container_commands

于 2013-05-17T21:07:43.027 回答
11

这对我有用。我尝试了接受的方法,但没有产生预期的结果(输出中包含大括号)。对上传到 Elastic Beanstalk 时从 .config 文件执行的命令进行故障排除也是一个挑战(或者我只是不知道该去哪里查看)。

AWS 环境:

  • 类型 - 弹力豆茎
  • 平台 - 运行 PHP 5.6 的 64 位 Amazon Linux 2015.09 v2.0.4

Elastic Beanstalk 环境属性(配置 -> 软件配置 -> 环境属性):

  • 属性名称 - HELLO_VARIABLE
  • 属性值 - 测试

部署工件的 .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 目录将包含以下文件(注意大括号和 $ 的位置):

  • 触摸 ${HELLO_VARIABLE}_0_.txt创建/tmp/test_0_.txt
  • 触摸 {$HELLO_VARIABLE}_1_.txt创建/tmp/{test}_1_.txt
  • touch $HELLO_VARIABLE_2_.txt创建/tmp/.txt
于 2015-11-11T21:15:39.990 回答
8

为了使环境变量在命令阶段可用,我将它们解析为 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

在随后的命令中。

于 2016-11-15T10:18:23.210 回答
7

接受的答案已经过时了。

现在您可以使用/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:不包括。

于 2017-03-20T10:50:30.793 回答
1

该博客详细描述了有关如何实现此目的的各种选项。

https://www.onica.com/blog/how-to-call-and-export-variables-in-elastic-beanstalk/

于 2017-12-15T10:35:21.390 回答