设计注意事项 - Amazon Elastic Beanstalk
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

设计注意事项

因为使用 Amazon Elastic Beanstalk 部署的应用程序在 Amazon Web Services 云 资源上运行,所以您在设计应用程序时应注意几个方面:可扩展性安全性持久性存储容错能力内容分发软件更新和补丁连接性。本主题分别介绍了其中的每一项。有关涵盖架构以及安全性和经济因素等主题的技术 Amazon 白皮书的完整列表,请转到 Amazon 云计算白皮书

可扩展性

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

通过迁移到云,您可以充分利用云的弹性,使您的基础设施与需求很好地结合起来。弹性有助于简化资源获取和发布。有了它,您的基础设施可随着需求的波动而迅速横向缩减和横向扩展。要使用它,请配置您的 Auto Scaling 设置,使之根据环境中的资源指标扩展和收缩。例如,您可以设置诸如服务器利用率或网络输入/输出等指标。您可以使用 Auto Scaling 来实现计算容量,以便在使用量上升时自动添加,并在使用量下降时将其删除。您可以将系统指标(例如 CPU、内存、磁盘输入/输出和网络输入/输出)发布到 Amazon CloudWatch。然后,您可以使用 CloudWatch 配置警报以触发 Auto Scaling 操作或根据这些指标发送通知。有关如何配置 Auto Scaling 的说明,请参阅 Elastic Beanstalk 环境的 Auto Scaling 组

我们还建议您将所有 Elastic Beanstalk 应用程序设计地尽可能保持无状态,以便使用可根据需要横向扩展的、松散耦合的容错组件。有关为 Amazon 设计可扩展应用程序架构的更多信息,请参阅 Amazon Well-Architected Framework

安全性

在 Amazon 上,安全性为责任共担。Amazon Web Services 负责保护您的环境中的物理资源,并确保云是可供您运行应用程序的安全场所。您负责保证进出您的 Elastic Beanstalk 环境的数据的安全,以及您的应用程序的安全。

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

如果 ACM 不在您的Amazon Web Services 区域中可用,则可以从外部 CA(例如 VeriSign 或 Enust)购买证书。然后,使用 Amazon Command Line Interface (Amazon CLI) 将第三方或自签名证书和私有密钥上载到 Amazon Identity and Access Management (IAM)。证书的公有密钥将您的服务器对浏览器进行身份验证。它还用做创建加密双向数据的共享会话密钥的基础。有关如何创建、上传和分配 SSL 证书到您的环境的说明,请参阅 为 Elastic Beanstalk 环境配置 HTTPS

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

持久性存储

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

注意

Elastic Beanstalk 为您创建了 webapp 用户,您可以以应用程序目录所有者的身份在 Amazon EC2 实例上设置它。对于 2022 年 2 月 3 日或之后发布的 Amazon Linux 2 平台版本,Elastic Beanstalk 会针对新环境为 webapp 用户分配一个 uid(用户 ID)和 900 的 gid(组 ID)值。对于平台版本更新后的现有环境,它也是如此。这种方法保持了 webapp 用户对永久性文件系统存储的一致访问权限。

如果另一个用户或进程已经在使用 900(不太可能的情形),操作系统会将 webapp 用户 uid 和 gid 设为另一个默认值。在您的 EC2 实例上运行 Linux 命令 id webapp,以验证分配给 webapp 用户的 uid 和 gid 值。

容错能力

一般来说,设计云架构时,应当考虑那些不令人乐观的情况。利用它提供的弹性。架构的设计、实施和部署目的始终只有一个:即能够自动从故障中恢复。针对 Amazon EC2 实例和 Amazon RDS,使用多可用区域。在概念上,可用区类似于逻辑数据中心。使用 Amazon CloudWatch 更加清楚地了解 Elastic Beanstalk 应用程序的运行状况,以便在出现硬件故障或性能降低的情况下,执行适当操作。配置您的 Auto Scaling 设置,将您的 Amazon EC2 实例组合维持在固定大小,以便使用新的 Amazon EC2 实例替换不正常的实例。如果正在使用 Amazon RDS,请随后设置备份保留期,以便 Amazon RDS 执行自动备份。

内容分发

用户与您的网站连接时,他们的请求可能会通过大量个人网络进行路由。因此,用户可能会由于高延迟导致出现低性能。Amazon CloudFront 可使用遍布全球的边缘站点网络分配您的 Web 内容(如图像、视频等),从而帮助改善延迟问题。用户请求会路由到最近的边缘站点,因此,能以最佳的性能传递内容。CloudFront 可与 Amazon S3 无缝配合,以请持久地存储文件的原始最终版本。有关 Amazon CloudFront 的更多信息,请参阅 Amazon CloudFront 开发人员指南

软件更新和修补

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

连接

Elastic Beanstalk 需要能够连接到环境中的实例才能完成部署。当您在 Amazon VPC 内部署 Elastic Beanstalk 应用程序时,启用连接所需的配置取决于您创建的 Amazon VPC 环境的类型:

  • 对于单实例环境,不需要额外的配置。这是因为,在这些环境下,Elastic Beanstalk 会为每个 Amazon 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 结合使用