

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

# 理解 Elastic Beanstalk 中的概念
<a name="concepts"></a>

熟悉这些概念和术语将有助于您理解使用 Elastic Beanstalk 部署应用程序所需的知识。

![\[说明性图表显示了 Elastic Be web/worker anstalk 应用程序与环境之间的关系。\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-overview.png)


## 应用程序
<a name="concepts-application"></a>

Elastic Beanstalk *应用程序*是指 Elastic Beanstalk 组件（包括*环境*、*版本*和*环境配置*）的容器。在 Elastic Beanstalk 应用程序中，您可以管理与运行代码相关的所有资源。

## 应用程序版本
<a name="concepts-version"></a>

在 Elastic Beanstalk 中，*应用程序版本* 指的是 Web 应用程序的可部署代码的特定标记迭代。一个应用程序版本指向一个包含可部署代码（例如，Java WAR 文件）的 Amazon Simple Storage Service (Amazon S3) 对象。

应用程序版本是应用程序的组成部分。应用程序可以有多个版本，每个应用程序版本都是唯一的。在运行环境中，您可以部署已上传到应用程序的任意应用程序版本，也可以上传并立即部署新的应用程序版本。例如，您可以上传多个应用程序版本，测试不同版本之间的差异。

## 环境
<a name="concepts-environment"></a>

*环境*是运行应用程序版本的 AWS 资源集合。每个环境一次只运行一个应用程序版本，但您可以同时在多个环境中运行相同或不同的应用程序版本。创建环境时，Elastic Beanstalk 会在您的账户 AWS 中预配置运行您指定的应用程序版本所需的资源。

## 环境层
<a name="concepts-tier"></a>

在启动 Elastic Beanstalk 环境时，您需首先选择环境层。环境层指定环境运行的应用程序类型，并确定 Elastic Beanstalk 预置哪些资源来支持此应用程序。为 HTTP 请求提供服务的应用程序在 [Web 服务器环境层](concepts-webserver.md)中运行。从 Amazon Simple Queue Service (Amazon SQS) 队列中提取任务的后端环境在[工作线程环境层](concepts-worker.md)中运行。

## 环境配置
<a name="concepts-environmentconfig"></a>

 *环境配置* 标识一组参数和配置，这些参数和配置用于定义环境及其相关资源的行为方式。当您更新环境的配置设置时，Elastic Beanstalk 会自动将更改应用到现有资源，或者删除现有资源并部署新资源（取决于更改的类型）。

## 已保存的配置
<a name="concepts-configuration"></a>

*保存的配置* 是一种模板，您可以将其用作创建独特环境配置的起点。您可以使用 Elastic Beanstalk 控制台、EB AWS CLI CLI 或 API 创建和修改保存的配置，并将其应用于环境。API 和将保存的配置 AWS CLI 称为*配置模板*。

## 平台
<a name="concepts-platform"></a>

*平台* 是操作系统、编程语言运行时、Web 服务器、应用程序服务器和 Elastic Beanstalk 组件的组合。您可以设计 Web 应用程序并将其定向到平台。Elastic Beanstalk 提供各种可供您构建应用程序的平台。

有关详细信息，请参阅[Elastic Beanstalk 平台](concepts-all-platforms.md)。

# Elastic Beanstalk Web 服务器环境
<a name="concepts-webserver"></a>

下图显示了一个 Web 服务器环境层的示例 Elastic Beanstalk 架构，并显示了这种环境层中各个组件协同工作的方式。

![\[AWS Elastic Beanstalk Web 服务器层架构图。\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-architecture2.png)


环境是应用程序的核心。在图中，环境显示在顶层实线内。创建环境时，Elastic Beanstalk 会预配置运行应用程序所需的资源。 AWS 为环境创建的资源包括一个弹性负载均衡器（图中为 ELB）、一个 Auto Scaling 组和一个或多个亚马逊弹性计算云 (Amazon EC2) 实例。

每个环境有一个指向负载均衡器的别名记录(URL)。该环境有一个 URL，例如 `myapp.us-west-2.elasticbeanstalk.com`。通过使用别名记录，此 URL 在 [Amazon Route 53](https://aws.amazon.com/route53/) 中的别名为 Elastic Load Balancing URL（例如 `abcdef-123456.us-west-2.elb.amazonaws.com`）。[Amazon Route 53](https://aws.amazon.com/route53/) 是一种可用性高、可扩展性强的域名系统（DNS）Web 服务。它可以向您的基础设施提供安全可靠的路由。您通过 DNS 提供商注册的域名会将请求转发到别名记录。

负载均衡器位于 Amazon EC2 实例的前面，这些实例是 Auto Scaling 组的一部分。Amazon A EC2 uto Scaling 会自动启动额外的亚马逊 EC2 实例，以适应应用程序不断增加的负载。如果您的应用程序负载减少，Amazon A EC2 uto Scaling 会停止实例，但始终让至少一个实例保持运行。

在 Amazon EC2 实例上运行的软件堆栈取决于*容器类型*。容器类型定义的是将在该环境中使用的基础设施拓扑和软件栈。例如，包含 Apache Tomcat 容器的 Elastic Beanstalk 环境使用 Amazon Linux 操作系统、Apache Web 服务器和 Apache Tomcat 软件。有关所支持的容器类型的列表，请参阅 [Elastic Beanstalk 支持的平台](concepts.platforms.md)。运行您的应用程序的每个 Amazon EC2 实例都使用其中一种容器类型。此外，名为*主机管理器 (HM)* 的软件组件在每个 Amazon EC2 实例上运行。主机管理器负责以下内容：
+ 部署应用程序
+ 汇总事件和指标，以通过控制台、API 或命令行进行检索
+ 生成实例级事件
+ 监控应用程序日志文件中是否有关键错误
+ 监控应用程序服务器
+ 修补实例组件
+ 交替您的应用程序日志文件，并将它们发布到 Amazon S3

主机管理器报告指标、错误和事件以及服务器实例状态，这些指标可通过 Elastic Beanstal APIs k 控制台获得，以及。 CLIs

图中显示的 Amazon EC2 实例属于一个*安全组*。安全组定义实例的防火墙规则。默认情况下，Elastic Beanstalk 定义一个安全组，该安全组允许每个人都可以使用端口 80 (HTTP) 进行连接。您可以定义一个以上的安全组。例如，您可以为您的数据库服务器定义一个安全组。有关亚马逊 EC2 安全组以及如何为您的 Elastic Beanstalk 应用程序配置安全组的更多信息，请参阅。[EC2 安全组](using-features.managing.ec2.console.md#using-features.managing.ec2.securitygroups)

# Elastic Beanstalk 工作线程环境
<a name="concepts-worker"></a>

AWS 为工作环境层创建的资源包括一个 Auto Scaling 组、一个或多个 Amazon EC2 实例和一个 IAM 角色。对于工作线程环境层，Elastic Beanstalk 还会创建并预配置一个 Amazon SQS 队列（如果您还没有这样一个队列）。当您启动工作环境时，Elastic Beanstalk 会为您选择的编程语言安装必要的支持文件，并在 Auto Scaling 组中的每个 EC2 实例上安装一个守护程序。守护程序从 Amazon SQS 队列中读取消息。守护程序将其读取的每条消息中的数据发送到在工作线程环境中运行的 Web 应用程序以进行处理。如果您的工作线程环境中有多个实例，则每个实例都有自己的守护程序，但它们都从同一 Amazon SQS 队列中读取数据。

下图显示了不同的组件及其在环境和 AWS 服务中的交互。

![\[AWS Elastic Beanstalk 工作层架构图。\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-architecture_worker.png)


Amazon CloudWatch 用于警报和运行状况监控。有关更多信息，请转至 [基本运行状况报告](using-features.healthstatus.md)。

有关工作线程环境层的工作方式的详细信息，请参阅[Elastic Beanstalk 工作线程环境](using-features-managing-env-tiers.md)。

# Elastic Beanstalk 应用程序的设计注意事项
<a name="concepts.concepts.design"></a>

由于使用资源部署的应用程序在 AWS 云 资源上 AWS Elastic Beanstalk 运行，因此在优化应用程序时应记住几个配置因素：*可扩展性*、*安全*性、*持久存储*、*容错*、*内容交付*、*软件更新和修补*以及*连接*。本主题分别介绍了其中的每一项。有关涵盖架构、安全性和经济性等主题的技术 AWS 白皮书的完整列表，请参阅[AWS 云计算白皮书](https://aws.amazon.com/whitepapers/)。

## 可扩展性
<a name="concepts.concepts.design.scalability"></a>

与云环境相对，在物理硬件环境中运行时，您可以通过两种方式之一实现可扩展性。您可以通过垂直缩放纵向扩展，也可以通过水平缩放进行横向扩展。纵向扩展方法要求您投资强大的硬件，这些硬件可以支持业务不断增长的需求。横向扩展方法要求您遵循分布式投资模式。因此，您的硬件和应用程序获取可以更有针对性，数据集是联合的，而且您的设计以服务为导向。纵向扩展方法可能会非常昂贵，并且仍然存在需求可能会超出容量的风险。在这方面，横向扩展方法通常更有效。但是，在使用它时，您必须能够定期预测需求，并分块部署基础设施以满足该需求。因此，此方法往往导致未用容量，可能需要仔细监控。

通过迁移到云，您可以充分利用云的弹性，使您的基础设施与需求很好地结合起来。弹性有助于简化资源获取和发布。有了它，您的基础设施可随着需求的波动而迅速横向缩减和横向扩展。要使用它，请配置您的 Auto Scaling 设置，使之根据环境中的资源指标扩展和收缩。例如，您可以将诸如服务器利用率或网络之类的指标（例如服务器利用率或网络I/O. You can use Auto Scaling for compute capacity to be added automatically whenever usage rises and for it to be removed whenever usage drops. You can publish system metrics (for example, CPU, memory, disk I/O, and network I/O）设置为 Amazon CloudWatch。然后，您可以使用配置警报 CloudWatch 以触发 Auto Scaling 操作或根据这些指标发送通知。有关如何配置 Auto Scaling 的说明，请参阅 [使用 Auto Scaling 功能自动扩缩 Elastic Beanstalk 环境实例](using-features.managing.as.md)。

我们还建议您将所有 Elastic Beanstalk 应用程序设计地尽可能保持*无状态*，以便使用可根据需要横向扩展的、松散耦合的容错组件。有关为其设计可扩展应用程序架构的更多信息，请参阅 Well-Archit AWS ecte [https://docs.aws.amazon.com/wellarchitected/latest/framework/welcome.html](https://docs.aws.amazon.com/wellarchitected/latest/framework/welcome.html)。

## 安全性
<a name="concepts.concepts.design.security"></a>

开启安全 AWS 是一项[共同的责任](https://aws.amazon.com/compliance/shared-responsibility-model/)。Amazon Web Services 负责保护您的环境中的物理资源，并确保云是可供您运行应用程序的安全场所。您负责保证进出您的 Elastic Beanstalk 环境的数据的安全，以及您的应用程序的安全。

要保护在您的应用程序和客户端之间流动的信息，请配置 SSL。要配置 SSL，您需要来自 AWS Certificate Manager (ACM) 的免费证书。如果您已经拥有一个来自外部证书颁发机构 (CA) 的证书，则可以使用 ACM 导入您的证书。否则，您可以使用将其导入 AWS CLI。

如果您的 ACM 不可[用 AWS 区域，则](https://docs.aws.amazon.com/general/latest/gr/acm.html)可以从外部 CA 购买证书，例如 VeriSign 或 Entrust。然后，使用 AWS Command Line Interface (AWS CLI) 将第三方证书或自签名证书和私钥上传到 AWS Identity and Access Management (IAM)。证书的公有密钥将您的服务器对浏览器进行身份验证。它还用做创建加密双向数据的共享会话密钥的基础。有关如何创建、上传和分配 SSL 证书到您的环境的说明，请参阅 [为 Elastic Beanstalk 环境配置 HTTPS](configuring-https.md)。

为您的环境配置 SSL 证书后，数据在客户端和您环境的 Elastic Load Balancing 负载均衡器之间加密传输。默认情况下，加密在负载均衡器终止，负载均衡器与 Amazon EC2 实例之间的流量未加密。

## 持久性存储
<a name="concepts.concepts.design.storage"></a>

Elastic Beanstalk 应用程序在没有永久本地存储空间的亚马逊实例 EC2 上运行。当 Amazon EC2 实例终止时，不会保存本地文件系统。新的 Amazon EC2 实例从默认文件系统开始。我们建议您将应用程序配置为在持久性数据源中存储数据。 AWS 提供了大量持久性存储服务，您可将它们用于应用程序。下表列出了这些版本。


| 存储服务 | 服务文档 | Elastic Beanstalk 集成 | 
| --- | --- | --- | 
| [Amazon S3](https://aws.amazon.com/s3/) | [Amazon Simple Storage Service 文档](https://aws.amazon.com/documentation/s3/) | [将 Elastic Beanstalk 和 Amazon S3 结合使用](AWSHowTo.S3.md) | 
| [Amazon Elastic File System](https://aws.amazon.com/efs/) | [Amazon Elastic File System 文档](https://aws.amazon.com/documentation/efs/) | [配合使用 Elastic Beanstalk 和 Amazon Elastic File System](services-efs.md) | 
| [Amazon Elastic Block Store](https://aws.amazon.com/ebs/) |  [Amazon Elastic Block Store](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html) [功能指南：Elastic Block Store](https://aws.amazon.com/articles/1667)  |  | 
| [Amazon DynamoDB](https://aws.amazon.com/dynamodb/) | [Amazon DynamoDB 文档](https://aws.amazon.com/documentation/dynamodb/) | [配合使用 Elastic Beanstalk 和 Amazon DynamoDB](AWSHowTo.dynamoDB.md) | 
| [Amazon Relational Database Service (RDS)](https://aws.amazon.com/rds/) | [Amazon Relational Database Service 文档](https://aws.amazon.com/documentation/rds/) | [将 Elastic Beanstalk 和 Amazon RDS 结合使用](AWSHowTo.RDS.md) | 

**注意**  
Elastic Beanstalk *创建*了一个 Web 应用程序用户供您设置为实例上应用程序目录的所有者。 EC2 对于 [2022 年 2 月 3 日](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-02-03-linux.html#release-2022-02-03-linux.changes)或之后发布的 Amazon Linux 2 平台版本，Elastic Beanstalk 会针对新环境为 *webapp* 用户分配一个 uid（用户 ID）和 900 的 gid（组 ID）值。对于平台版本更新后的现有环境，它也是如此。这种方法保持了 *webapp* 用户对永久性文件系统存储的一致访问权限。  
如果另一个用户或进程已经在使用 900（不太可能的情形），操作系统会将 *webapp* 用户 uid 和 gid 设为另一个默认值。**id webapp**在您的 EC2 实例上运行 Linux 命令以验证分配给 *web* app 用户的 uid 和 gid 值。

## 容错能力
<a name="concepts.concepts.design.faulttolerance"></a>

一般来说，设计云架构时，应当考虑那些不令人乐观的情况。利用它提供的弹性。架构的设计、实施和部署目的始终只有一个：即能够自动从故障中恢复。为您的亚马逊 EC2 实例和 Amazon RDS 使用多个可用区。在概念上，可用区类似于逻辑数据中心。使用亚马逊可以更深入 CloudWatch 地了解您的 Elastic Beanstalk 应用程序的运行状况，并在出现硬件故障或性能下降时采取适当的措施。配置您的 Auto Scaling 设置，将您的亚马逊 EC2 实例队列保持在固定大小，这样运行状况不佳的亚马逊 EC2 实例就会被新的实例所取代。如果正在使用 Amazon RDS，请随后设置备份保留期，以便 Amazon RDS 执行自动备份。

## 内容分发
<a name="concepts.concepts.design.cloudfront"></a>

用户与您的网站连接时，他们的请求可能会通过大量个人网络进行路由。因此，用户可能会由于高延迟导致出现低性能。Amazon CloudFront 可以通过将您的网页内容（例如图像和视频）分发到世界各地的边缘站点网络来帮助改善延迟问题。用户的请求会被路由到最近的边缘站点，因此可以以最佳性能交付内容。 CloudFront 可与 Amazon S3 无缝协作，后者可持久存储文件的原始最终版本。有关亚马逊的更多信息 CloudFront，请参阅《[亚马逊 CloudFront 开发者指南》](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html)。

## 软件更新和修补
<a name="concepts.concepts.design.updates"></a>

AWS Elastic Beanstalk 定期发布[平台更新](using-features.platform.upgrade.md)以提供修复、软件更新和新功能。Elastic Beanstalk 提供了多种选项来处理平台更新。使用[托管平台更新](environment-platform-update-managed.md)，您的环境会在计划的维护时段内自动升级到最新平台版本，而您的应用程序会继续提供服务。在 2019 年 11 月 25 日或以后使用 Elastic Beanstalk 控制台创建的环境中，默认情况下，尽可能启用托管更新。您还可以使用 Elastic Beanstalk 控制台或 EB CLI 手动启动更新。

## 连接
<a name="concepts.concepts.design.connectivity"></a>

Elastic Beanstalk 需要能够连接到环境中的实例才能完成部署。当您在 Amazon VPC 内部署 Elastic Beanstalk 应用程序时，启用连接所需的配置取决于您创建的 Amazon VPC 环境的类型：
+ 对于单实例环境，不需要额外的配置。这是因为，在这些环境中，Elastic Beanstalk 会为 EC2每个亚马逊实例分配一个公有弹性 IP 地址，使该实例能够直接与互联网通信。
+ 对于同时具有公有子网和私有子网的 Amazon VPC 中负载均衡的可扩展环境，您必须执行以下操作：
  + 在公有子网中创建负载均衡器，将来自互联网的入站流量路由到 Amazon EC2 实例。
  + 创建网络地址转换 (NAT) 设备，将出站流量从私有子网中的 Amazon EC2 实例路由到互联网。
  + 为私有子网内的 Amazon EC2 实例创建入站和出站路由规则。
  + 如果您使用的是 NAT 实例，请为 NAT 实例和 Amazon EC2 实例配置安全组以启用互联网通信。
+ 对于具有一个公有子网的 Amazon VPC 中负载均衡、可扩展的环境，无需额外的配置。这是因为，在这种环境中，您的 Amazon EC2 实例配置了一个公有 IP 地址，使这些实例能够与互联网通信。

有关配合使用 Elastic Beanstalk 和 Amazon VPC 的更多信息，请参阅[将 Elastic Beanstalk 和 Amazon VPC 结合使用](vpc.md)。