環境屬性與其他軟體設定 - AWS Elastic Beanstalk

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

環境屬性與其他軟體設定

[設定更新、監控和記錄設定] 頁面可讓您在執行應用程式的 Amazon 彈性運算雲端 (AmazonEC2) 執行個體上設定軟體。您可以配置環境屬性, AWS X-Ray 偵錯、執行個體記錄儲存和串流,以及平台特定的設定。

設定平台特定設定

除了適用於所有環境的一組標準選項外,大部分的 Elastic Beanstalk 平台也可讓您指定特定語言或特定架構的設定。它們會顯示在設定更新、監控和日誌頁面的平台軟體區段中,而且可採取下列形式。

  • 預設的環境屬性 ‒ Ruby 平台會針對架構設定使用環境屬性,例如 RACK_ENVBUNDLE_WITHOUT

  • 預留位置環境屬性 ‒ Tomcat 平台會定義名為 JDBC_CONNECTION_STRING 的環境屬性,此屬性未設定為任何值。這類設定較常見於舊的平台版本。

  • 組態選項 ‒ 大多數的平台會以特定平台或共用的命名空間 (例如 aws:elasticbeanstalk:xrayaws:elasticbeanstalk:container:python) 定義組態選項

在 Elastic Beanstalk 主控台中設定平台特定設定
  1. 開啟彈性魔豆控制台,然後在「區域」列表中選擇您的 AWS 區域.

  2. 在導覽窗格中,選擇環境,然後在清單中選擇您環境的名稱。

    注意

    如果您有許多環境,請使用搜尋列來篩選環境清單。

  3. 在導覽窗格中,選擇組態

  4. 更新、監控和日誌記錄組態類別中,選擇編輯

  5. 平台軟體下,進行必要的選項設定變更。

  6. 若要儲存變更,請選擇頁面底部的儲存變更

如需有關平台特定的選項,以及在您的程式碼中取得環境屬性值的詳細資訊,請參閱您的語言或架構的平台主題:

設定環境屬性 (環境變數)

可使用環境屬性 (亦稱為環境變數),將秘密、端點、除錯設定和其他資訊傳遞到您的應用程式。環境屬性可協助您針對不同用途,在多個環境中執行應用程式,例如開發、測試、整備與生產。

另外,當您新增資料庫到您的環境時,Elastic Beanstalk 會設定像是 RDS_HOSTNAME 的環境屬性,您可在應用程式的程式碼中讀取這些屬性,來建構與物件或字串的連線。

環境變數

在大多數的情況中,環境屬性會以環境變數的形式傳遞到您的應用程式,但行為則取決於平台。例如,Java SE 平台會設定您用 System.getenv 所擷取的環境變數,Tomcat 平台則會設定您用 System.getProperty 擷取的 Java 系統屬性。一般而言,若您連接至執行個體並執行 env,將不會顯示屬性。

在 Elastic Beanstalk 主控台中設定環境屬性
  1. 開啟彈性魔豆控制台,然後在「區域」列表中選擇您的 AWS 區域.

  2. 在導覽窗格中,選擇環境,然後在清單中選擇您環境的名稱。

    注意

    如果您有許多環境,請使用搜尋列來篩選環境清單。

  3. 在導覽窗格中,選擇組態

  4. 更新、監控和日誌記錄組態類別中,選擇編輯

  5. 向下捲動至環境屬性

  6. 選取新增環境屬性

  7. 輸入屬性名稱對。

  8. 如果需要新增更多變數,請重複步驟 6步驟 7

  9. 若要儲存變更,請選擇頁面底部的儲存變更

環境屬性限制
  • 金鑰可以包含任何英數字元和下列符號:_ . : / + \ - @

    列出的這些符號對於環境屬性金鑰是有效的,但是對於您環境平台上的環境變數名稱,可能會是無效的。為了能夠相容於所有的平台,請將環境屬性限定為下列的模式:[A-Z_][A-Z0-9_]*

  • 可以包含任何英數字元、空格和下列符號:_ . : / = + \ - @ ' "

    注意

    環境屬性值中的某些字元必須逸出。使用反斜線字元 (\) 來代表一些特殊字元和控制字元。下列清單包含表示某些需要逸出的字元的範例:

    • 反斜線 (\) — 代表使用 \\

    • 單引號 (') — 代表使用 \'

    • 雙引號 (") — 代表使用 \"

  • 金鑰會區分大小寫。

  • 所有環境屬性的組合大小不得超過 4,096 個位元組,當儲存為字串時,格式為 key=value.

軟體設定命名空間

您可以使用組態檔案來設定組態選項,並在部署期間執行其他的執行個體設定工作。組態選項可以是平台特定的,也可以整體套用至 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-samples GitHub 儲存庫中的範例使用 Ref 函數取得其建立ARN的 Amazon SNS 主題,並將其指派給名為的環境屬性NOTIFICATION_TOPIC

備註
  • 如果您使用 AWS CloudFormation 函數來定義一個環境屬性,Elastic Beanstalk 控制台顯示該函數評估之前的屬性值。您可以使用 get-config 平台指令碼來確認可供您應用程式使用的環境屬性值。

  • 多容器泊塢視窗平台不使用 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 平台會透過用來設定執行個體上所執行軟體的選項 (例如將請求轉送給應用程式的反向代理),來定義額外的命名空間。如需關於您的平台上可用命名空間的詳細資訊,請參閱以下項目:

Elastic Beanstalk 可提供許多組態選項讓您自訂環境。除了組態檔案之外,您也可以使用主控台、儲存的組態CLI、EB 或 AWS CLI。 組態選項如需詳細資訊,請參閱。

存取環境屬性

在大部分的情況中,您會在應用程式的程式碼中存取環境屬性 (如同存取環境變數)。不過,一般而言,環境屬性只會傳遞到應用程式,即使連線到您環境中的執行個體並執行 env,也無法檢視。

  • Goos.Getenv

    endpoint := os.Getenv("API_ENDPOINT")
  • Java SESystem.getenv

    String endpoint = System.getenv("API_ENDPOINT");
  • TomcatSystem.getProperty

    String endpoint = System.getProperty("API_ENDPOINT");
  • 。 NET核心Environment.GetEnvironmentVariable

    string endpoint = Environment.GetEnvironmentVariable("API_ENDPOINT");
  • .NETappConfig

    NameValueCollection appConfig = ConfigurationManager.AppSettings; string endpoint = appConfig["API_ENDPOINT"];
  • Node.jsprocess.env

    var endpoint = process.env.API_ENDPOINT
  • PHP$_SERVER

    $endpoint = $_SERVER['API_ENDPOINT'];
  • Pythonos.environ

    import os endpoint = os.environ['API_ENDPOINT']
  • RubyENV

    endpoint = ENV['API_ENDPOINT']

在應用程式的程式碼以外 (例如在部署期間執行的指令碼),您可以使用 get-config 平台指令碼來存取環境屬性。如需使用的範例組態,請參閱elastic-beanstalk-samples GitHub 儲存庫get-config