本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
环境属性和其他软件设置
通过配置更新、监控和日志记录配置页面,您可以在运行应用程序的 Amazon Elastic Compute Cloud(Amazon EC2)实例上配置软件。您可以配置环境属性、AWS X-Ray 调试、实例日志的存储和流式传输以及特定于平台的设置。
配置特定于平台的设置
除了可用于所有环境的标准选项集之外,大多数 Elastic Beanstalk 平台还允许您指定特定于语言或框架的设置。这些设置显示在配置更新、监控和日志记录页面的平台软件部分中,并且可以采用以下形式:
-
预设环境属性 - Ruby 平台将环境属性用于框架设置,例如
RACK_ENV
和BUNDLE_WITHOUT
。 -
占位符环境属性 - Tomcat 平台定义名为
JDBC_CONNECTION_STRING
且未设置为任何值的环境属性。此类设置在较旧的平台版本中更常见。 -
配置选项 - 大多数平台在特定于平台或共享的命名空间(如
aws:elasticbeanstalk:xray
或aws:elasticbeanstalk:container:python
)中定义配置选项。
在 Elastic Beanstalk 控制台中配置特定于平台的设置
打开 Elastic Beanstalk 控制台
,然后在 Regions(区域)列表中选择您的 AWS 区域。 -
在导航窗格中,选择 Environments(环境),然后从列表中选择环境的名称。
注意
如果您有多个环境,请使用搜索栏筛选环境列表。
在导航窗格中,选择 Configuration(配置)。
-
在 Updates, monitoring, and logging(更新、监控和日志记录)配置类别中,选择 Edit(编辑)。
-
在平台软件下,进行必要的选项设置更改。
-
要保存更改,请选择页面底部的 Apply(应用)。
有关特定于平台的选项以及有关在代码中获取环境属性值的信息,请参阅适用于您的语言或框架的平台主题:
-
Docker – 配置 Elastic Beanstalk Docker 环境
-
Java SE – 使用 Elastic Beanstalk Java SE 平台
-
Tomcat – 使用 Elastic Beanstalk Tomcat 平台
-
.NET Core on Linux – 使用 Elastic Beanstalk .NET core on Linux 平台
-
Node.js – 使用 Elastic Beanstalk Node.js 平台
-
Python – 使用 Elastic Beanstalk Python 平台
-
Ruby – 使用 Elastic Beanstalk Ruby 平台
配置环境属性(环境变量)
您可以使用环境属性(也称为环境变量)向应用程序传递密钥、端点、调试设置和其他信息。环境属性可以帮助您在多个环境中为不同目的运行应用程序,如开发、测试、暂存和生产。
此外,当您向环境中添加数据库时,Elastic Beanstalk 会设置环境属性(例如 RDS_HOSTNAME
),您可以在应用程序代码中读取这些属性来构建连接对象或字符串。
环境变量
大多数情况下,环境属性作为环境变量 传递到应用程序,但行为因平台而异。例如,Java SE 平台设置您用 System.getenv
检索的环境变量,而 Tomcat 平台则设置您用 System.getProperty
检索的 Java 系统属性。一般来说,如果您连接到实例并运行 env
,则属性不会 显示出来。
在 Elastic Beanstalk 控制台中配置环境属性
打开 Elastic Beanstalk 控制台
,然后在 Regions(区域)列表中选择您的 AWS 区域。 -
在导航窗格中,选择 Environments(环境),然后从列表中选择环境的名称。
注意
如果您有多个环境,请使用搜索栏筛选环境列表。
在导航窗格中,选择 Configuration(配置)。
-
在 Updates, monitoring, and logging(更新、监控和日志记录)配置类别中,选择 Edit(编辑)。
-
向下滚动到环境属性。
-
选择添加环境属性。
-
输入属性名称和值对。
-
如需添加更多变量,请重复步骤 6 和步骤 7。
-
要保存更改,请选择页面底部的 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-samplesNOTIFICATION_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 平台都使用用于配置在实例中运行的软件的选项定义其他命名空间,如可将请求中继到您的应用程序的反向代理。有关可用于您的平台的命名空间的更多信息,请参阅以下内容:
-
Go – Go 配置命名空间
-
Java SE – Java SE 配置命名空间
-
Tomcat – Tomcat 配置命名空间
-
.NET Core on Linux – .NET Core on Linux 配置命名空间
-
Node.js – Node.js 配置命名空间
-
PHP – 配置的命名空间
-
Python – Python 配置命名空间
-
Ruby – Ruby 配置命名空间
Elastic Beanstalk 提供了许多用于自定义环境的配置选项。除了配置文件之外,您还可使用控制台、保存的配置、EB CLI 或 AWS CLI 来配置选项。参阅 配置选项 了解更多信息。
访问环境属性
大多数情况下,您在应用程序代码 (如环境变量) 中访问环境属性。但是,环境属性通常只传递给应用程序,不能通过在您的环境中连接实例和运行 env
来查看。
-
Go –
os.Getenv
endpoint := os.Getenv("API_ENDPOINT")
-
Java SE –
System.getenv
String endpoint = System.getenv("API_ENDPOINT");
-
Tomcat –
System.getProperty
String endpoint = System.getProperty("API_ENDPOINT");
-
.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-samplesget-config
的示例配置。