

# 从 CodeDeploy 蓝绿服务部署迁移到 Amazon ECS 蓝绿服务部署
<a name="migrate-code-deploy-to-ecs-blue-green"></a>

 通过使用 Amazon ECS 蓝绿部署，您可以进行服务更改并测试，然后再在生产环境中实施服务更改。

必须为 Amazon ECS 蓝绿部署创建新的生命周期挂钩。

## 先决条件
<a name="migrate-code-deploy-to-ecs-blue-green-prerequisites"></a>

在开始蓝绿部署之前，执行以下操作。

1. 将 Amazon ECS CodeDeploy IAM 角色替换为以下权限。
   + 有关 Elastic Load Balancing 权限的信息，请参阅[适用于负载均衡器的 Amazon ECS 基础设施 IAM 角色](AmazonECSInfrastructureRolePolicyForLoadBalancers.md)。
   + 有关最低权限的更多信息，请参阅 [Amazon ECS 蓝绿部署中 Lambda 函数所需的权限](blue-green-permissions.md)。

1. 关闭 CodeDeploy 自动化。有关更多信息，请参阅《CodeDeploy 用户指南》**中的[在 CodeDeploy 中使用部署组](https://docs.amazonaws.cn/codedeploy/latest/userguide/deployment-groups.html)。

1. 确保拥有 CodeDeploy 蓝绿部署中的以下信息。可在 Amazon ECS 蓝绿部署中重复使用以下信息：
   + 生产目标组
   + 生产侦听器
   + 生产规则
   + 测试目标组

     这是绿色服务修订版的目标组。

1. 确保应用程序负载均衡器目标组与侦听器规则正确关联：
   + 如果不使用测试侦听器，则两个目标组（生产和测试）都必须与生产侦听器规则相关联。
   + 如果使用测试侦听器，则必须将一个目标组关联到生产侦听器规则，并将另一个目标组关联到测试侦听器规则。

   如果未满足此要求，服务部署将失败并出现以下错误：`Service deployment rolled back because of invalid networking configuration. Both targetGroup and alternateTargetGroup must be associated with the productionListenerRule or testListenerRule.`

1. 确认服务没有正在进行的服务部署。有关更多信息，请参阅 [使用 Amazon ECS 服务部署查看服务历史记录](service-deployment.md)。

1. Amazon ECS 蓝绿部署要求服务使用以下功能之一：配置相应的资源。
   + 应用程序负载均衡器：有关更多信息，请参阅[适用于蓝绿部署、线性部署和金丝雀部署的应用程序负载均衡器资源](alb-resources-for-blue-green.md)。
   + 网络负载均衡器：有关更多信息，请参阅[适用于 Amazon ECS 蓝绿部署、线性部署和金丝雀部署的网络负载均衡器资源](nlb-resources-for-blue-green.md)。
   + Service Connect：有关更多信息，请参阅[适用于 Amazon ECS 蓝绿部署、线性部署和金丝雀部署的 Service Connect 资源](service-connect-blue-green.md)。

1. 决定是否要在 Amazon ECS 蓝绿部署的各个阶段为生命周期阶段运行 Lambda 函数。
   + 纵向扩展前
   + 纵向扩展后
   + 测试流量转移
   + 测试流量转移后
   + 生产流量转移
   + 生产流量转移后

   为每个生命周期阶段创建 Lambda 函数。有关更多信息，请参阅《Amazon Lambda 开发人员指南》**中的[使用控制台创建 Lambda 函数](https://docs.amazonaws.cn/lambda/latest/dg/getting-started.html#getting-started-create-function)。

有关更新服务部署控制器的更多信息，请参阅[更新 Amazon ECS 服务参数](update-service-parameters.md)。

## 过程
<a name="migrate-code-deploy-to-ecs-procedure"></a>

1. 在 [https://console.aws.amazon.com/ecs/v2](https://console.amazonaws.cn/ecs/v2) 打开控制台。

1. 在 **Clusters**（集群）页面上，选择集群。

   此时将显示集群详细信息页面。

1. 从**服务**选项卡中，选择服务。

   此时将显示服务详细信息页面。

1. 在横幅中，选择**更新部署控制器类型**。

   将显示**迁移部署控制器类型**页面。

1. 展开**新建**，然后指定以下参数。

   1. 对于**部署控制器类型**，选择 **ECS**。

   1. 对于**部署策略**，选择**蓝绿部署**。

   1. 对于**烘焙时间**，输入蓝色服务修订版和绿色服务修订版同时运行的时间。

   1. 要在生命周期阶段运行 Lambda 函数，请在**部署生命周期挂钩**下为每个唯一的 Lambda 函数执行以下操作：

      1. 选择**添加**。

         对每个要运行的唯一函数重复此操作。

      1. 对于 **Lambda 函数**，输入函数名称。

      1. 对于**角色**，选择在先决条件中创建的具有蓝绿权限的角色。

         有关更多信息，请参阅 [Amazon ECS 蓝绿部署中 Lambda 函数所需的权限](blue-green-permissions.md)。

      1. 对于**生命周期阶段**，选择 Lambda 函数运行的阶段。

      1.  （可选）对于**挂钩详细信息**，输入包含挂钩相关信息的键值对。

1. 展开 **Load Balancing**，然后配置以下内容：

   1. 对于**角色**，选择在先决条件中创建的具有蓝绿权限的角色。

      有关更多信息，请参阅 [Amazon ECS 蓝绿部署中 Lambda 函数所需的权限](blue-green-permissions.md)。

   1. 对于**侦听器**，从 CodeDeploy 蓝绿部署中选择生产侦听器。

   1. 对于**生产规则**，从 CodeDeploy 蓝绿部署中选择生产规则。

   1. 对于**测试规则**，从 CodeDeploy 蓝绿部署中选择测试规则。

   1. 对于**目标组**，从 CodeDeploy 蓝绿部署中选择生产目标组。

   1. 对于**备用目标组**，从 CodeDeploy 蓝绿部署中选择测试目标组。

1. 选择**更新**。

## 后续步骤
<a name="migrate-code-deploy-to-ecs-blue-green-next-steps"></a>
+ 更新服务以启动部署。有关更多信息，请参阅 [更新 Amazon ECS 服务](update-service-console-v2.md)。
+ 监控部署过程，确保其遵循蓝绿模式：
  + 创建绿色服务修订版并进行纵向扩展
  + 将测试流量路由到绿色修订（如果已配置）
  + 向绿色服务修订转移生产流量
  + 烘焙时间结束后，蓝色修订将终止