如何对 Amazon ECS 上托管的服务执行蓝/绿部署?

上次更新日期:2021 年 1 月 22 日

我想对 Amazon Elastic Container Service (Amazon ECS) 上托管的服务执行蓝/绿部署。

简短描述

在按照步骤执行蓝/绿部署之前,请确保您具备以下条件:

解决方法

创建 AWS Identity and Access Management (IAM) 服务角色

在对 Amazon ECS 中的 AWS CodeDeploy 使用蓝/绿部署类型之前,您必须授予 CodeDeploy 服务代表您更新 Amazon ECS 服务的权限。

1.    打开 IAM 控制台

2.    在导航窗格中,选择角色

3.    选择创建角色

4.    在选择受信任实体的类型部分,选择 AWS 服务,然后选择 CodeDeploy

5.    在选择使用案例部分,选择 CodeDeploy - ECS,然后选择下一步:权限

注意:请保留默认的 AWSCodeDeployforECS 策略。此策略包含 CodeDeploy 与 Amazon ECS 及其他服务正确交互所需的权限。

6.    选择下一步: 标签

7.    (可选)输入标签名称,然后选择下一步:检查

8.    对于角色名称,请输入 ecsCodeDeployRole

9.    选择创建角色

创建 Application Load Balancer

1.    打开 Amazon EC2 控制台

2.    在导航窗格中的负载均衡部分,选择负载均衡器

3.    选择创建负载均衡器

4.    在选择负载均衡器类型部分的 Application Load Balancer 中,选择创建

5.    对于名称,输入负载均衡器的名称。

6.    在可用区部分,选择在其中创建 Amazon ECS 集群的 VPC,然后选择任意两个可访问互联网的子网。 

7.    选择下一步:配置安全设置

8.    选择创建一个新的安全组

9.    对于安全组名称,请输入示例安全组

10.   选择添加规则

11.    对于端口范围,请输入 8080。对于,请输入 0.0.0.0/0

12.    选择下一步:配置路由

13.    对于目标组,请输入目标组的名称。

14.    对于目标类型,请选择 IP

15.    选择下一步:注册目标,然后注册目标组并设置 IP。

16.    选择下一步:检查

17.    选择创建

创建任务定义

1.    打开 Amazon ECS 控制台

2.    在导航窗格中,选择任务定义

3.    选择 Create new Task Definition(创建新任务定义)。

4.    选择 Fargate,然后选择 Next step(下一步)。

5.   根据需要配置任务定义,然后选择创建

以下示例任务定义使用 AWS Fargate 启动类型和 Docker 中心的 Nginx 映像:

{
  "executionRoleArn": "arn:aws:iam::account_ID:role/ecsTaskExecutionRole",
  "containerDefinitions": [{
    "name": "sample-website",
    "image": "nginx:latest",
    "essential": true,
    "portMappings": [{
      "hostPort": 80,
      "protocol": "tcp",
      "containerPort": 80
    }]
  }],
  "requiresCompatibilities": [
    "FARGATE"
  ],
  "networkMode": "awsvpc",
  "cpu": "256",
  "memory": "512",
  "family": "sample-website"
}

创建 Amazon ECS 服务

1.    打开 Amazon ECS 控制台

2.    在导航窗格的 Amazon ECS 部分,选择集群,然后选择您的集群。

3.    在服务选项卡上,选择创建以创建服务。

4.    在配置服务部分的启动类型中,选择 FARGATE

5.    对于任务定义,请选择您在上一部分创建的任务定义。

6.    对于服务名称,请输入您的服务的名称。例如:示例网站

7.    对于任务数量,请输入想要服务运行的任务数量。

8.    在部署部分,请选择蓝/绿部署(由 AWS CodeDeploy 提供支持)

9.    对于 CodeDeploy 的服务角色,请选择 ecsCodeDeployRole

注意:您先前已创建 ecsCodeDeployRole 服务角色。

10.    选择下一步

11.    在 VPC 和安全组部分,选择您的集群 VPC 和子网。

12.    在负载均衡部分的负载均衡器类型中,选择 Application Load Balancer

13.    对于负载均衡器名称,选择您先前创建的负载均衡器。

14.    在容器到负载均衡器部分,选择添加到负载均衡器

15.    在容器到负载均衡部分的生产侦听器端口中,选择 80:HTTP

16.    选中测试侦听器复选框。

17.    对于测试侦听器端口,选择新建,然后输入 8080 作为侦听器端口。

18.    在其他配置部分的目标组 1 名称中,选择您在创建负载均衡器时创建的目标组。

19.    对于目标组 2 名称,请在 Amazon ECS 控制台中创建一个名为 sample-website-tg-2 的新目标组。

20.    跳过设置 Auto Scaling(可选)页面并选择下一步

21.    选择创建服务

现在,您可以看到您创建的新服务以及一个正在运行的任务。

验证 Amazon ECS 蓝/绿部署是否正常

创建蓝/绿 Amazon ECS 服务之后,您可以创建一个包含变化的新任务定义,然后更新 Amazon ECS 服务。这将在 CodeDeploy 控制台中创建一个部署。

1.    打开 Amazon ECS 控制台

2.    在导航窗格中,选择任务定义

3.    依次选择任务定义、创建新修订创建

注意:在以下示例中,image 属性已更新为使用 httpd:2.4

{
  "executionRoleArn": "arn:aws:iam::account_ID:role/ecsTaskExecutionRole",
  "containerDefinitions": [{
    "name": "sample-website",
    "image": "httpd:2.4",
    "essential": true,
    "portMappings": [{
      "hostPort": 80,
      "protocol": "tcp",
      "containerPort": 80
    }]
  }],
  "requiresCompatibilities": [
    "FARGATE"
  ],
  "networkMode": "awsvpc",
  "cpu": "256",
  "memory": "512",
  "family": "sample-website"
}

4.    从导航窗格中,选择集群,然后选择在其中部署了 Amazon ECS 服务的集群。

5.    在服务选项卡上,选择 Amazon ECS 服务,然后选择更新

6.    在配置服务部分的任务定义中,选择您在第 3 步中创建的最新修订。

7.    选择下一步以跳过向导中的所有剩余页面,然后选择更新服务

8.    选择查看服务

9.    在部署选项卡上的部署 Id 列中,选择部署 ID 以查看您的 CodeDeploy 部署。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?