View a markdown version of this page

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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

环境变量和其他软件设置

配置更新、监控和记录配置页面允许您在运行您的应用程序的亚马逊弹性计算云 (Amazon EC2) 实例上配置软件。您可以配置环境变量、 Amazon X-Ray 调试、实例日志存储和流式传输以及特定于平台的设置。

配置特定于平台的设置

除了可用于所有环境的标准选项集之外,大多数 Elastic Beanstalk 平台还允许您指定特定于语言或框架的设置。这些设置显示在配置更新、监控和日志记录页面的平台软件部分中,并且可以采用以下形式:

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

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

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

在 Elastic Beanstalk 控制台中配置特定于平台的设置
  1. 打开 Elastic Beanstalk 控制台,然后在 “区域” 列表中,选择您的。 Amazon Web Services 区域

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

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

  4. 在 Updates, monitoring, and logging(更新、监控和日志记录)配置类别中,选择 Edit(编辑)。

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

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

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

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

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

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

在 Elastic Beanstalk 控制台中配置环境变量
  1. 打开 Elastic Beanstalk 控制台,然后在 “区域” 列表中,选择您的。 Amazon Web Services 区域

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

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

  4. 在 Updates, monitoring, and logging(更新、监控和日志记录)配置类别中,选择 Edit(编辑)。

  5. 向下滚动到运行时环境变量。

  6. 选择添加环境变量。

  7. 对于来源,选择纯文本。

    注意

    下拉列表中的 Secrets Manager 和 SSM Parameter Store 值用于将环境变量配置为用于存储敏感数据(例如凭证和 API 密钥)的密钥。有关更多信息,请参阅 将 Elastic Beanstalk 与 Amazon Secrets Manager and Amazon Systems Manager Parameter Store。

  8. 输入环境变量名称和环境变量值对。

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

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

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

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

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

    注意

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

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

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

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

  • 键和值区分大小写。

  • 当存储为格式key为 = 的字符串时,所有环境属性的总大小不能超过 4,096 字节。value

软件设置命名空间

您可以使用配置文件设置配置选项并在部署期间执行其他实例配置。配置选项可以特定于平台,也可以应用于整个 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 来查看。

  • Go – os.Getenv

    endpoint := os.Getenv("API_ENDPOINT")
  • Java SE – System.getenv

    String endpoint = System.getenv("API_ENDPOINT");
  • Tomcat:System.getProperty 和 System.getenv

    2025 年 3 月 26 日或之后发布的 Tomcat 平台版本也可以使用 System.getenv 来访问纯文本环境变量。您可以继续使用 System.getProperty 访问纯文本环境变量。但是,作为密钥存储的环境变量只能使用 System.getenv 获取。

    String endpoint = System.getProperty("API_ENDPOINT");
    String endpoint = System.getenv("API_ENDPOINT");
    重要

    在 2025 年 3 月 26 日或之后发布的 Tomcat 平台版本中增加了对环境变量的 System.getenv 访问权限,在环境变量优先于 Java 系统属性的应用程序中或在明确地从 System.getProperty 切换为 System.getenv 时,这可能会导致意外行为。有关更多信息和建议的操作,请参阅使用 Elastic Beanstalk Tomcat 平台。

  • .NET Core on Linux – Environment.GetEnvironmentVariable

    string endpoint = Environment.GetEnvironmentVariable("API_ENDPOINT");
  • .NET – appConfig

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

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

    $endpoint = $_SERVER['API_ENDPOINT'];
  • Python – os.environ

    import os endpoint = os.environ['API_ENDPOINT']
  • Ruby – ENV

    endpoint = ENV['API_ENDPOINT']

除了应用程序代码(如在部署过程中运行的脚本)外,您还可以使用get-config 平台脚本来访问环境属性。有关使用的示例配置,请参阅elastic-beanstalk-samples GitHub 存储库get-config。