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

不可变的环境更新

不可变环境更新是滚动更新的替代方法。不可变环境更新可确保安全高效地应用需要替换实例的配置更改。如果不可变环境更新失败,则回滚过程仅需要终止 Auto Scaling 组。另一方面,一次失败的滚动更新需要执行额外的滚动更新来回滚更改。

为了执行不可变环境更新,Elastic Beanstalk 在您环境的负载均衡器后面创建第二个临时 Auto Scaling 组以包含新实例。首先,Elastic Beanstalk 在新组中使用新配置启动单个实例。此实例与在之前配置中运行的原始 Auto Scaling 组中的所有实例一起,为流量提供服务。

第一个实例通过了运行状况检查后,Elastic Beanstalk 使用新配置启动额外的实例,这些实例与在原始 Auto Scaling 组中运行的实例数相匹配。当所有新实例均通过运行状况检查后,Elastic Beanstalk 会将这些实例传输到原始 Auto Scaling 组,并终止临时 Auto Scaling 组和旧实例。

注意

在不可变环境更新期间,当新 Auto Scaling 组中的实例开始处理请求并在终止原始 Auto Scaling 组的实例之前,您的环境在短时间内容量加倍。如果您的环境有许多实例,或者实例的按需限制较低,请确保您有足够的容量来执行不可变的环境更新。如果您已接近限制,请考虑改为使用滚动更新。

不可变更新需要增强型运行状况报告来评估更新期间您环境的运行状况。增强型运行状况报告将标准负载均衡器运行状况检查与实例监视结合在一起,确保运行新配置的实例成功处理请求

您还可以将不可变更新用作滚动部署的替代方法,用于部署应用程序的新版本。如果您配置 Elastic Beanstalk 来为应用程序部署使用不可变更新,在您每次部署应用程序的新版本时,它将替换您环境中的所有实例。如果不可变应用程序部署失败,Elastic Beanstalk 将通过终止新 Auto Scaling 组来立即还原更改。这可以防止在某些批次完成后,在滚动部署失败时出现部分队列部署。

如果不可变更新失败,则新实例在 Elastic Beanstalk 终止它们之前,会将包日志上传到 Amazon S3。Elastic Beanstalk 将来自失败不可变更新的日志在 Amazon S3 中保留一小时然后才删除,而不是针对包日志和尾日志的标准的 15 分钟。

注意

如果您为应用程序版本部署使用不可变更新,但未对配置使用,则在您尝试部署的应用程序版本包含通常会触发滚动更新的配置更改 (例如,更改实例类型的配置) 时,可能会遇到错误。为避免这一点,请在单独的更新中进行配置更改,或者为部署和配置更改同时配置不可变更新。

您不能与资源配置更改一起执行不可变更新。例如,您不能在更改需要实例替换的设置的同时更新其他设置,或者执行其配置文件会在源代码中更改配置设置或附加资源的不可变部署。如果您尝试更改资源设置 (例如,负载均衡器设置) 并同时执行不可变更新,Elastic Beanstalk 将返回错误。

如果资源配置更改不依赖于源代码更改或者实例配置,请在两个更新中执行它们。如果有依赖关系,请改为执行蓝/绿部署

配置不可变更新

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

启用不可变更新 (控制台)

  1. 打开 Elastic Beanstalk 控制台

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

  3. 选择 Configuration

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

  5. 配置更新部分中,将滚动更新类型设置为不可变的

    
            修改滚动更新和部署配置页面上的“配置更新”部分
  6. 选择 Apply

aws:autoscaling:updatepolicy:rollingupdate 命名空间

您还可以使用 aws:autoscaling:updatepolicy:rollingupdate 命名空间中的选项配置不可变更新。以下示例配置文件为配置更改启用不可变更新。

例 .ebextensions/immutable-updates.config

option_settings: aws:autoscaling:updatepolicy:rollingupdate: RollingUpdateType: Immutable

以下示例为配置更改和部署启用不可变更新。

例 .ebextensions/immutable-all.config

option_settings: aws:autoscaling:updatepolicy:rollingupdate: RollingUpdateType: Immutable aws:elasticbeanstalk:command: DeploymentPolicy: Immutable

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