访问AWS Beanstalk ebextensions中的环境变量

时间:2015-04-02 22:35:34

标签: amazon-web-services elastic-beanstalk

我正在尝试访问我在AWS Beanstalk配置中定义的环境变量。我需要在.ebextensions 中的配置文件中,在配置文件中复制的文件中访问它。我尝试过以下方法:

container_commands:
  update_nginx_config:
    command: "cp .ebextensions/files/nginx/nginx.conf /etc/nginx/nginx.conf"

在我的nginx.conf文件中,我尝试访问$MYVAR${MYVAR}{$MYVAR},其中一些是here和{{3} (后者直接在配置文件中)。

files:
  "/etc/nginx/nginx.conf" :
    mode: "000644"
    owner: root
    group: root
    content: |
      $MYVAR ${MYVAR} {$MYVAR}

这也不起作用。在所有情况下,变量名称只是输出$MYVAR,因此Beanstalk无法识别我的变量。我在here关于container_commands

中找到了以下内容
  

他们还可以访问您的AWS等环境变量   安全凭证。

这很棒,但它没有说如何

如何使用ebextensions访问环境变量,无论是在配置文件本身内还是在单独复制的文件中?

提前谢谢!

4 个答案:

答案 0 :(得分:48)

我联系了亚马逊技术支持部门,回答了这个问题,以下是他们的答复:


  

不幸的是,变量在ebextensions中不可用   直。这样做的最佳选择是创建一个脚本   从这样的容器命令运行:

files:
  "/home/ec2-user/setup.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/bin/bash

      # Commands that will be run on container_commmands
      # Here the container variables will be visible as environment variables.

container_commands:
  set_up:
    command: /home/ec2-user/setup.sh

因此,如果您创建一个shell脚本并通过容器命令调用它,那么您将可以访问shell脚本中的环境变量,如下所示:$ENVIRONMENT_VARIABLE。我测试了这个,它确实有效。

如果您在以root身份运行脚本并且无法读取已配置的环境变量时遇到问题,请尝试将以下内容添加到脚本的顶部。

. /opt/elasticbeanstalk/support/envvars

根据您的使用情况,您可能需要稍微改变一下(至少我做过),但这是一个有效的解决方案。我希望这有助于某人!

答案 1 :(得分:6)

从此答案开始:https://stackoverflow.com/a/47817647/2246559

您可以使用此处描述的GetOptionSetting函数:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ebextensions-functions.html

例如,如果您设置了worker_processes变量,则它看起来可能像这样:

files:
  "/etc/nginx/nginx.conf" :
    mode: "000644"
    owner: root
    group: root
    content: |
      worker_processes `{"Fn::GetOptionSetting": {"Namespace": "aws:elasticbeanstalk:application:environment", "OptionName": "MYVAR"}}`;

请注意函数调用中的反引号''。

答案 2 :(得分:1)

如果您直接在容器命令中使用该值,则实例随附的get-config脚本可以提供帮助。

示例:

20_install_certs:
  command: |
    MY_VAR=$(/opt/elasticbeanstalk/bin/get-config environment -k MY_VAR)

答案 3 :(得分:0)

这是一个用例,仅用于调试目的。

您可以通过以下方式访问环境变量

$ /opt/elasticbeanstalk/bin/get-config environment

文档:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/custom-platforms-scripts.html

我认为仅适用于Linux环境!