使用 进行蓝/绿部署 CodeDeploy - Amazon ECS
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 进行蓝/绿部署 CodeDeploy

蓝/绿 部署类型使用由 CodeDeploy 控制的蓝/绿部署模型。此部署类型让您可以先验证服务的新部署,然后再向其发送生产流量。有关更多信息,请参阅 中的什么是 CodeDeploy AWS CodeDeploy User Guide?

在蓝色/绿色部署过程中,有三种可转移流量的方法:

  • Canary 部署 — 流量将通过两次递增进行转移。您可以从预定义的 Canary 选项中选择,这些选项指定在第一次增量中转移到更新后的任务集的流量百分比以及以分钟为单位的间隔;然后指定在第二次增量中转移剩余的流量。

  • 线性部署 — 流量使用相等的增量转移,在每次递增之间间隔的分钟数相同。您可以从预定义的线性选项中进行选择,这些选项指定在每次增量中转移的流量百分比以及每次增量之间的分钟数。

  • 一次性 — 所有流量均从原始任务集一次性地转移到更新后的任务集。

以下是在服务使用蓝/绿部署类型时,CodeDeploy 使用的 Amazon ECS 的组件:

CodeDeploy application

CodeDeploy 资源的集合。这包括一个或多个部署组。

CodeDeploy 部署组

部署设置。这包括以下内容:

  • Amazon ECS 集群和服务

  • 负载均衡器目标组和侦听器信息

  • 部署回滚策略

  • 流量重新路由设置

  • 原始修订终止设置

  • 部署配置

  • CloudWatch可设置为停止部署的 警报配置

  • SNS 或 CloudWatch Events 通知设置

有关更多信息,请参阅 中的https://docs.amazonaws.cn/codedeploy/latest/userguide/deployment-groups.html使用部署组AWS CodeDeploy User Guide

CodeDeploy 部署配置

指定在部署期间 CodeDeploy 如何将生产流量路由到您的替换任务集。提供了以下预定义的线性和 Canary 部署配置。您还可以创建自定义的线性和 Canary 部署。有关更多信息,请参阅 中的使用部署配置AWS CodeDeploy User Guide

部署配置

描述

CodeDeployDefault.ECSLinear10PercentEvery1Minutes

每分钟转移 10% 的流量,直到所有流量转移完毕。

CodeDeployDefault.ECSLinear10PercentEvery3Minutes

每隔 3 分钟转移 10% 的流量,直到所有流量转移完毕。

CodeDeployDefault.ECSCanary10percent5Minutes

在第一次增量中转移 10% 的流量。剩余的 90% 部署在稍后的五分钟内进行转移。

CodeDeployDefault.ECSCanary10percent15Minutes

在第一次增量中转移 10% 的流量。其余 90% 部署在 15 分钟后进行转移。

CodeDeployDefault.ECSAllAtOnce

将所有流量一次性转移到更新后的 Amazon ECS 容器。

Revision

修订是 CodeDeploy 应用程序规范文件(AppSpec 文件)。在 AppSpec 文件中,指定任务定义的完整 ARN 以及在创建新部署时要将流量路由到的替换任务集的容器和端口。容器名称必须是任务定义中引用的容器名称之一。如果在服务定义中更新了网络配置或平台版本,则还必须在 AppSpec 文件中指定这些详细信息。您也可以指定要在部署生命周期事件期间运行的 Lambda 函数。Lambda 函数允许您在部署期间运行测试和返回指标。有关更多信息,请参阅 中的 https://docs.amazonaws.cn/codedeploy/latest/userguide/reference-appspec-file.htmlAppSpec 文件参考AWS CodeDeploy User Guide

蓝/绿部署注意事项

使用蓝/绿部署类型时,请考虑以下内容:

  • 在初次创建使用蓝/绿部署类型的 Amazon ECS 服务时,将创建一个 Amazon ECS 任务集。

  • 您必须将该服务配置为使用 应用程序负载均衡器 或 网络负载均衡器。不支持 传统负载均衡器。以下是负载均衡器要求:

    • 您必须将生产侦听器添加到用于路由生产流量的负载均衡器。

    • 可以将可选的测试侦听器添加到负载均衡器,这用于路由测试流量。如果您指定了测试侦听器,则在部署期间 CodeDeploy 会将测试流量路由到替换任务集。

    • 生产和测试侦听器必须属于同一负载均衡器。

    • 您必须为负载均衡器定义一个目标组。目标组通过生产侦听器将流量路由到服务中的原始任务集。

    • 使用 网络负载均衡器 时,仅支持 CodeDeployDefault.ECSAllAtOnce 部署配置。

  • 对于配置为使用服务 Auto Scaling 和蓝/绿部署类型的服务,在部署期间不会阻止 Auto Scaling,但在某些情况下,部署可能会失败。下面将更详细地介绍此行为。

    • 如果服务正在扩展并且部署启动,则会创建绿色任务集,并CodeDeploy等待一小时,以便绿色任务集达到稳定状态,并且 不会转移任何流量,直到它完成。

    • 如果服务正处于蓝/绿部署过程中并且发生扩展事件,则流量将继续转移 5 分钟。如果服务在 5 分钟内未达到稳定状态, CodeDeploy 将停止部署并将其标记为失败。

  • 使用 Fargate 启动类型或 CODE_DEPLOY 部署控制器类型的任务不支持 DAEMON 计划策略。

  • 当您最初创建 CodeDeploy 应用程序和部署组时,必须指定以下内容:

    • 您必须为负载均衡器定义两个目标组。一个目标组应为在创建 Amazon ECS 服务时为负载均衡器定义的初始目标组。第二个目标组的唯一要求是,它不能与服务所使用的负载均衡器之外的其他负载均衡器相关联。

  • 为 CodeDeploy 服务创建Amazon ECS部署时, 将在部署中CodeDeploy创建替换任务集(或绿色任务集)。如果您将测试侦听器添加到了负载均衡器,则 CodeDeploy 会将测试流量路由到替换任务集。此时您可以运行任何验证测试。然后,CodeDeploy 会根据部署组的流量重新路由设置将生产流量从原始任务集重新路由到替换任务集。

Amazon ECS 控制台体验

Amazon ECS 控制台中的服务创建和服务更新工作流程支持蓝/绿部署。

要创建使用蓝/绿部署类型的 Amazon ECS 服务,请参阅创建服务

要更新使用蓝/绿部署类型的现有 Amazon ECS 服务,请参阅更新服务

在使用 Amazon ECS 控制台创建使用蓝/绿部署类型的 Amazon ECS 服务时,将自动使用以下默认设置创建 Amazon ECS 任务集和以下 CodeDeploy 资源。

资源

默认设置

应用程序名称

AppECS-<cluster[:47]>-<service[:47]>

部署组名称

DgpECS-<cluster[:47]>-<service[:47]>

部署组负载均衡器信息

将负载均衡器生产侦听器、可选的测试侦听器和指定的目标组添加到部署组配置。

流量重新路由设置

流量重新路由 – 默认设置为 Reroute traffic immediately (立即重新路由流量)。您可以在 CodeDeploy 控制台上或通过更新 TrafficRoutingConfig 来更改该设置。有关更多信息,请参阅 中的 https://docs.amazonaws.cn/codedeploy/latest/APIReference/API_CreateDeploymentConfig.html AWS CodeDeploy API ReferenceCreateDeploymentConfig

原始修订终止设置

原始修订终止设置配置为在重新路由流量之后等待 1 小时再终止蓝色任务集。

部署配置

部署配置默认设置为 CodeDeployDefault.ECSAllAtOnce,这会一次性地将所有流量从蓝色任务集路由到绿色任务集。创建服务后,可以使用 AWS CodeDeploy 控制台更改部署配置。

自动回滚配置

如果部署失败,自动回滚设置配置为将其回滚。

要使用蓝/绿部署类型查看 Amazon ECS 服务的详细信息,请使用 控制台上的 DeploymentsAmazon ECS (部署) 选项卡。

要在 CodeDeploy 控制台中查看CodeDeploy部署组的详细信息,请参阅 CodeDeploy 中的使用 查看部署组详细信息AWS CodeDeploy User Guide

要在 CodeDeploy 控制台中修改CodeDeploy部署组的设置,请参阅 CodeDeploy 中的使用 更改部署组设置AWS CodeDeploy User Guide

提供了一个教程,其中演练使用蓝/绿部署类型创建服务所需的步骤。有关更多信息,请参阅教程 使用蓝色/绿色部署创建服务

为 AWS CloudFormation 增加了对执行蓝/绿部署的支持。有关更多信息,请参阅 Amazon ECS 中的使用 通过 CodeDeploy AWS CloudFormation AWS CloudFormation 用户指南执行蓝/绿部署。

蓝/绿部署所需的 IAM 权限

通过组合使用 Amazon ECS 和 Amazon ECS API 可进行 CodeDeploy 蓝/绿部署。IAM 用户必须对这些服务拥有适当权限,然后才能在 Amazon ECS中或通过 AWS 管理控制台 或开发工具包使用 AWS CLI 蓝/绿部署。

除了用于创建和更新服务的标准 IAM 权限之外,Amazon ECS 还需要以下权限。这些权限已添加到 AmazonECS_FullAccess IAM 策略。有关更多信息,请参阅AmazonECS_FullAccess

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codedeploy:CreateApplication", "codedeploy:CreateDeployment", "codedeploy:CreateDeploymentGroup", "codedeploy:GetApplication", "codedeploy:GetDeployment", "codedeploy:GetDeploymentGroup", "codedeploy:ListApplications", "codedeploy:ListDeploymentGroups", "codedeploy:ListDeployments", "codedeploy:StopDeployment", "codedeploy:GetDeploymentTarget", "codedeploy:ListDeploymentTargets", "codedeploy:GetDeploymentConfig", "codedeploy:GetApplicationRevision", "codedeploy:RegisterApplicationRevision", "codedeploy:BatchGetApplicationRevisions", "codedeploy:BatchGetDeploymentGroups", "codedeploy:BatchGetDeployments", "codedeploy:BatchGetApplications", "codedeploy:ListApplicationRevisions", "codedeploy:ListDeploymentConfigs", "codedeploy:ContinueDeployment", "sns:ListTopics", "cloudwatch:DescribeAlarms", "lambda:ListFunctions" ], "Resource": [ "*" ] } ] }
注意

除了运行任务和服务所需的标准 Amazon ECS 权限外,IAM 用户还需要 iam:PassRole 权限,以使用 IAM 角色执行任务。

CodeDeploy 需要调用 Amazon ECS API、修改 Elastic Load Balancing、调用 Lambda 函数和描述 CloudWatch 警报的权限,以及代表您修改服务的预期数量的权限。在创建使用蓝/绿部署类型的 Amazon ECS 服务之前,您必须先创建一个 IAM 角色 (ecsCodeDeployRole)。有关更多信息,请参阅Amazon ECS CodeDeploy IAM 角色

创建服务示例更新服务示例 IAM 策略示例说明 IAM 用户在 Amazon ECS上使用 AWS 管理控制台 蓝/绿部署所需的权限。