Elastic Beanstalk 滚动环境配置更新 - AWS Elastic Beanstalk
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Elastic Beanstalk 滚动环境配置更新

配置更改要求替换实例时,Elastic Beanstalk 可以批量执行更新以避免在传播更改时停机。在滚动更新期间,容量只按单批次大小减少,而您可以配置这个大小。Elastic Beanstalk 禁用一批实例,终止这些实例,然后启动一批具有新配置的实例。在新批次开始处理请求后,Elastic Beanstalk 将移至下一个批次。

滚动配置更新批次可以基于时间定期处理 (每个批次之间有延迟) 或根据运行状况来处理。对于基于时间的滚动更新,您可以配置 Elastic Beanstalk 在启动完一批实例后和移至下一个批次前所等待的时间。此暂停时间可让您的应用程序引导并开始处理请求。

当采用基于运行状况的滚动更新时,Elastic Beanstalk 会等一个批次中的实例通过运行状况检查之后再继续下一个批次。实例的运行状况由运行状况报告系统确定,可以是基本运行状况或增强型运行状况。当采用基本运行状况时,一旦某个批次中的所有实例都通过 Elastic Load Balancing (ELB) 运行状况检查,该批次即被视为运行状况良好。

当采用增强型运行状况报告时,某个批次中的所有实例必须先通过连续的多次运行状况检查,Elastic Beanstalk 才能移至下一个批次。除了 ELB 运行状况检查(仅检查您的实例)之外,增强型运行状况还监视应用程序日志和环境中其他资源的状态。在采用增强型运行状况报告的 Web 服务器环境中,所有实例都必须在 2 分钟内通过 12 项运行状况检查 (对于工作线程环境,则必须在 12 分钟内通过 18 次检查)。如果任何实例未能通过一项运行状况检查,则将重置计数。

如果某个批次在滚动更新超时时间内(默认为 30 分钟)未变成正常运行,则会取消更新。滚动更新超时时间是一个在 aws:autoscaling:updatepolicy:rollingupdate 命名空间中可用的配置选项。如果应用程序未通过运行状况检查(即未处于 Ok 状态),但在另一级别很稳定,您可以在 aws:elasticbeanstalk:healthreporting:system 命名空间中设置 HealthCheckSuccessThreshold 选项,从而更改 Elastic Beanstalk 将实例视为运行状况良好的级别。

如果滚动更新过程失败,Elastic Beanstalk 会启动另一个滚动更新以回滚到之前的配置。运行状况检查失败或启动新实例导致超出账户配额都可能导致滚动更新失败。例如,如果达到了 Amazon EC2 实例数量的配额,在尝试配置一批新实例时滚动更新可能失败。在这种情况下,回滚也会失败。

回滚失败会终止更新过程,并令您的环境运行状况不佳。未处理的批次仍然使用旧的配置运行实例,而成功完成的批次具有新配置。要在回滚失败后修复环境,首先要解决导致更新失败的潜在问题,然后再次启动环境更新。

替代方法是将应用程序的新版本部署到不同的环境,然后执行别名记录交换重定向流量,这样不会产生停机时间。有关更多信息,请参阅使用 Elastic Beanstalk 进行蓝/绿部署

滚动更新与滚动部署

如果更改需要为环境配置新 Amazon EC2 实例的设置,则会发生滚动更新。这包括对 Auto Scaling 组配置的更改(如实例类型和密钥对设置)和对 VPC 设置的更改。在滚动更新中,在配置新批次替换每个旧批次前,都会终止旧实例批次。

只要您部署应用程序就会发生滚动部署,通常无需替换环境中的实例就可以执行滚动部署。Elastic Beanstalk 将每个批次取出服务,部署新的应用程序版本,然后将其放回服务中。

例外情况是,在部署新应用程序版本的同时更改需要替换实例的设置。例如,如果您更改源包中的配置文件中的密钥名称设置并将其部署到环境,就会触发滚动更新。它不是将新应用程序版本部署到现有实例的每个批次,而是用新配置对新的实例批次进行配置。在这种情况下,不会发生单独部署,因为新应用程序版本采用新实例。

只要将新实例作为环境更新的一部分进行预配置,就有一个部署阶段,在此阶段,应用程序的源代码将部署到新实例,并且将应用任何修改实例上的操作系统或软件的配置设置。部署运行状况检查设置忽略运行状况检查正常阈值命令超时)还在部署阶段应用于基于运行状况的滚动更新和不可变更新。

配置滚动更新

您可以在 Elastic Beanstalk 控制台中启用和配置滚动更新。

启用滚动更新

  1. 打开 Elastic Beanstalk 控制台,然后在 Regions (区域) 列表中选择您的 AWS 区域。

  2. 在导航窗格中,选择 Environments (环境),然后从列表中选择环境的名称。

    注意

    如果您有多个环境,请使用搜索栏筛选环境列表。

  3. 在导航窗格中,选择 Configuration (配置)

  4. Rolling updates and deployments (滚动更新和部署) 配置类别中,选择 Edit (编辑)

  5. 配置更新部分中,对于滚动更新类型,选择一个滚动选项。

    
            修改滚动更新和部署配置页面上的“配置更新”部分
  6. 选择批处理大小最小容量暂停时间设置。

  7. 选择 Apply

滚动更新和部署页面的配置更新部分提供以下滚动更新选项:

  • Rolling update type (滚动更新类型) - Elastic Beanstalk 在完成一个实例批次更新后等待多长时间再进行下一批次,以允许这些实例完成引导启动并开始提供流量服务。从以下选项中进行选择:

    • Rolling based on Health (根据运行状况滚动) - 等待直至当前批次中的实例运行状况良好,然后再将这些实例投入使用并开始下一个批次。

    • Rolling based on Time (基于时间滚动) - 指定在开始下一个批次之前,在启动新实例和将实例投入使用之间等待的时间。

    • Immutable (不可变的) - 通过执行不可变更新将配置更改应用于新实例组。

  • Batch size (批处理大小) - 每个批次要替换的实例的数量,介于 110000 之间。默认情况下,此值是 Auto Scaling 组的最小大小的三分之一,向上舍入取整。

  • Minimum capacity (最小容量) - 在更新其他实例时要保持运行状态的最小实例数,介于 09999 之间。默认值为 Auto Scaling 组的最小大小,或 Auto Scaling 组的最大大小减一(取两者中较小的值)。

  • Pause time (暂停时间)(仅限基于时间的滚动更新)- 更新一个批次后到继续处理下一批次前等待的时间,以允许您的应用程序开始接收流量。介于 0 秒到一小时之间。

aws:autoscaling:updatepolicy:rollingupdate 命名空间

您也可以使用 aws:autoscaling:updatepolicy:rollingupdate 命名空间中的配置选项来配置滚动更新。

使用 RollingUpdateEnabled 选项可启用滚动更新;使用 RollingUpdateType 可选择更新类型。RollingUpdateType 支持下列值:

  • Health - 等待直至当前批次中的实例运行状况良好,然后再将这些实例投入使用并开始下一个批次。

  • Time - 指定在开始下一个批次之前,在启动新实例和将实例投入使用之间等待的时间。

  • Immutable - 通过执行不可变更新将配置更改应用于新实例组。

启用滚动更新时,设置 MaxBatchSizeMinInstancesInService 选项以配置每个批次的大小。对于基于时间的滚动更新和基于运行状况的滚动更新,您也可以分别配置 PauseTimeTimeout

例如,要一次性启动最多 5 个实例并使至少 2 个实例保持使用状态,同时在各个批次之间等待 5 分 30 秒的时间,请指定以下选项和值。

例 .ebextensions/timebased.config

option_settings: aws:autoscaling:updatepolicy:rollingupdate: RollingUpdateEnabled: true MaxBatchSize: 5 MinInstancesInService: 2 RollingUpdateType: Time PauseTime: PT5M30S

要启用基于运行状况的滚动更新,并将每个批次的超时设置为 45 分钟,请指定以下选项和值。

例 .ebextensions/healthbased.config

option_settings: aws:autoscaling:updatepolicy:rollingupdate: RollingUpdateEnabled: true MaxBatchSize: 5 MinInstancesInService: 2 RollingUpdateType: Health Timeout: PT45M

TimeoutPauseTime 值必须以 ISO8601 持续时间格式指定:PT#H#M#S,其中各 # 分别是小时数、分钟数或秒数。

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