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

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

環境屬性與其他軟體設定

設定更新、監控和日誌組態頁面可讓您在執行應用程式的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體上設定軟體。您可以設定環境屬性、AWS X-Ray 除錯、執行個體日誌儲存和串流,以及平台特定的設定。

設定平台特定設定

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

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

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

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

在 Elastic Beanstalk 主控台中設定平台特定設定
  1. 開啟 Elastic Beanstalk 主控台,然後在 Regions (區域) 清單中選取您的 AWS 區域。

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

    注意

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

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

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

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

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

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

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

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

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

環境變數

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

在 Elastic Beanstalk 主控台中設定環境屬性
  1. 開啟 Elastic Beanstalk 主控台,然後在 Regions (區域) 清單中選取您的 AWS 區域。

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

    注意

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

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

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

  5. 向下捲動至環境屬性

  6. 選取新增環境屬性

  7. 輸入屬性名稱對。

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

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

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

    列出的這些符號對於環境屬性金鑰是有效的,但是對於您環境平台上的環境變數名稱,可能會是無效的。為了能夠相容於所有的平台,請將環境屬性限定為下列的模式:[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-samples GitHub 儲存庫中的範例,此範例使用了 Ref 函數,取得其建立 Amazon SNS 主題的 ARN,並將此 ARN 指派給名為 NOTIFICATION_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 平台會透過用來設定執行個體上所執行軟體的選項 (例如將請求轉送給應用程式的反向代理),來定義額外的命名空間。如需關於您的平台上可用命名空間的詳細資訊,請參閱以下項目:

Elastic Beanstalk 可提供許多組態選項讓您自訂環境。除了組態檔案,您也可以使用主控台、已儲存組態、EB CLI 或 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");
  • Linux 上的 .NET CoreEnvironment.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 平台指令碼來存取環境屬性。如需使用 get-config 的範例組態,請參閱 elastic-beanstalk-samples GitHub 儲存庫。