【问题标题】:Accessing environment variables in AWS Beanstalk ebextensions在 AWS Beanstalk ebextensions 中访问环境变量
【发布时间】:2023-03-26 12:34:01
【问题描述】:

我正在尝试访问我在 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 documentation 中找到了关于container_commands 的以下内容:

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

这很好,但没有说明如何

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

提前谢谢你!

【问题讨论】:

    标签: amazon-web-services amazon-elastic-beanstalk


    【解决方案1】:

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


    不幸的是,这些变量在 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
    

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

    【讨论】:

      【解决方案2】:

      来自这个答案: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"}}`;
      

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

      【讨论】:

      • 这应该是公认的答案。这行得通。如果 YAML 格式出现问题,您可能需要将反引号括起来。富:'`{...}`'
      【解决方案3】:

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

      例子:

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

      【讨论】:

        【解决方案4】:

        这是一个有点不同的用例,仅用于调试目的。

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

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

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

        我认为只适用于 Linux 环境!

        【讨论】:

          猜你喜欢
          • 2017-07-21
          • 1970-01-01
          • 2019-12-21
          • 2015-08-05
          • 2017-05-06
          • 2023-03-26
          • 2016-12-10
          • 2018-04-27
          • 2018-10-19
          相关资源
          最近更新 更多