
亚马逊云科技(Amazon Web Services)针对亚马逊弹性容器服务(Amazon Elastic Container Service,简称 ECS)推出了一个新的内置功能:蓝绿部署。借助这项功能,开发团队既能安全地部署容器化应用程序,而且在出现问题时还能够近乎实时的回滚,这样就不需要使用 AWS CodeDeploy 实现复杂的变通方案了。
这项新功能解决了开发团队经常面临的一项挑战:以前在向 ECS 发布时,为了实现蓝绿功能,他们不得不构建和维护自定义工具。亚马逊首席开发大使、公告作者Donnie Prakoso解释说,“在规模比较大的情况下,开发团队需要花费宝贵的时间构建和维护没什么差异的部署工具,而这些时间本可以用于业务创新”。

蓝绿部署是一种软件发布策略,它维护两个相同的生产环境。现有的“蓝”环境继续服务于实时流量,当要部署新版本的应用程序时,就新建一个“绿”环境。在对绿环境进行彻底地测试并且监控没有问题之后,流量从蓝环境转移到绿环境,确保用户受到的干扰最小,并在需要时能够轻松地回滚到之前的版本。
在该公告发布之前,想要在 ECS 上实现蓝绿部署能力,亚马逊云科技的客户不得不依赖AWS CodeDeploy。这会带来额外的配置和设置复杂性。工程师们采用了各种方法来解决这个问题,包括在负载均衡器后面交换自动扩展组和更新自动扩展组的启动配置。虽然 CodeDeploy 方法功能齐全,但团队仍需要创建单独的 CodeDeploy 应用程序和部署组,并管理复杂的 IAM 角色。AWS CodeDeploy 管理蓝绿部署过程,但团队仍需手动配置负载均衡监听器和目标组。现在,亚马逊 ECS 自动编排整个工作流程,提供事件钩子,允许团队在将新版本软件暴露给最终用户之前,使用合成流量验证新版本。
对于这份新公告,来自 The Scale Factory 的 Chris Musther在LinkedIn上写道:“用 CodeDeploy 也可以,文档中有说明——只是这项新功能简化了这个过程,而且功能更丰富。”
这项新功能直接集成到了现有的 ECS 配置中,可以通过 ECS 控制台、AWS CLI 或基础设施即代码工具启用。用户可以配置在生产流量转移到绿环境后,多长时间内允许即时回滚到蓝环境,这个时间称为“烘焙时间”。每个服务修订版本都会保留不可变的配置,包括任务定义、负载均衡器设置和服务连接配置,以便回滚能够恢复到与之前的运行环境完全相同的环境。
在部署过程中,ECS 会在指定的生命周期阶段自动调用 Lambda 函数,允许对绿版本进行全面测试。新功能提供了六个部署生命周期钩子:扩展前、扩展后、生产流量转移、测试流量转移、生产流量转移后和测试流量转移后。这些钩子可以触发 AWS Lambda 函数执行自定义验证逻辑,例如合成测试、API 调用或指标查询,以检查应用程序健康状况、运行集成测试或验证性能指标,然后发出是否继续或中止部署的信号。
我的验证函数可以针对绿版本进行全面的测试——检查应用程序健康状况、运行集成测试或验证性能指标。
—— Donnie Prakoso
其他主要云服务提供商已经为不在自托管 Kubernetes 服务上运行的容器化应用程序提供了类似的蓝绿部署策略。微软 Azure通过Azure Container Apps提供蓝绿部署能力,使用容器应用修订、流量权重和修订标签来实现蓝绿部署。该平台允许用户创建蓝绿应用程序版本的实例,测试和验证新修订版本,然后相应地重定向流量。同样,为了实现蓝绿部署,Google Cloud Run 支持渐进式上线和回滚。
其他行业反响积极,不过一位 Reddit 评论者对繁忙服务切换的原子性进行了思考:
亚马逊云科技为 ECS 内置蓝/绿部署功能的举措很好,改变了零停机部署的游戏规则。我很好奇,在有负载的情况下,流量转移有多干净。
蓝绿部署能力包含在亚马逊 ECS 中,不收取额外费用。用户只需支付部署过程中使用的计算资源的费用。该功能在所有商业 AWS 区域均可用。
原文链接:
评论