我想使用 AWS Elastic Beanstalk 執行個體 Shell 中的環境變數。
簡短描述
在 Elastic Beanstalk 中,環境變數不會向作業系統公開。
若要在環境變數設定為 Elastic Beanstalk 環境變數時,搭配作業系統的環境變數使用公用程式,您必須使用可將環境變數匯出為作業系統變數的 .ebextension。
以下解決方案顯示如何執行此操作:
-
使用 get-config utility 讀取 Elastic Beanstalk 環境變數。
-
使用 jq utility(來自 jq 網站)將 get-config 輸出從 JSON 轉換為 Shell 變數。
-
將變數儲存在 /etc/profile.d/sh.local 檔案中。Bash 會讀取此檔案以將變數匯出至作業系統。
解決方案
- 在應用程式來源套件組合中建立一個 .ebextension 檔案,並包含以下內容:
commands:
setvars:
command: /opt/elasticbeanstalk/bin/get-config environment | jq -r 'to_entries | .[] | "export \(.key)=\"\(.value)\""' > /etc/profile.d/sh.local
packages:
yum:
jq: []
**注意:**步驟 1 中的組態檔案名稱為 setvars.config。
-
儲存 .ebextension 檔案,然後將其部署到您的 Elastic Beanstalk 環境中。
-
若要測試是否正在匯出變數,請使用 SSH 連線至執行個體,然後執行下列命令。測試之前,請關閉任何現有的工作階段,然後使用 SSH 重新連線。
env | grep VARIABLE_NAME
**重要事項:**在步驟 3 中,請將 VARIABLE_NAME 設定為在環境中定義的變數。
輸出會顯示您的環境變數是否設定正確。在下面的範例輸出中,已在 Elastic Beanstalk 環境中定義一個名為 RDS_PORT 的變數。
$ env|grep RDS_PORT
RDS_PORT=3306
注意:由於您正在使用 .ebextension 上的命令,因此只能使用新的部署更新 sh.local 檔案。如果在環境中新增或變更變數,則必須在將變數匯出至作業系統前建立新部署。