[英]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 腳本,這對你來說看起來很方便:
要在本地運行中設置變量,您可以執行以下操作:
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 控制台中配置環境屬性
打開Elastic Beanstalk 控制台,然后在區域下拉列表中選擇您的區域。
在導航窗格中,選擇Environments ,然后在列表中選擇您的環境名稱。
在導航窗格中,選擇配置。
在軟件配置類別中,選擇編輯。
在Environment properties 下,輸入鍵值對。
- 選擇應用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.