环境属性和其他软件设置 - Amazon Elastic Beanstalk
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

环境属性和其他软件设置

利用 Modify software (修改软件) 配置页面,可以在运行应用程序的 Amazon Elastic Compute Cloud (Amazon EC2) 实例上配置软件。您可以配置环境属性、Amazon X-Ray 调试、实例日志的存储和流式传输以及特定于平台的设置。

配置特定于平台的设置

除了可用于所有环境的标准选项集之外,大多数 Elastic Beanstalk 平台还允许您指定特定于语言或框架的设置。这些设置显示在 Modify software (修改软件) 页面的 Platform options (平台选项) 部分中,并且可以采用以下形式。

  • 预设环境属性 - Ruby 平台将环境属性用于框架设置,例如 RACK_ENVBUNDLE_WITHOUT

  • 占位符环境属性 - Tomcat 平台定义名为 JDBC_CONNECTION_STRING 且未设置为任何值的环境属性。此类设置在较旧的平台版本中更常见。

  • 配置选项 - 大多数平台在特定于平台或共享的命名空间(如 aws:elasticbeanstalk:xrayaws:elasticbeanstalk:container:python)中定义配置选项

在 Elastic Beanstalk 控制台中配置特定于平台的设置

  1. 打开 Elastic Beanstalk 控制台,然后在 Regions (区域) 列表中选择您的Amazon区域。

  2. 在导航窗格中,选择 Environments (环境),然后从列表中选择环境的名称。

    注意

    如果您有多个环境,请使用搜索栏筛选环境列表。

  3. 在导航窗格中,选择 Configuration (配置)

  4. Software (软件) 配置类别中,选择 Edit (编辑)

  5. Platform options (平台选项) 下,进行必要的选项设置更改。

  6. 选择 Apply

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

配置环境属性

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

此外,当您向环境中添加数据库时,Elastic Beanstalk 会设置环境属性(例如 RDS_HOSTNAME),您可以在应用程序代码中读取这些属性来构建连接对象或字符串。

环境变量

大多数情况下,环境属性作为环境变量 传递到应用程序,但行为因平台而异。例如,Java SE 平台设置您用 System.getenv 检索的环境变量,而 Tomcat 平台则设置您用 System.getProperty 检索的 Java 系统属性。一般来说,如果您连接到实例并运行 env,则属性不会 显示出来。

在 Elastic Beanstalk 控制台中配置环境属性

  1. 打开 Elastic Beanstalk 控制台,然后在 Regions (区域) 列表中选择您的Amazon区域。

  2. 在导航窗格中,选择 Environments (环境),然后从列表中选择环境的名称。

    注意

    如果您有多个环境,请使用搜索栏筛选环境列表。

  3. 在导航窗格中,选择 Configuration (配置)

  4. Software (软件) 配置类别中,选择 Edit (编辑)

  5. Environment properties (环境属性) 下,输入键-值对。

    
        “Modify software configuration (修改软件配置)”页面中的“Environment properties (环境属性)”部分
  6. 选择 Apply

环境属性限制

  • 可以包含任意字母数字字符和以下符号:_ . : / + \ - @

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

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

    注意

    值中的单引号和双引号必须进行转义。

  • 最多可包含 128 个字符。最多可包含 256 个字符。

  • 区分大小写。

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

软件设置命名空间

您可以使用配置文件设置配置选项并在部署期间执行其他实例配置。配置选项可以通过您使用的 Elastic Beanstalk 服务或平台定义并组织到命名空间 中。

您可以使用 Elastic Beanstalk 配置文件在源代码中设置环境属性和配置选项。使用 aws:elasticbeanstalk:application:environment 命名空间定义环境属性。

例 .ebextensions/options.config

option_settings: aws:elasticbeanstalk:application:environment: API_ENDPOINT: www.example.com/api

如果您使用配置文件或 Amazon CloudFormation 模板创建自定义资源,可以使用 Amazon CloudFormation 函数来获取有关资源的信息并在部署期间将其动态分配给环境属性。来自 elastic-beanstalk-samples GitHub 存储库的以下示例使用 Ref 函数获取它所创建的 Amazon SNS 主题的 ARN,并将其分配给名为 NOTIFICATION_TOPIC 的环境属性。

备注
  • 如果您使用 Amazon CloudFormation 函数定义环境属性,则 Elastic Beanstalk 控制台会在计算该函数之前显示属性的值。您可以使用 get-config 平台脚本 来确定适用于您的应用程序的环境属性的值。

  • 多容器 Docker 平台不使用 Amazon CloudFormation 创建容器资源。因此,此平台不支持使用 Amazon CloudFormation 函数定义环境属性。

例 .Ebextensions/sns-topic.config

Resources: NotificationTopic: Type: AWS::SNS::Topic option_settings: aws:elasticbeanstalk:application:environment: NOTIFICATION_TOPIC: '`{"Ref" : "NotificationTopic"}`'

您也可以使用此功能从 Amazon CloudFormation 虚拟参数传播信息。此示例获取当前区域并将其分配给名为 AWS_REGION 的属性。

例 .Ebextensions/env-regionname.config

option_settings: aws:elasticbeanstalk:application:environment: AWS_REGION: '`{"Ref" : "AWS::Region"}`'

大多数 Elastic Beanstalk 平台都使用用于配置在实例中运行的软件的选项定义其他命名空间,如可将请求中继到您的应用程序的反向代理。有关可用于您的平台的命名空间的更多信息,请参阅以下内容:

Elastic Beanstalk 提供了许多用于自定义环境的配置选项。除了配置文件之外,您还可使用控制台、保存的配置、EB CLI 或 Amazon 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 的示例配置。