ECS 201 Workshop(一)准备工作:配置IAM和任务定义

ECS是AWS自行研发的容器管理平台,相对于流行的K8S架构,ECS更加简单易用,学习门槛相对很低。此外,Fargate无服务器技术的支持,将ECS完全从管理底层架构中解放出来,用户不需要再去关心Node节点的EC2配置,而是只在乎启动的任务,非常便于高效、快速的将既有容器投入使用。

ECS 201 Workshop分成:

共四个部分。此外,在ECS实验之前,还有一个基础篇是如何Build容器镜像,请参考

下面开始第一篇。

一、创建集群

首先在AWS控制台上找到ECS服务,点击进入。如下截图。

image-20210205093429204

在左侧的菜单中,找到集群按钮,点击进入,然后点击创建集群。如下截图。

image-20210205093630993

在创建集群第一步,选择模式为Networking Only的模式,也就是Fargate模式。如下截图。

image-20210205093713490

在创建集群第二步,输入集群名称;在创建VPC的选项上不要选中;输入集群的Tag标签,注意Tag标签的Name字段,N为大写。标签是可选填写。如下截图。

image-20210205093904967

创建成功,点击查看集群返回集群管理页面。如下截图。

image-20210205094036292

至此集群创建完成。

二、创建ECS运行所需要的IAM角色

1、创建任务运行角色

进入IAM控制台,点击左侧的角色按钮,点击创建角色。如下截图。

image-20210205094719342

在创建角色页面,选择类型是AWS服务,在服务清单中选择 Elastic Container Service ,即ECS服务。然后将页面向下滚动。如下截图。

image-20210205094755912

在服务场景上选择 Elastic Container Service Task 服务(最后一项),并点击下一步继续。如下截图。

image-20210205095205444

在创建角色选择策略的页面,上方搜索框内输入ecs,从下方的搜索结果中,选中名为 AmazonECSTaskExecutionRolePolicy 的策略。然后点击下一步继续。如下截图。

image-20210205095729070

在标签页部分可选,可跳过。如下截图。

image-20210205095828164

在向导最后一步,输入角色的名称。注意如果是多人在同一个账号内实验,只创建一个角色即可运行多个ECS集群和任务。如果需要创建多个角色,请使用不同的名称加以区别。如下截图。

image-20210205095947358

创建完成。回到IAM的角色页面,输入名称的开头 ecstask ,如果搜索结果显示出来在,则表示IAM角色创建成功。如下截图。

image-20210205100126132

2、创建CodeDeploy发布角色

在本实验章节中,虽然不会进行版本发布操作,但是为了创建一个支持CodeDeploy发布的集群,也必须在这个步骤创建CodeDeploy需要的部署角色。本章节创建IAM角色成功后,后文实验将进行新版本发布的测试,届时也就无需创建权限。

进入IAM模块界面,点击左侧的角色,点击创建角色。如下截图。

image-20210205213257419

进入创建IAM角色界面后,选择服务类型是CodeDeploy,在使用场景选项中选择 CodeDeployRoleForECS ,并点击下一步权限继续。如下截图。

image-20210205213907178

在权限界面,默认已经包含了 AWSCodeDeployRoleForECS 的策略。点击下一步标签继续。如下截图。

image-20210205214036224

在标签页面不进行设置,跳过标签。在最后一个步骤,输入角色的名称 ecsCodeDeployRole 。注意如果是多人实验,只创建一个Role即可,否则会遇到名称冲突。点击右下角创建完成。如下截图。

image-20210205214310053

在创建完成后,再次搜索刚创建的角色的名称。如下截图。

image-20210205214448900

在角色管理页面上,点击屏幕右侧的Add inline policy 按钮,为本角色添加策略。

image-20210205214557972

点击JSON标签页切换到文本编辑模式,输入如下的一段策略。如果这一段策略复制有问题,可以从这个网址的官网文档中复制。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": [
                "arn:aws-cn:iam::<aws_account_id>:role/<ecsTaskExecutionRole_or_TaskRole_name>"
            ]
        }
    ]
}

请替换其中的Account ID为实验ID,替换角色名称为当前上一步创建的Task运行角色的名称,例如前文使用的是 ecsTaskExecutionRole 。如下截图。

image-20210205215001797

在下一步Review界面上,输入策略的名称,并点击右下角的创建策略。

image-20210205215239735

至此IAM操作完成。

三、创建任务(TASK定义)

进入ECS控制台的任务定义界面,点击创建新的任务定义。如下截图。

image-20210205094228947

在任务模式类型上,选择左侧的Fargate类型。然后点击下一步继续。如下截图。

image-20210205094304678

在新任务定义的第二步界面上,任务名称输入 myphpdemo,任务角色从下拉框中选取上一步配置IAM创建的名为 ecsTaskExecutionRole 角色 。在网络模式位置,默认已经选中awsvpc且不能修改。再向下在任务执行的IAM角色为孩子,再次选择上一步生成的 ecsTaskExecutionRole 角色。接下来向下滚动界面。如下截图。

image-20210205103454828

当页面向下滚动后,在Task size位置,本任务使用的容器需要的内存是 1GB 和0.5vCPU。然后点击容器定义界面下的添加容器按钮。如下截图。

image-20210205103804681

在页面右侧滑动出现的添加容器界面,输入用户名称,例如 phpdocker,在Image镜像位置,输入ECR容器镜像仓库服务中显示的URI。例如此格式 420029960748.dkr.ecr.cn-north-1.amazonaws.com.cn/phpdemo:latest。注意最后的 latest表示版本,如果应用有升级,版本也可以是2、3、4、5等数字。如下截图。

image-20210205104203529

注意:这里如果不清楚容器镜像仓库ECR服务和URI,可以新开一个浏览器窗口,切换到ECR服务,然后从如下界面的位置上,点击 Copy URI 按钮即可复制下来。如下截图。

image-20210205104123491

在找到容器URI之后,重新回到ECS的任务定义界面,继续配置。在内存限制位置,选择 软限制(soft limit) ,然后输入数值为768MB。在端口映射 Port mappings 部分,输入端口80。下方还有一系列配置都无需操作,直接点击右下角的添加按钮,完成容器镜像的添加。如下截图。

image-20210205104327710

请注意如果当前实验的AWS账号并未通过ICP备案,那么80端口无法访问。此时,在本界面依然要输入80端口,因为容器制作时监听服务就绑定在80端口上。为了解决ICP映射问题,后续可通过ALB发布到其他端口上。

添加容器完成后,页面下方还有代理设置 Proxy ConfigurationLog Router Integration 连个选项,在这里都保持默认不选中的状态。再下方的卷 Volume 管理选项,可以为ECS容器服务添加持久化的文件存储,例如EFS文件存储服务,本实现不使用这些设置,跳过设置。最后一部分是标签设置 Tag ,不需要修改,跳过标签设置。点击页面右下角的创建按钮,完成任务创建。如下截图。

image-20210205104702968

任务定义创建完成,点击右下角的查看按钮即可返回查看如下截图。

image-20210205104957627

在任务定义界面,可以看到创建任务定义成功。如下截图。

image-20210205105101328

至此任务定义完成。