8

我最近一直在研究Django应用程序,试图让它与Amazon Elastic Beanstalk配合使用。如何在Amazon Elastic Beanstalk(Python)中设置环境变量

在我.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" 

...这也是不成功的

+0

也许PARAM1等的人用于这个?看起来像一个很大的限制,虽然。 http://stackoverflow.com/questions/11211007/how-do-you-pass-environment-variable-on-amazon-elastic-beanstalk-php –

+0

这可能也有帮助 - http://grigory.ca/2012/09 /开始 - 与 - Django上的aws弹性beanstalk/ –

+0

你尝试过使用'aws:elasticbeanstalk:application:environment:varname'? –

回答

1

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

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

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

Java的情况下,运行此python脚本,它看起来相当得心应手,为您:

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

+1

虽然这对于如何设置环境变量有一定的启示,但我希望可以通过配置文件来做到这一点。 – NT3RP

+0

查看'''/ hooks/configdeploy'''文件夹的内容。无论何时设置环境设置(包括配置),都会运行此文件。您必须登录并查看您的基于python的环境,因为它是一个不同的野兽 – aldrinleal

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

+0

你是一个救命的人 –

+0

@idrinkpabst afaik,.ebextensions可以被版本控制忽略(如果你有任何敏感信息配置文件),如果您使用.ebignore文件进行部署。见https://forums.aws.amazon.com/message.jspa?messageID = 621059#621059 – arturomp

2

我做了以下也得到我的环境变量,我在非容器相配置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())))'" 
2

选项1 :

您可以设置envi

您可以创建一个在您.ebextensions目录中的配置文件,例如00_environment.config:使用eb setenv FOO=bar

可以使用eb printenv

选项2查看环境变量ronment变量。然后,添加你的环境变量是这样的:

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中的本地文件中。

+0

eb deploy如何知道使用00_environment.config而不是01_environment.config? – Learner

+0

@Learner按字母顺序加载所有'.ebextensions/*。config'文件。请参阅[文档](http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/command-options.html#configuration-options-precedence):'配置文件按字母顺序执行。例如,.ebextensions/01run.config在.ebextensions/02do.config之前执行。 – Brandon

0

设置变量在本地运行,你可以做到以下几点:

eb local setenv CONFIG=dev 
eb local run 

这也适用于码头工人MultiContainers,否则将无法看到您的环境。

相关问题