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

2024-04-29 11:34:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近一直在开发一个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"

。。。这也不成功


Tags: name命令envawsamazonenvironmentapplicationvalue
3条回答

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

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

不管怎样,请查看/opt/elasticbeanstalk/hooks/configdeploy。

同样,它运行这个python脚本,这看起来非常方便:

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

我也有同样的问题。

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

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

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

然后在AWS管理面板(configuration>;Software configuration>;Environment Properties)中编辑配置并更新其中的值。

你也会发现this answer很有帮助。

我还执行了以下操作以获取在非容器阶段的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

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

相关问题 更多 >