AWS Elastic Beanstalk 常见问题

一般性问题

AWS Elastic Beanstalk 让开发人员能够更加轻松地在 AWS 云中快速部署和管理应用程序。开发人员只需上传应用程序,Elastic Beanstalk 将自动处理容量预配置、负载均衡、Auto Scaling 和应用程序运行状况监控的部署细节。

希望在 AWS 云中快速部署和管理应用程序的用户。无需熟悉云计算即可使用该服务。AWS Elastic Beanstalk 支持 Java、.NET、PHP、Node.js、Python、Ruby、Go 和 Docker Web 应用程序。

AWS Elastic Beanstalk 支持以下语言和开发堆栈:

适用于 Jave 应用程序的 Apache Tomcat

适用于 PHP 应用程序的 Apache HTTP Server

适用于 Python 应用程序的 Apache HTTP Server

Node.js 应用程序的 Nginx 或 Apache HTTP 服务器

适用于 Ruby 应用程序的 Passenger 或 Puma

适用于 .NET 应用程序的 Microsoft IIS 7.5、8.0 和 8.5

Java SE

Docker

Go

请参阅“支持的平台”,查看支持的语言和开发堆栈的最新完整列表。

符合。AWS Elastic Beanstalk 经过精心设计,以便将来可以扩展支持多种开发堆栈和编程语言。AWS 正在与解决方案提供商合作创建其他 Elastic Beanstalk 服务所需的 API 和功能。

通过创建一种运行某版应用程序的环境,AWS Elastic Beanstalk 可自动执行容量预配置、负载均衡、Auto Scaling 和应用程序部署的细节。您只需上传自己可部署的代码 (如 WAR 文件),剩余工作则可由 AWS Elastic Beanstalk 执行。借助 AWS Toolkit for Visual Studio 和 AWS Toolkit for Eclipse,即可将应用程序部署到 AWS Elastic Beanstalk 并进行管理,而不必退出 IDE。一旦应用程序运行,Elastic Beanstalk 将自动执行监控、应用程序版本部署、基本运行状况检查等管理任务,并促进日志文件访问。使用 Elastic Beanstalk,开发人员可以专注于开发应用程序,无须再处理配置服务器、设置负载均衡或管理扩展等面向部署的任务。

大多数现有的应用程序容器或平台即服务解决方案在减少所需的编程量的同时,会大大降低开发人员的灵活性和控制。开发人员需要集中关注供应商预先确定的所有解决方案,很少能够对其应用程序基础设施的各个部分采取控制。而使用 AWS Elastic Beanstalk,开发人员可保留对支持其应用程序的 AWS 资源的完全控制。如果开发人员决定要管理基础设施的某些(或全部)元素,可使用 Elastic Beanstalk 的管理功能无缝操作。

使用 AWS Elastic Beanstalk,您可以:

选择与您的应用程序要求相匹配的操作系统(例如,Amazon Linux 或 Windows Server 2016)

从多个 Amazon EC2 实例中选择,包括按需实例、预留实例和 Spot 实例 

从若干可用的数据库和存储选项中选择

实现登录访问 Amazon EC2 实例,从而即时直接排除故障

通过在多个可用区域运行,快速提高应用程序可靠性

通过在负载均衡器上启用 HTTPS 协议,增强应用程序安全性

访问内置 Amazon CloudWatch,监控和获取应用程序状况及其他重要事件的通知

调整应用程序服务器设置 (如 JVM 设置) 和传送环境变量

在 Amazon EC2 中并列运行其他应用程序组件,例如内存缓存服务

不登录应用程序服务器而访问日志文件

AWS Elastic Beanstalk 使用如下经过证实的 AWS 功能和服务来创建运行应用程序的环境:Amazon EC2、Amazon RDS、Elastic Load Balancing、Auto Scaling、Amazon S3 和 Amazon SNS。当前版本的 AWS Elastic Beanstalk 采用 Amazon Linux AMI 或 Windows Server 2019。

AWS Elastic Beanstalk 支持 Java、.NET、PHP、Node.js、Python、Ruby、Go 以及 Docker,是 Web 应用程序的理想之选。不过,鉴于 Elastic Beanstalk 为开放式架构,也可使用 Elastic Beanstalk 来部署非 Web 应用程序。预计将来还会支持其他应用程序类型和编程语言。请参阅受支持的平台,了解更多信息。

AWS Elastic Beanstalk 可在 Amazon Linux AMI 和 Windows Server AMI 中运行。这两种 AMI 均受 Amazon Web Services 支持并由其进行维护,旨在为 Amazon EC2 云计算提供稳定、安全和高性能的执行环境。

入门

要注册 AWS Elastic Beanstalk,请选择 Elastic Beanstalk 详细信息页面中的“Sign Up Now”按钮。您必须拥有 Amazon Web Services 账户才能访问此服务;如果还没有该账户,则在您开始使用 Elastic Beanstalk 时,系统将提示您创建一个账户。注册后,请参阅 AWS Elastic Beanstalk 入门指南。

注册 AWS Elastic Beanstalk 要求您在 AWS 上登记您的有效电话号码和电子邮件地址,以便我们需要联系您时使用。验证您的电话号码只需要几分钟时间。注册过程中您会接到一个自动电话,然后您需要使用电话键盘输入 PIN 码。

开始使用 AWS Elastic Beanstalk 的最佳方法是通读《AWS Elastic Beanstalk Getting 入门指南》(技术文档的一部分)。只需几分钟时间,您即可设置和使用示例应用程序或上传自己的应用程序。

符合。AWS Elastic Beanstalk 包括示例应用程序,可用来测试服务及试用其功能。

数据库和存储

符合。AWS Elastic Beanstalk 会在 Amazon S3 中存储您的应用程序文件及服务器日志文件 (可选)。如果使用 AWS 管理控制台、AWS Toolkit for Visual Studio 或 AWS Toolkit for Eclipse,系统会在您的账户中创建一个 Amazon S3 存储桶,并自动将您上传的文件从本地客户端复制到 Amazon S3。您还可以选择将 Elastic Beanstalk 配置为每小时复制服务器日志文件到 Amazon S3。通过编辑环境配置设置,可完成上述操作。

符合。可以使用 Amazon S3 来存储应用程序。最简单的方法是将 AWS 开发工具包作为应用程序可部署文件的一部分包括在内。例如,您可以将适用于 Java 的 AWS 开发工具包包括在应用程序 WAR 文件中。

AWS Elastic Beanstalk 不会限制您使用任何特定的数据持久化技术。您可以选择使用 Amazon Relational Database Service (Amazon RDS) 或 Amazon DynamoDB,也可以使用 Microsoft SQL Server、Oracle 或其他在 Amazon EC2 上运行的关系数据库。

Elastic Beanstalk 可以自动预置 Amazon RDS 数据库实例。应用程序可通过环境变量来了解有关数据库实例连接的信息。要详细了解如何为您的环境配置 RDS 数据库实例,请参阅《Elastic Beanstalk 开发人员指南》。

如果您使用 AWS Elastic Beanstalk,则无需修改。使用 Elastic Beanstalk,您可以在环境配置中指定连接信息。通过从应用程序代码中提取连接字符串,可以轻松地配置不同的 Elastic Beanstalk 环境来使用不同的数据库。

安全性

默认情况下,您的应用程序会在 myapp.elasticbeanstalk.com 中公开,可供任何用户访问。您可以使用 Amazon VPC 在您定义的虚拟网络中预配置私有、隔离的应用程序部分。可通过特定的安全组规则、网络 ACL 和自定义路由表将该虚拟网络设置为私有。您还可以通过更改 EC2 安全组设置,轻松地控制是否向应用程序服务器传送其他传入流量 (如 SSH)。

可以。您可以在 VPC 内运行您的应用程序。有关更多详细信息,请参阅《AWS Elastic Beanstalk 开发人员指南》。

有关 AWS 安全性的更多信息,请参阅《Amazon Web Services:安全过程概述》文档,或访问我们的安全中心。

符合。如果 IAM 用户具有相应的权限,可以立即与 AWS Elastic Beanstalk 交互。

IAM 允许您集中管理用户和组。您可以控制哪些 IAM 用户能够访问 AWS Elastic Beanstalk,并将操作员的权限限制为只读访问 Elastic Beanstalk,这样他们将不能对 Elastic Beanstalk 资源执行操作。您账户下的所有用户活动将汇总为一个 AWS 账单。

您可以使用 IAM 控制台、IAM 命令行界面 (CLI) 或 IAM API 来预置 IAM 用户。默认情况下,IAM 用户在获得权限前不能访问 AWS 服务。

您可以使用策略授予 IAM 用户对服务的访问权限。要简化 AWS Elastic Beanstalk 访问权限的授与过程,您可以使用 IAM 控制台中的策略模板之一来提供帮助。Elastic Beanstalk 提供两种模板:只读访问权限模板和完整访问权限模板。只读模板授与对 Elastic Beanstalk 资源的读取权限。完整访问权限模板授予对所有 Elastic Beanstalk 操作的完整访问权限,还会授予对 Elastic Load Balancing、Auto Scaling 和 Amazon S3 等依赖性资源的管理权限。您也可以使用 AWS Policy Generator 来创建自定义策略。有关更多详细信息,请参阅《AWS Elastic Beanstalk 开发人员指南》。

符合。您可以允许或拒绝对特定 AWS Elastic Beanstalk 资源(如应用程序、应用程序版本和环境)的访问。

IAM 用户在根账户下创建的所有资源归根账户所有,费用记入根账户。

根账户对任何 IAM 用户在该账户下启动的所有 AWS Elastic Beanstalk 环境具有完整的访问权限。如果使用 Elastic Beanstalk 模板向 IAM 用户授予只读权限,则该用户可以查看所有应用程序、应用程序版本、环境及该账户下关联的所有资源。如果使用 Elastic Beanstalk 模板向 IAM 用户授予完整访问权限,则该用户可以创建、修改和终止该账户下的任何 Elastic Beanstalk 资源。

符合。IAM 用户可以使用其用户名和密码访问 AWS Elastic Beanstalk 控制台。

符合。IAM 用户可以使用其访问密钥和机密密钥执行使用 Elastic Beanstalk API 的操作。

符合。IAM 用户可以通过 AWS Elastic Beanstalk 命令行界面 (CLI) 使用其访问密钥和秘密密钥执行操作。

托管平台更新

您可以选择让 AWS Elastic Beanstalk 环境在特定维护时段内自动更新为运行您应用程序的底层平台的最新版本。Elastic Beanstalk 会通过更新操作系统、Web 和应用程序服务器以及语言和框架来定期发布新版本的支持平台 (Java、PHP、Ruby、Node.js、Python、.NET、Go 和 Docker)。

要让 Elastic Beanstalk 自动管理您的平台更新,您必须在 Elastic Beanstalk 控制台的“Configuration”选项卡中启用托管平台更新,或者使用 EB CLI 或 API。启用该功能后,您便可配置允许的更新类型及更新时间。

AWS Elastic Beanstalk 可以为新修补程序和次要平台版本自动执行平台更新。Elastic Beanstalk 不会自动执行主要平台版本更新 (例如 Java 7 Tomcat 7 到 Java 8 Tomcat 8),因为这些更新包含向后不兼容的更改,且需要进行额外测试。在这些情况下,您必须手动进行更新。

AWS Elastic Beanstalk 平台使用以下模式进行版本控制:MAJOR.MINOR.PATCH(例如 2.0.0)。各个部分按如下方式递增:

存在不兼容的更改时,MAJOR 版本递增。

存在以向后兼容方式添加的额外功能时,MINOR 版本递增。

存在向后兼容的错误修复时,PATCH 版本递增。

您可以使用 AWS Elastic Beanstalk 管理控制台、API 或 CLI 随时执行主要版本更新。您可以使用以下选项来执行主要版本更新:

就地更新现有环境。请参阅“更新 Elastic Beanstalk 环境的平台版本”。

使用新平台版本创建现有环境的克隆版本。请参阅“克隆环境”,了解更多信息。

使用不可变的部署机制应用更新,以确保在已安装更新的 Amazon EC2 的并行队列在可替换现有实例 (替换后会随即被终止) 之前,不对现有环境进行任何更改。此外,如果 Elastic Beanstalk 运行状况系统在更新期间检测到任何问题,则会将流量重定向至现有的实例队列,以最大限度地降低对应用程序最终用户的影响。

由于托管平台更新使用不可变的部署机制来执行更新,因此您的应用程序在维护时段内可用,并且用户也不会因为更新而受到影响。

托管平台更新功能不收取额外费用。您只需为更新期间需要执行更新的额外 EC2 实例支付费用。

维护时段指每周两个小时的时间段,在此期间,如果托管平台更新已启用且新平台版本已发布,则 AWS Elastic Beanstalk 将会启动平台更新。例如,如果您选择的维护时段开始于每个星期日的凌晨 2 点,则 AWS Elastic Beanstalk 将在每个星期日凌晨 2 点到 4 点之间启动平台更新。请注意,更新可能会在维护时段结束后完成,具体取决于您的应用程序配置。

维护时段是根据环境设置的,以便您针对不同的应用程序组件或应用程序设置不同的维护时段。这样一来,如果您不希望应用程序的多个组件同时更新,则可交错进行环境更新。如果您启用了托管平台更新但没有指定维护时段,则系统将为您的环境分配一个每周 2 小时的默认时段。如果您想更改系统代您执行维护的时间,只需在 AWS 管理控制台中修改,或使用 UpdateEnvironment API 修改托管更新配置即可。

您将通过 AWS 管理控制台、论坛公告和发行说明收到有关可用新平台版本的通知。

在 AWS Elastic Beanstalk 发行说明页面上可找到有关平台版本间变更的详细信息。

在进行托管更新期间,您只能执行“中止”这一项操作。执行此操作后,系统将立即停止更新并回退到上一版本。

您的环境始终会根据您所选的级别(次要 + 修补程序或仅修补程序)更新为可用的最新版本。

有关所有托管平台更新的详细信息均可在事件页面上找到,且标记有“MAINTENANCE”事件类型。

根据语言/框架供应商或核心团队的版本和修补程序的频率和内容,以及我们的平台设计团队对这些版本和修补程序的彻底审查结果,指定年度内的版本发布次数会有所不同。

AWS Graviton 支持

要在 Elastic Beanstalk 控制台上使用基于 arm64 处理器部署应用程序,您可以从配置更多选项设置的容量选项卡中选择处理器架构和实例类型。

要使用 Elastic Beanstalk CLI、AWS CLI、CFN 或 AWS CDK 部署应用程序,请参阅 Elastic Beanstalk 开发人员指南

如果工作负载使用 Node.js、Python、Tomcat、PHP 或 Ruby 等解释编程语言,则无需重新编译工作负载即可使用 Graviton。如果对工作负载使用 Go 或 .Net Core,则需要更新 arm64 实例类型的构建命令。您还需要重新编译二进制依赖项或使用 arm64 兼容版本的二进制依赖项。如果使用 Docker,则 Docker 镜像必须为多架构,并且支持部署到 x86 和 arm64。

Elastic Beanstalk 在 64 位 Amazon Linux 2 上支持 Graviton 用于各种平台和分支。有关完整列表,请参阅文档

您可以将工作负载轻松转移到 Graviton,并在以下使用案例中利用性能和成本优势:主要基于开源技术构建的基于 Linux 的工作负载;容器化和基于微服务的应用程序,例如 Docker 和 MC Docker;用 Java、Python、.NET Core、node.js 和 PHP 等可移植编程语言编写的应用程序;编译的 C/C++、Rust 或 Go 应用程序;在 Linux 上运行的 .NET Core (v3.1+) 工作负载;多线程工作负载;非统一内存访问 (NUMA) 敏感型工作负载;以及 arm64 原生软件开发和测试。

计费

对于 AWS Elastic Beanstalk,您只需为存储和运行应用程序实际使用的 AWS 资源付费,没有额外费用。

您只需按实际使用量付费,所有 AWS 资源都没有最低收费。有关 Amazon EC2 定价信息,请访问 EC2 详细信息页面上的定价部分。有关 Amazon S3 定价信息,请访问 S3 详细信息页面上的定价部分。您可以使用 AWS 简易结算器来估算不同应用程序大小的账单。

在 Amazon Web Services 网站上,您可以随时登录您的 Amazon Web Services 账户,并选择您的 Web 服务账户下的账户活动,查看当前账单期的费用。

支持

符合。对于与 AWS Elastic Beanstalk 的使用相关的问题,AWS Support 都提供支持。有关其他详细信息和定价,请参阅 AWS Support 页面。

通过 AWS Elastic Beanstalk 开发论坛,您可以了解广泛的现有 AWS 社区知识,以帮助进行开发。