簡體   English   中英

如何在 Amazon Elastic Beanstalk (Python) 中設置環境變量

[英]How to set an environment variable in Amazon Elastic Beanstalk (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')時無法訪問os.getenv('ProductionBucket')

我遇到了這個頁面,它似乎試圖記錄所有命名空間。 我也試過使用PARAM1作為選項名稱,但得到了類似的結果。

如何在 Amazon Elastic Beanstalk 中設置環境變量?

編輯
我還嘗試在所有其他只會導出環境變量的命令之前添加一個命令:

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

......這也沒有成功

我遇到了同樣的問題。

信不信由你,您必須在部署之前將.ebextensions目錄和所有*.config文件提交到版本控制,以便它們在服務器上顯示為環境變量。

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

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

然后在 AWS 管理面板中編輯配置(配置 > 軟件配置 > 環境屬性)並更新那里的值。

您可能還會發現此答案很有幫助。

我執行了以下操作以獲取我在非容器階段在 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())))'"

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

我已經使用現代(即非遺留)容器進行了檢查,並在 /opt/elasticbeanstalk/deploy/configuration/containerconfiguration 下找到了它作為 json 文件。

行為似乎是平台相關的:我特別記得在 PHP 中,它還創建了一些帶有值的 shell 腳本。

無論如何,請查看 /opt/elasticbeanstalk/hooks/configdeploy。

再次是 Java 案例,它運行這個 python 腳本,這對你來說看起來很方便:

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

要在本地運行中設置變量,您可以執行以下操作:

eb local setenv CONFIG=dev
eb local run

這也適用於 Docker MultiContainers,否則將看不到您的環境。

我知道這是一個老問題,但對於那些仍然有同樣問題的人來說,AWS 文檔中的解決方案是: https : //docs.aws.amazon.com/elasticbeanstalk/latest/dg/environments-cfg-softwaresettings .html

在 Elastic Beanstalk 控制台中配置環境屬性

  1. 打開Elastic Beanstalk 控制台,然后在區域下拉列表中選擇您的區域。

  2. 在導航窗格中,選擇Environments ,然后在列表中選擇您的環境名稱。

  3. 在導航窗格中,選擇配置

  4. 軟件配置類別中,選擇編輯。

  5. Environment properties 下,輸入鍵值對。

  6. 選擇應用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM