Amazon ECS 蓝绿服务部署工作流
Amazon ECS 蓝绿部署过程遵循结构化方法,包含六个不同的阶段,可确保安全可靠地进行应用程序更新。在验证应用程序并将其从当前版本(蓝色环境)迁移到新版本(绿色环境)时,每个阶段都有其特定目的。
-
准备阶段:在现有的蓝色环境旁创建绿色环境。这包括配置新的服务修订版以及准备目标组。
-
部署阶段:将新的服务修订版部署到绿色环境。Amazon ECS 使用更新的服务修订版启动新任务,同时蓝色环境继续传送生产流量。
-
测试阶段:使用测试流量路由来验证绿色环境。应用程序负载均衡器将测试请求定向到绿色环境,而生产流量仍保留在蓝色环境中。
-
流量转移阶段:根据所配置的部署策略,将生产流量从蓝色环境转移到绿色环境。此阶段包括监控和验证检查点。
-
监控阶段:监控烘焙时间内的应用程序运行状况、性能指标和警报状态。检测到问题时将启动回滚操作。
-
完成阶段:根据配置,通过终止蓝色环境或针对潜在的回滚场景对其进行维护来完成部署。
工作流
下图阐明了全面的蓝绿部署工作流,显示了 Amazon ECS 与应用程序负载均衡器之间的交互:
增强型部署工作流包括以下详细步骤:
-
初始状态:蓝色服务(当前生产环境)处理 100% 的生产流量。应用程序负载均衡器只有一个侦听器,其规则可将所有请求路由到包含正常运行的蓝色任务的蓝色目标组。
-
绿色环境预置:Amazon ECS 使用更新的任务定义创建新任务。这些任务已注册到新的绿色目标组,但最初不会接收任何流量。
-
运行状况检查验证:应用程序负载均衡器对绿色任务执行运行状况检查。仅当绿色任务通过运行状况检查后,部署才会进入下一阶段。
-
测试流量路由:若已配置,则应用程序负载均衡器的侦听器规则会将特定的流量模式(例如带有测试标头的请求)路由到绿色环境进行验证,而生产流量仍将保留在蓝色环境中。这是由处理生产流量的同一个侦听器控制的,它将根据请求属性使用不同的规则。
-
生产流量转移:根据部署配置,流量从蓝色环境转移到绿色环境。在 ECS 蓝绿部署中,这是一种即时(一次性)转移,100% 的流量都将从蓝色环境转移到绿色环境。应用程序负载均衡器仅使用一个具有侦听器规则的侦听器,这些规则将根据权重控制蓝色目标组与绿色目标组之间的流量分配。
-
监控与验证:在整个流量转移过程中,Amazon ECS 会监控 CloudWatch 指标、警报状态和部署运行状况。如果检测到问题,将启动自动回滚触发器。
-
烘焙时间段:生产流量转移后,蓝色服务修订版和绿色服务修订版同时运行的持续时间。
-
蓝色环境终止:成功进行流量转移并验证后,将终止蓝色环境以释放集群资源,或将维护蓝色环境以实现快速回滚功能。
-
最终状态:绿色环境成为新的生产环境,可处理 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 函数