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

NT3*_*3RP 12 python environment-variables amazon-web-services amazon-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
Run Code Online (Sandbox Code Playgroud)

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

我遇到了这个页面似乎试图记录所有命名空间.我也尝试使用PARAM1作为选项名称,但有类似的结果.

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

编辑:
我还尝试在所有其他命令之前添加命令,这些命令只会导出一个环境变量:

commands:
 01_env_vars:
  command: "source scripts/env_vars"
Run Code Online (Sandbox Code Playgroud)

......这也不成功

idr*_*bst 17

我遇到了同样的问题.

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

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

option_settings:
  - option_name: API_LOGIN
    value: placeholder
  - option_name: TRANS_KEY
    value: placeholder
  - option_name: PROVIDER_ID
    value: placeholder
Run Code Online (Sandbox Code Playgroud)

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

/sf/answers/1014390611/


小智 5

我执行了以下操作以获取我在非容器阶段在 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())))"
Run Code Online (Sandbox Code Playgroud)

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

source /tmp/eb_env
Run Code Online (Sandbox Code Playgroud)

例子

source /tmp/eb_env && echo $MY_CUSTOM_ENV
Run Code Online (Sandbox Code Playgroud)

在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())))'"
Run Code Online (Sandbox Code Playgroud)


小智 5

选项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.


ald*_*eal 2

我已经检查过使用现代(即非遗留)容器,并在 /opt/elasticbeanstalk/deploy/configuration/containerconfiguration 下发现它作为 json 文件。

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

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

又是 Java 的情况,它运行这个 python 脚本,这对你来说看起来很方便:

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