本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
環境屬性與其他軟體設定
設定更新、監控和日誌組態頁面可讓您在執行應用程式的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體上設定軟體。您可以設定環境屬性、AWS X-Ray 除錯、執行個體日誌儲存和串流,以及平台特定的設定。
設定平台特定設定
除了適用於所有環境的一組標準選項外,大部分的 Elastic Beanstalk 平台也可讓您指定特定語言或特定架構的設定。它們會顯示在設定更新、監控和日誌頁面的平台軟體區段中,而且可採取下列形式。
-
預設的環境屬性 ‒ Ruby 平台會針對架構設定使用環境屬性,例如
RACK_ENV
和BUNDLE_WITHOUT
。 -
預留位置環境屬性 ‒ Tomcat 平台會定義名為
JDBC_CONNECTION_STRING
的環境屬性,此屬性未設定為任何值。這類設定較常見於舊的平台版本。 -
組態選項 ‒ 大多數的平台會以特定平台或共用的命名空間 (例如
aws:elasticbeanstalk:xray
或aws:elasticbeanstalk:container:python
) 定義組態選項。
在 Elastic Beanstalk 主控台中設定平台特定設定
開啟 Elastic Beanstalk 主控台
,然後在 Regions (區域) 清單中選取您的 AWS 區域。 -
在導覽窗格中,選擇 Environments (環境),然後在清單中選擇您環境的名稱。
注意
如果您有許多環境,請使用搜尋列來篩選環境清單。
在導覽窗格中,選擇 Configuration (組態)。
-
在更新、監控和日誌記錄組態類別中,選擇編輯。
-
在平台軟體下,進行必要的選項設定變更。
-
若要儲存變更,請選擇頁面底部的儲存變更。
如需有關平台特定的選項,以及在您的程式碼中取得環境屬性值的詳細資訊,請參閱您的語言或架構的平台主題:
-
Docker – 設定 Docker 環境
-
Java SE – 使用 Elastic Beanstalk Java SE 平台
-
Tomcat – 使用 Elastic Beanstalk Tomcat 平台
-
Linux 上的 .NET Core ‒ 使用 Linux 上的 .NET Core 平台
-
.NET – 使用 Elastic Beanstalk .NET 平台
-
Node.js – 使用 Elastic Beanstalk Node.js 平台
-
Python – 使用 Elastic Beanstalk Python 平台
-
Ruby – 使用 Elastic Beanstalk Ruby 平台
設定環境屬性 (環境變數)
可使用環境屬性 (亦稱為環境變數),將秘密、端點、除錯設定和其他資訊傳遞到您的應用程式。環境屬性可協助您針對不同用途,在多個環境中執行應用程式,例如開發、測試、整備與生產。
另外,當您新增資料庫到您的環境時,Elastic Beanstalk 會設定像是 RDS_HOSTNAME
的環境屬性,您可在應用程式的程式碼中讀取這些屬性,來建構與物件或字串的連線。
環境變數
在大多數的情況中,環境屬性會以環境變數的形式傳遞到您的應用程式,但行為則取決於平台。例如,Java SE 平台會設定您用 System.getenv
所擷取的環境變數,Tomcat 平台則會設定您用 System.getProperty
擷取的 Java 系統屬性。一般而言,若您連接至執行個體並執行 env
,將不會顯示屬性。
在 Elastic Beanstalk 主控台中設定環境屬性
開啟 Elastic Beanstalk 主控台
,然後在 Regions (區域) 清單中選取您的 AWS 區域。 -
在導覽窗格中,選擇 Environments (環境),然後在清單中選擇您環境的名稱。
注意
如果您有許多環境,請使用搜尋列來篩選環境清單。
在導覽窗格中,選擇 Configuration (組態)。
-
在更新、監控和日誌記錄組態類別中,選擇編輯。
-
向下捲動至環境屬性。
-
選取新增環境屬性。
-
輸入屬性名稱和值對。
-
如果需要新增更多變數,請重複步驟 6 和步驟 7。
-
若要儲存變更,請選擇頁面底部的儲存變更。
環境屬性限制
-
金鑰可以包含任何英數字元和下列符號:
_ . : / + \ - @
列出的這些符號對於環境屬性金鑰是有效的,但是對於您環境平台上的環境變數名稱,可能會是無效的。為了能夠相容於所有的平台,請將環境屬性限定為下列的模式:
[A-Z_][A-Z0-9_]*
-
值可以包含任何英數字元、空格和下列符號:
_ . : / = + \ - @ ' "
注意
環境屬性值中的某些字元必須逸出。使用反斜線字元 (
\
) 來代表一些特殊字元和控制字元。下列清單包含表示某些需要逸出的字元的範例:反斜線 (
\
) — 代表使用\\
單引號 (
'
) — 代表使用\'
雙引號 (
"
) — 代表使用\"
-
金鑰和值會區分大小寫。
-
在做為字串儲存時 (格式為
key
=value
),所有環境屬性加起來的大小不能超過 4,096 個位元組。
軟體設定命名空間
您可以使用組態檔案來設定組態選項,並在部署期間執行其他的執行個體設定工作。組態選項可由 Elastic Beanstalk 服務或您使用的平台來定義,並且會組織成「命名空間」。
您可以使用 Elastic Beanstalk 組態檔案,在您的來源碼中設定環境屬性和組態選項。使用 aws:elasticbeanstalk:application:environment 命名空間來定義環境屬性。
範例 .ebextensions/options.config
option_settings:
aws:elasticbeanstalk:application:environment:
API_ENDPOINT: www.example.com/api
如果您是使用組態檔案或 AWS CloudFormation 範本來建立自訂資源,則可以使用 AWS CloudFormation 函數來取得關於資源的資訊,並且在部署期間,動態地將資源指派給環境屬性。下列是 elastic-beanstalk-samplesNOTIFICATION_TOPIC
的環境屬性。
備註
-
如果您使用 AWS CloudFormation 函數來定義環境屬性,Elastic Beanstalk 主控台會先顯示屬性的值,再評估函數。您可以使用 get-config 平台指令碼來確認可供您應用程式使用的環境屬性值。
-
多容器 Docker 平台不使用 AWS CloudFormation 建立容器資源。因此,此平台不支援使用 AWS CloudFormation 函數定義環境屬性。
範例 .Ebextensions/sns-topic.config
Resources:
NotificationTopic:
Type: AWS::SNS::Topic
option_settings:
aws:elasticbeanstalk:application:environment:
NOTIFICATION_TOPIC: '`{"Ref" : "NotificationTopic"}`'
您也可以使用此功能來散佈 AWS CloudFormation 虛擬參數提供的資訊。此範例會取得目前區域的資訊,並將其指派給名為 AWS_REGION
的屬性。
範例 .Ebextensions/env-regionname.config
option_settings:
aws:elasticbeanstalk:application:environment:
AWS_REGION: '`{"Ref" : "AWS::Region"}`'
大多數的 Elastic Beanstalk 平台會透過用來設定執行個體上所執行軟體的選項 (例如將請求轉送給應用程式的反向代理),來定義額外的命名空間。如需關於您的平台上可用命名空間的詳細資訊,請參閱以下項目:
-
Go – Go 組態命名空間
-
Java SE – Java SE 組態命名空間
-
Tomcat – Tomcat 組態命名空間
-
Linux 上的 .NET Core ‒ Linux 上的 .NET Core 組態命名空間
-
Node.js – Node.js 組態命名空間
-
Python – Python 組態命名空間
-
Ruby – Ruby 組態命名空間
Elastic Beanstalk 可提供許多組態選項讓您自訂環境。除了組態檔案,您也可以使用主控台、已儲存組態、EB CLI 或 AWS CLI 來設定組態選項。如需詳細資訊,請參閱「組態選項」。
存取環境屬性
在大部分的情況中,您會在應用程式的程式碼中存取環境屬性 (如同存取環境變數)。不過,一般而言,環境屬性只會傳遞到應用程式,即使連線到您環境中的執行個體並執行 env
,也無法檢視。
-
Go –
os.Getenv
endpoint := os.Getenv("API_ENDPOINT")
-
Java SE –
System.getenv
String endpoint = System.getenv("API_ENDPOINT");
-
Tomcat –
System.getProperty
String endpoint = System.getProperty("API_ENDPOINT");
-
Linux 上的 .NET Core –
Environment.GetEnvironmentVariable
string endpoint = Environment.GetEnvironmentVariable("API_ENDPOINT");
-
.NET –
appConfig
NameValueCollection appConfig = ConfigurationManager.AppSettings; string endpoint = appConfig["API_ENDPOINT"];
-
Node.js –
process.env
var endpoint = process.env.API_ENDPOINT
-
PHP –
$_SERVER
$endpoint = $_SERVER['API_ENDPOINT'];
-
Python –
os.environ
import os endpoint = os.environ['API_ENDPOINT']
-
Ruby –
ENV
endpoint = ENV['API_ENDPOINT']
在應用程式的程式碼以外 (例如在部署期間執行的指令碼),您可以使用 get-config 平台指令碼來存取環境屬性。如需使用 get-config
的範例組態,請參閱 elastic-beanstalk-samples