2015-04-02 66 views
22

我试图访问我在AWS Beanstalk配置中定义的环境变量。我需要在配置文件.ebextensions中的一个配置文件中访问该配置文件中的文件。我曾尝试以下:在AWS Beanstalk ebextensions中访问环境变量

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

而且在我nginx.conf文件,我曾经试图访问$MYVAR${MYVAR}{$MYVAR},其中一些建议herehere(后者一个配置文件中直接抵)。

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

这也行不通。在所有情况下,只输出变量名称,例如$MYVAR,所以Beanstalk无法识别我的变量。我发现下面的AWS documentationcontainer_commands

他们还可以使用环境变量,例如您的AWS 安全凭证。

这很棒,但它不会说如何

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

预先感谢您!

回答

35

我伸手到亚马逊的技术支持,为回答这个问题,这里是他们的答复:


不幸的是,变量没有直接ebextensions 可用。要做到这一点,最好的选择是通过创建然后 从容器的命令运行一个这样的脚本:

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

     # Commands that will be run on containter_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。我已经测试过这个,它工作。根据您的使用情况,您可能需要稍微改变一下方法(至少我是这样做的),但这是一个可行的解决方案。我希望这可以帮助别人!