【问题标题】:How to set an environment variable in Amazon Elastic Beanstalk (Python)如何在 Amazon Elastic Beanstalk (Python) 中设置环境变量
【发布时间】:2012-12-21 19:41:24
【问题描述】:

我最近一直在开发一个 Django 应用程序,试图让它与 Amazon Elastic Beanstalk 一起工作。

在我的.ebextensions/python.config 文件中,我设置了以下内容:

option_settings:
  - namespace: aws:elasticbeanstalk:application:environment
    option_name:  ProductionBucket
    value: s3-bucket-name
  - namespace: aws:elasticbeanstalk:application:environment
    option_name:  ProductionCache
    value:  memcached-server.site.com:11211

但是,每当我查看服务器时,都没有设置此类环境变量(因此,当我尝试 os.getenv('ProductionBucket') 时无法访问

我遇到了这个this page,它似乎试图记录所有的命名空间。我也尝试使用PARAM1 作为选项名称,但结果相似。

如何在 Amazon Elastic Beanstalk 中设置环境变量?

编辑
我还尝试在所有其他仅导出环境变量的命令之前添加一个命令:

commands:
 01_env_vars:
  command: "source scripts/env_vars"

...这也失败了

【问题讨论】:

  • 也许 PARAM1 等用于此?不过,这似乎是一个很大的限制。 stackoverflow.com/questions/11211007/…
  • 这可能也有帮助 - grigory.ca/2012/09/…
  • 您是否尝试过使用aws:elasticbeanstalk:application:environment:varname
  • 我已经尝试了这些方法,同样没有成功:S
  • 我将在本周晚些时候在 AWS EB 上工作时尝试一下,我会告诉你我的进展情况。

标签: python amazon-web-services environment-variables amazon-elastic-beanstalk


【解决方案1】:

我使用现代(即非传统)容器进行了检查,并在 /opt/elasticbeanstalk/deploy/configuration/containerconfiguration 下找到它作为 json 文件。

行为似乎是平台相关的:我记得特别是在 PHP 中,它还创建了一些带有值的 shell 脚本。

无论如何,请查看 /opt/elasticbeanstalk/hooks/configdeploy。

Java 案例,它运行这个 python 脚本,对你来说看起来很方便:

https://gist.github.com/19c1e4b718f9a70a4ce1

【讨论】:

  • 虽然这肯定会阐明如何设置环境变量,但我希望可能有一些关于通过配置文件执行此操作的信息。
  • 查看/hooks/configdeploy 文件夹内容。每当您设置环境设置(包括配置)时,都会运行此文件。您必须登录并查看基于 python 的环境,因为它是一个不同的野兽
【解决方案2】:

我遇到了同样的问题。

信不信由你,您必须在部署之前将.ebextensions 目录和所有*.config 文件提交到版本控制,以便它们在服务器上显示为环境变量。

为了使敏感信息不受版本控制,您可以使用如下配置文件:

option_settings:
  - option_name: API_LOGIN
    value: placeholder
  - option_name: TRANS_KEY
    value: placeholder
  - option_name: PROVIDER_ID
    value: placeholder

然后在 AWS 管理面板中编辑配置(配置 > 软件配置 > 环境属性)并更新那里的值。

您可能还会发现this answer 很有帮助。

【讨论】:

【解决方案3】:

我还做了以下操作以获取我在非容器阶段在 cloudformation 中配置的环境变量,例如常规命令

/opt/elasticbeanstalk/bin/get-config environment | python -c "import json,sys; obj=json.load(sys.stdin); f = open('/tmp/eb_env', 'w'); f.write('\n'.join(map(lambda x: 'export ' + x[0] + '=' + x[1], obj.iteritems())))"

执行此命令后,您将在 /tmp/eb_env 中拥有一个包含所有环境变量的文件。只需在需要环境变量的命令之前执行以下命令

source /tmp/eb_env

例子

source /tmp/eb_env && echo $MY_CUSTOM_ENV

在弹性豆茎的配置文件中是这样的:

commands:
    02-make-sure-we-can-get-our-env-in-the-instance-itself:
        command: "/opt/elasticbeanstalk/bin/get-config environment | python -c 'import json,sys; obj=json.load(sys.stdin); f = open(\'/tmp/eb_env\', \'w\'); f.write(\'\n\'.join(map(lambda x: \'export \' + x[0] + \'=\' + x[1], obj.iteritems())))'"

【讨论】:

    【解决方案4】:

    选项 1:

    您可以使用eb setenv FOO=bar设置环境变量

    可以使用eb printenv查看环境变量

    选项 2:

    您可以在 .ebextensions 目录中创建一个配置文件,例如 00_environment.config。然后,像这样添加环境变量:

    option_settings: - option_name: MY_FIRST_ENV_VAR value: abc - option_name: ANOTHER_ENV_VAR value: 123

    但是,如果您有多个环境,我发现使用选项#1 直接设置环境变量更有用。

    我还发现eb config 命令很有帮助:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb3-config.html

    这些命令允许您获取、放置、列出或删除您的 eb 环境中的配置文件。

    命令eb config get 会将您的配置(包括环境变量)保存到.elasticbeanstalk/saved_configs 的本地文件中。

    【讨论】:

    • eb deploy 如何知道使用 00_environment.config 而不是 01_environment.config?
    • @Learner 它按字母顺序加载所有.ebextensions/*.config 文件。见the documentationConfiguration files are executed in alphabetical order. For example, .ebextensions/01run.config is executed before .ebextensions/02do.config.
    【解决方案5】:

    要在本地运行中设置变量,您可以执行以下操作:

    eb local setenv CONFIG=dev
    eb local run
    

    这也适用于 Docker MultiContainers,否则将无法看到您的环境。

    【讨论】:

      【解决方案6】:

      我知道这是一个老问题,但对于那些仍然像我一样有同样问题的人来说,AWS 文档中的解决方案是:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/environments-cfg-softwaresettings.html

      在 Elastic Beanstalk 控制台中配置环境属性

      1. 打开Elastic Beanstalk console,然后在区域下拉菜单中 列表,选择您所在的地区。

      2. 在导航窗格中,选择 Environments,然后选择您的 列表中的环境名称。

      3. 在导航窗格中,选择配置

      4. 软件配置类别中,选择编辑。

      5. 环境属性下,输入键值对。

      6. 选择应用

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-03
        • 2016-12-10
        • 2021-04-08
        • 2019-07-06
        • 2016-10-03
        • 2020-02-05
        • 2020-11-09
        • 2017-07-24
        相关资源
        最近更新 更多