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

设计注意事项

因为使用 Elastic Beanstalk 部署的应用程序在 Amazon 云资源上运行,所以您在设计应用程序时应注意几个方面:可扩展性安全性持久性存储容错性内容传输软件更新和修补 以及连接性。关于技术 AWS 白皮书的综合列表 (涵盖架构、安全和经济因素等主题),请转到 AWS 云计算白皮书

可扩展性

当您在物理硬件环境中 (与云环境相对) 操作时,可以通过两种方式实现扩展:可以向上扩展 (垂直扩展) 或向外扩展 (水平扩展)。随着业务需求的增长,向上扩展方法要求投资购买功能强大的硬件,而向外扩展方法则要求遵循一种分布式投资模型,因此,硬件和应用程序的采购更具有针对性,数据集是联合的,并且设计以服务为导向进行。向上扩展方法可能会非常昂贵,并且仍然存在需求可能会超出容量的风险。尽管向外扩展方法通常更有效,但是为满足需要,该方法要求定期预测需求并按块部署基础设施。此方法往往导致未用容量,需要仔细监控。

通过转移到云,您可以充分利用云的弹性,将基础设施的使用与需要紧密结合起来。弹性可实现资源获取和释放的优化,使您的基础设施可随着需求的变动而迅速地扩展和收缩。要实现弹性,请配置您的 Auto Scaling 设置,使之根据环境中的资源指标 (如服务器或网络 I/O 的利用率) 扩展或收缩。您可以使用 Auto Scaling 自动在使用量增大时增加计算容量,在使用量降低时移除计算容量。发布系统指标 (CPU、内存、磁盘 I/O、网络 I/O) 到 Amazon CloudWatch 并配置用于触发 Auto Scaling 操作或发送通知的警报。有关配置 Auto Scaling 的更多说明,请参阅您的 AWS Elastic Beanstalk 环境的 Auto Scaling 组

此外,Elastic Beanstalk 应用程序还应该尽可能地保持无状态,以便使用可根据需要向外扩展的、松散耦合的容错组件。有关设计适用于 AWS 的可扩展应用程序架构的详细信息,请参阅云的架构:最佳实践白皮书。

安全性

在 AWS 上,安全是共同承担的责任。AWS 负责保护您的环境中的物理资源,并确保云是可供您运行应用程序的安全场所。您负责:1) 保证进出您的弹性 Beanstalk 环境的数据的安全;2) 您的应用程序的安全。

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

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

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

持久性存储

Elastic Beanstalk 应用程序会在无持久性本地存储的 Amazon EC2 实例上运行。Amazon EC2 实例终止时,不会保存本地文件系统,而新 Amazon EC2 实例会开始使用默认的文件系统。应将您的应用程序设计为可在持久性数据源中存储数据的类型。Amazon Web Services 提供了大量持久性存储服务,您可将它们用于应用程序。下表列出了这些版本。

容错能力

一般来说,设计云架构时,应当考虑那些不令人乐观的情况。架构的设计、实施和部署目的始终只有一个:即能够自动从故障中恢复。针对 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 的更多信息,请参阅 http://www.amazonaws.cn/cloudfront

软件更新和修补

Elastic Beanstalk 会使用新软件和补丁定期更新它的平台配置。Elastic Beanstalk 不会将运行环境自动升级为新的配置版本,但您可以启动平台升级以更新您已就位的运行环境。平台升级采用滚动更新方式 (分批次应用更改) 来保障应用程序的可用性。

连接

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

  • 对于单一实例环境,无需进行额外的配置,因为 Elastic Beanstalk 会为每个 Amazon EC2 实例分配一个公有弹性 IP 地址,使该实例能够直接与 Internet 通信。

  • 对于同时具有公有和私有子网的 Amazon VPC 中的负载均衡 Auto Scaling 环境,您必须执行以下操作:

    • 在公有子网中创建一个负载均衡器,以将来自 Internet 的入站流量路由到 Amazon EC2 实例。

    • 创建一个网络地址转换 (NAT) 设备,以将来自 Amazon EC2 实例的出站流量路由到 Internet。

    • 为私有子网中的 Amazon EC2 实例创建入站和出站路由规则。

    • 如果使用 NAT 实例,请为 NAT 实例和 Amazon EC2 实例配置安全组以启用 Internet 通信。

  • 对于具有一个公有子网的 Amazon VPC 中的负载均衡 Auto Scaling 环境,无需进行额外的配置,因为 Amazon EC2 实例配置有公有 IP 地址,允许这些实例与 Internet 通信。

有关结合使用 Elastic Beanstalk 与 Amazon VPC 的更多信息,请参阅将 Elastic Beanstalk 与 Amazon Virtual Private Cloud 结合使用