AWS Elastic Beanstalk
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

环境属性和其他软件设置

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

环境变量

大多数情况下,环境属性作为环境变量 传递到应用程序,但行为因平台而异。例如,Java SE 平台设置您用 System.getenv 检索的环境变量,而 Tomcat 平台则设置您用 System.getProperty 检索的 Java 系统属性。

除了可用于所有环境的标准选项集之外,大多数 Elastic Beanstalk 平台还允许您指定特定于语言或框架的设置。这些设置可采用以下形式。

特定于平台的设置

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

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

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

有关特定于平台的选项的信息,请参阅适用于您的语言或框架的平台主题:

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

配置环境属性

环境属性显示在 Elastic Beanstalk 控制台中的 Software Configuration (软件配置) 下。

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

  1. 打开 Elastic Beanstalk 控制台

  2. 导航到您的环境的管理页

  3. 选择 Configuration

  4. Software 配置卡上,选择 Modify

  5. 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

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

注意

多容器 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");
  • .NETappConfig

    NameValueCollection appConfig = ConfigurationManager.AppSettings; string endpoint = appConfig["API_ENDPOINT"];

    注意

    Elastic Beanstalk 不支持将环境变量传递到 .NET 内核应用程序,以及使用部署清单的多应用程序 IIS 部署。

  • 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 的示例配置。