如何在Amazon Elastic Beanstalk(Python)中设置环境变量

时间:2013-01-08 01:04:50

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

我最近一直在研究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"

......这也不成功

6 个答案:

答案 0 :(得分:15)

我遇到了同样的问题。

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

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

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

然后编辑AWS管理面板(环境详细信息 - >编辑配置 - >容器)并更新其中的值

https://stackoverflow.com/a/14491294/274695

答案 1 :(得分: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中的本地文件中。

答案 2 :(得分: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

在弹性beanstalk的配置文件中,它看起来像这样:

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())))'"

答案 3 :(得分:1)

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

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

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

Java案例,它运行这个python脚本,对你来说非常方便:

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

答案 4 :(得分:1)

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

eb local setenv CONFIG=dev
eb local run

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

答案 5 :(得分:1)

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

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

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

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

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

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

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

  6. 选择应用