Amazon ECS 蓝绿服务部署工作流 - Amazon Elastic Container Service

Amazon ECS 蓝绿服务部署工作流

Amazon ECS 蓝绿部署过程遵循结构化方法,包含六个不同的阶段,可确保安全可靠地进行应用程序更新。在验证应用程序并将其从当前版本(蓝色环境)迁移到新版本(绿色环境)时,每个阶段都有其特定目的。

  1. 准备阶段:在现有的蓝色环境旁创建绿色环境。这包括配置新的服务修订版以及准备目标组。

  2. 部署阶段:将新的服务修订版部署到绿色环境。Amazon ECS 使用更新的服务修订版启动新任务,同时蓝色环境继续传送生产流量。

  3. 测试阶段:使用测试流量路由来验证绿色环境。应用程序负载均衡器将测试请求定向到绿色环境,而生产流量仍保留在蓝色环境中。

  4. 流量转移阶段:根据所配置的部署策略,将生产流量从蓝色环境转移到绿色环境。此阶段包括监控和验证检查点。

  5. 监控阶段:监控烘焙时间内的应用程序运行状况、性能指标和警报状态。检测到问题时将启动回滚操作。

  6. 完成阶段:根据配置,通过终止蓝色环境或针对潜在的回滚场景对其进行维护来完成部署。

工作流

下图阐明了全面的蓝绿部署工作流,显示了 Amazon ECS 与应用程序负载均衡器之间的交互:

展示 Amazon ECS 中蓝绿部署过程的综合图,包含详细的组件交互、流量转移阶段和监控检查点

增强型部署工作流包括以下详细步骤:

  1. 初始状态:蓝色服务(当前生产环境)处理 100% 的生产流量。应用程序负载均衡器只有一个侦听器,其规则可将所有请求路由到包含正常运行的蓝色任务的蓝色目标组。

  2. 绿色环境预置:Amazon ECS 使用更新的任务定义创建新任务。这些任务已注册到新的绿色目标组,但最初不会接收任何流量。

  3. 运行状况检查验证:应用程序负载均衡器对绿色任务执行运行状况检查。仅当绿色任务通过运行状况检查后,部署才会进入下一阶段。

  4. 测试流量路由:若已配置,则应用程序负载均衡器的侦听器规则会将特定的流量模式(例如带有测试标头的请求)路由到绿色环境进行验证,而生产流量仍将保留在蓝色环境中。这是由处理生产流量的同一个侦听器控制的,它将根据请求属性使用不同的规则。

  5. 生产流量转移:根据部署配置,流量从蓝色环境转移到绿色环境。在 ECS 蓝绿部署中,这是一种即时(一次性)转移,100% 的流量都将从蓝色环境转移到绿色环境。应用程序负载均衡器仅使用一个具有侦听器规则的侦听器,这些规则将根据权重控制蓝色目标组与绿色目标组之间的流量分配。

  6. 监控与验证:在整个流量转移过程中,Amazon ECS 会监控 CloudWatch 指标、警报状态和部署运行状况。如果检测到问题,将启动自动回滚触发器。

  7. 烘焙时间段:生产流量转移后,蓝色服务修订版和绿色服务修订版同时运行的持续时间。

  8. 蓝色环境终止:成功进行流量转移并验证后,将终止蓝色环境以释放集群资源,或将维护蓝色环境以实现快速回滚功能。

  9. 最终状态:绿色环境成为新的生产环境,可处理 100% 的流量。部署将标记为成功。

部署生命周期阶段

蓝绿部署过程会经历不同的生命周期阶段(即部署操作中的一系列事件,例如“生产流量转移后”),每个阶段都有特定职责和验证检查点。了解这些阶段有助于监控部署进度并有效排查问题。

每个生命周期阶段最多可持续 24 小时。建议将该值保持在 24 小时以内。这是因为异步进程需要时间来触发挂钩。当一个阶段达到 24 小时后,系统将超时,导致部署失败,然后会启动回滚。此外,CloudFormation 部署还有其他超时限制。尽管 24 小时的阶段限制仍然有效,但 CloudFormation 会对整个部署强制执行 36 小时的限制。如果整个过程未在 36 小时内完成,CloudFormation 将使部署失败,然后启动回滚。

生命周期阶段 描述 此阶段是否使用生命周期挂钩?
RECONCILE_SERVICE 仅当启动多个服务修订版处于活动状态的新服务部署时,才会发生此阶段。
PRE_SCALE_UP 绿色服务修订版尚未启动。蓝色服务修订版正在处理 100% 的生产流量。没有测试流量。
SCALE_UP 绿色服务修订版纵向扩展至 100% 并启动新任务的时间。此时绿色服务修订版不传送任何流量。
POST_SCALE_UP 绿色服务修订版已经启动。蓝色服务修订版正在处理 100% 的生产流量。没有测试流量。
TEST_TRAFFIC_SHIFT 蓝色服务修订版和绿色服务修订版正在运行。蓝色服务修订版可处理 100% 的生产流量。绿色服务修订版正在将测试流量从 0% 迁移到 100%。
POST_TEST_TRAFFIC_SHIFT 测试流量转移已完成。绿色服务修订版可处理 100% 的测试流量。
PRODUCTION_TRAFFIC_SHIFT 生产流量正在向绿色服务修订版转移。绿色服务修订版正在将生产流量从 0% 迁移到 100%。
POST_PRODUCTION_TRAFFIC_SHIFT 生产流量转移已完成。
BAKE_TIME 蓝色服务修订版和绿色服务修订版同时运行的持续时间。
CLEAN_UP 蓝色服务修订版已完全缩减至 0 个运行任务。在此阶段之后,绿色服务修订版将成为生产服务修订版。

每个生命周期阶段皆包含内置的验证检查点,必须通过这些检查点才能进入下一阶段。如果出现任何验证失败,则可以自动回滚部署以保持服务的可用性和可靠性。

当您使用 Lambda 函数时,该函数必须完成工作,或者在 15 分钟内返回 IN_PROGRESS。您可以使用 callBackDelaySeconds 来延迟对 Lambda 的调用。有关更多信息,请参阅 GitHub 上的 sample-amazon-ecs-blue-green-deployment-patterns 中的 app.py 函数