环境属性和其他软件设置 - 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. Updates, monitoring, and logging(更新、监控和日志记录)配置类别中,选择 Edit(编辑)。

  5. 平台软件下,进行必要的选项设置更改。

  6. 要保存更改,请选择页面底部的 Apply(应用)。

有关特定于平台的选项以及有关在代码中获取环境属性值的信息,请参阅适用于您的语言或框架的平台主题:

配置环境属性(环境变量)

您可以使用环境属性(也称为环境变量)向应用程序传递密钥、端点、调试设置和其他信息。环境属性可以帮助您在多个环境中为不同目的运行应用程序,如开发、测试、暂存和生产。

此外,当您向环境中添加数据库时,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. Updates, monitoring, and logging(更新、监控和日志记录)配置类别中,选择 Edit(编辑)。

  5. 向下滚动到环境属性

  6. 选择添加环境属性

  7. 输入属性名称对。

  8. 如需添加更多变量,请重复步骤 6步骤 7

  9. 要保存更改,请选择页面底部的 Apply(应用)。

环境属性限制
  • 可以包含任意字母数字字符和以下符号:_ . : / + \ - @

    列出的符号对环境属性键有效,但可能对您的环境平台上的环境变量名称无效。为了与所有平台兼容,请将环境属性限制于以下模式:[A-Z_][A-Z0-9_]*

  • 可以包含任意字母数字字符、空格和以下符号:_ . : / = + \ - @ ' "

    注意

    环境属性值中的一些字符必须进行转义。可使用反斜杠字符 (\) 表示一些特殊字符和控制字符。以下列表包含表示需要转义的一些字符的示例:

    • 反斜杠 (\) — 表示使用 \\

    • 单引号 (') — 表示使用 \'

    • 双引号 (") — 表示使用 \"

  • 区分大小写。

  • 当以= 的格式存储为字符串时,所有环境属性的组合大小不得超过 4096 字节。

软件设置命名空间

您可以使用配置文件设置配置选项并在部署期间执行其他实例配置。配置选项可以特定于平台,也可以应用于整个 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,并将其分配给名为 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");
  • .NET Core on LinuxEnvironment.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 的示例配置。