提问者:小点点

在AWSBeanstek扩展中访问环境变量


我试图访问一个环境变量,我已经在AWSBeanstik配置中定义。我需要访问它在配置文件中的. ebExsionsions或文件,复制在配置文件中的位置。我已经尝试了以下方法:

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

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

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

这也不起作用。在所有情况下,变量名都只是输出,例如$MYVAR,所以豆茎无法识别我的变量。我在关于container_commands的AWS留档中找到了以下内容:

他们还可以访问环境变量,例如AWS安全凭据。

这是伟大的,但它没有说如何。

如何访问带有eb扩展名的环境变量,是在配置文件本身中还是在原地复制的单独文件中?

提前谢谢你!


共3个答案

匿名用户

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

不幸的是,这些变量不能直接在eb扩展中使用。最好的选择是创建一个脚本,然后从如下容器命令运行:

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

因此,如果您创建一个外壳脚本并通过容器命令调用它,那么您将可以访问外壳脚本中的环境变量,如下所示:$ENVIRONMENT_VARIABLE。我已经测试过了,它可以工作。

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

. /opt/elasticbeanstalk/support/envvars

根据您的用例,您可能需要稍微改变您的方法(至少我这样做了),但这是一个有效的解决方案。我希望这对某人有所帮助!

匿名用户

从这个答案:https://stackoverflow.com/a/47817647/2246559

您可以使用这里描述的GetOptionSsettings函数: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"}}`;

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

匿名用户

如果您直接在容器命令中使用该值,实例附带的get-config脚本会有所帮助。

示例:

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