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

部署策略和设置

AWS Elastic Beanstalk 提供了多个有关如何处理部署的选项,包括部署策略 (All at onceRollingRolling with additional batchImmutable) 以及可用于在部署期间配置批大小和运行状况检查行为的选项。默认情况下,如果您使用控制台或 EB CLI 创建环境,则此环境使用滚动部署;如果您使用其他客户端 (API、开发工具包或 AWS CLI) 创建环境,则环境使用一次性部署。

利用滚动部署,Elastic Beanstalk 会将环境的 EC2 实例拆分为几个批次并每次将新版本的应用程序部署到一个批次,让环境中其余的实例运行旧版本的应用程序。在滚动部署期间,一些实例通过旧版本的应用程序处理请求,而已完成批次中的实例通过新版本处理其他请求。

如果您需要在部署期间保持完整容量,可以配置环境以启动新的实例批次,然后再禁用任何实例。此选项称作附加批次滚动部署。在部署完成后,Elastic Beanstalk 将终止附加的实例批次。

不可变的部署执行不可变的更新,以启动在单独的 Auto Scaling 组中运行新版本应用程序的一组完整的新实例以及运行旧版本的实例。不可变的部署会阻止由部分完成的滚动部署导致的问题。如果新实例未通过运行状况检查,则 Elastic Beanstalk 将终止这些实例,并使原始实例保持不变。

如果您的应用程序未通过所有运行状况检查,但仍能够以较低级别的运行状况正常运行,则您可以修改 Healthy threshold 选项,使实例能够通过较低级别状况 (例如 Warning) 的运行状况检查。如果您的部署因未通过运行状况检查而失败,并且您需要强制实施更新而不管运行状况如何,请指定 Ignore health check 选项。

如果您指定滚动更新的批大小,则 Elastic Beanstalk 还将使用该值来滚动重新启动应用程序。在您需要重新启动运行于环境实例上的代理和应用程序服务器而不会导致停机时,可使用滚动重新启动。

配置应用程序部署

环境管理控制台中,通过编辑环境的 Configuration 页面上的 Updates and Deployments 来启用和配置批量应用程序版本部署。

配置部署 (控制台)

  1. 打开 Elastic Beanstalk 控制台

  2. 导航到您的环境的管理页

  3. 选择 Configuration

  4. 滚动更新和部署配置卡上,选择修改

  5. Application Deployments 部分中,选择 Deployment policy、批设置和运行状况检查选项。

  6. 选择 Apply

滚动更新和部署页面的应用程序部署部分提供以下滚动更新选项:

  • Deployment policy - 从以下部署选项中选择:

    • All at once - 将新版本同时部署到所有实例。在执行部署时,环境中的所有实例将短时间禁用。

    • Rolling - 批量部署新版本。在部署阶段,每个批次都将禁用,以便按批次中的实例数减少环境的容量。

    • Rolling with additional batch - 批量部署新版本,但首先启动新的实例批次以确保部署过程中能够使用完整容量。

    • Immutable - 通过执行不可变更新,将新版本部署到新实例组。

  • 批处理大小 – 每个批次中要部署的实例集大小。

    选择百分比来配置占 Auto Scaling 组中的 EC2 实例总数的百分比 (最高 100%),或选择固定来配置固定数量的实例 (最高您的环境的 Auto Scaling 配置中的最大实例计数)。

 Elastic Beanstalk 应用程序部署配置页

部署首选项部分包含与运行状况检查相关的选项。

  • Ignore health check - 当某个批次在 Command timeout 内未能达到良好的运行状况时,阻止部署回滚。

  • Healthy threshold - 减小在滚动部署、滚动更新和不可变更新期间将实例视为良好运行的阈值。

  • 命令超时 – 在取消部署或继续下一批次 (如果设置了忽略运行状况检查) 前等待实例达到良好运行状况的时间 (以秒为单位)。

Elastic Beanstalk 应用程序部署配置页面

滚动部署的工作方式

在处理某个批次时,Elastic Beanstalk 会将该批次中的所有实例从负载均衡器中分离,部署新的应用程序版本,然后重新挂载这些实例。如果您已启用连接耗尽,则 Elastic Beanstalk 将在开始部署之前耗尽来自每个批次中的 EC2 实例的现有连接。

在某个批次中的实例重新挂载到负载均衡器之后,Elastic Load Balancing 将等到它们通过最小数量的 Elastic Load Balancing 运行状况检查 (Healthy check count threshold 阈值),然后开始将流量路由到它们。如果未配置运行状况检查 URL,这可以很快发生,因为实例一旦能接受 TCP 连接便会立即通过运行状况检查。如果配置了运行状况检查 URL,则在更新后的实例返回 200 OK 状态代码来响应对运行状况检查 URL 的 HTTP GET 请求之前,负载均衡器不会将流量路由到这些实例。

Elastic Beanstalk 将等到一个批次中的所有实例的运行状况正常之后才会转到下一个批次。当采用基本运行状况报告时,实例运行状况取决于 Elastic Load Balancing 运行状况检查状态。当某个批次中的所有实例均已通过 Elastic Load Balancing 认为足够数量的运行状况检查之后,该批次便已完成。如果启用增强型运行状况报告,则 Elastic Beanstalk 需考虑几个其他因素,包括传入请求的结果。当采用增强型运行状况报告时,对于 Web 服务器环境,所有实例都必须在 2 分钟内通过 12 次连续的运行状况检查并呈现正常状态;对于工作线程环境,则必须在 3 分钟内通过 18 次运行状况检查。

如果一批实例在命令超时范围内未转变为运行状况良好状态,则表示部署失败。在部署失败后,请检查环境中实例的运行状况以了解有关失败原因的信息。然后使用固定或已知良好版本的应用程序再次执行部署以进行回滚。

如果在一批或多批实例成功完成后部署失败,则已完成的批次将运行新版本的应用程序,而待处理的批次则会继续运行旧版本。您可以通过控制台中的 Health 页面识别在环境中的实例上运行的版本。此页面会显示在环境中的每个实例上执行的最新部署的部署 ID。如果您终止失败部署中的实例,Elastic Beanstalk 将从最新的成功部署中选择运行应用程序版本的实例来替换它们。

aws:elasticbeanstalk:command 命名空间

您也可以使用 aws:elasticbeanstalk:command 命名空间中的配置选项来配置滚动部署。

使用 DeploymentPolicy 选项可设置部署类型。支持下列值:

  • AllAtOnce 禁用滚动部署并且始终同时部署到所有实例。

  • Rolling 启用标准滚动部署。

  • RollingWithAdditionalBatch 在开始部署之前将启动额外的实例批次,以便保持完整容量。

  • Immutable 对每次部署执行不可变更新

启用滚动部署时,设置 BatchSizeBatchSizeType 选项以配置每个批次的大小。例如,要部署每个批次中所有实例的 25%,请指定以下选项和值。

例 .ebextensions/rolling-updates.config

option_settings: aws:elasticbeanstalk:command: DeploymentPolicy: Rolling BatchSizeType: Percentage BatchSize: 25

要部署到每个批次中的 5 个实例 (不管运行的实例数量如何),并且在将任何实例从服务中拉出之前启动额外的批次 (5 个实例) 来运行新版本,请指定以下选项和值。

例 .ebextensions/rolling-additionalbatch.config

option_settings: aws:elasticbeanstalk:command: DeploymentPolicy: RollingWithAdditionalBatch BatchSizeType: Fixed BatchSize: 5

要对运行状况检查阈值为警告的每个部署执行不可变更新,并在批次中的实例未在 15 分钟超时时间内通过运行状况检查的情况下继续部署,请指定以下选项和值。

例 .ebextensions/immutable-ignorehealth.config

option_settings: aws:elasticbeanstalk:command: DeploymentPolicy: Immutable HealthCheckSuccessThreshold: Warning IgnoreHealthCheck: true Timeout: "900"

EB CLI 和 Elastic Beanstalk 控制台控制台会对前面的选项应用建议的值。如果您需要使用配置文件来配置相同的项,则必须删除这些设置。有关更多信息,请参阅 建议值