创建AWS ECS Fargate

在这里插入图片描述

简介

ECS-Elastic Container Service,一种完全托管的容器编排服务,功能与流行的kubernete(k8s)容器编排服务类似,在aws上使用k8s需要通过EKS或自己安装在EC2上,而利用ECS的Fargate模式可以实现无服务器(ec2)容器托管,并且成本只有使用ec2的60%。

k8s管理和使用比较复杂,部署应用时一般都借助helm来实现,不过helm用起来也没那简单。相对来说ECS Fargate的使用和管理要简单的多,学习成本更低。

k8s是开源软件,更新快免费,ECS Fargate也不收费但是绑定在aws服务上的,在迁移时会有一定问题。但是因为都是容器编排服务工具,所以考虑到运行的都是docker的容器,实际迁移起来还是比传统的非容器应用简单一些。

本文通过图形界面加命令行模式,实战创建Application Load Balancer,ECS fargate集群,创建镜像task,并在集群中通过service来实例化task。前端通过ALB把http/https请求转发至task实例。aws中国区和外国区的界面略有不同,需要注意的是ARN时,中国区是aws-cn,而外国区则是aws。

目录

  • 环境(配置)
  • 实战步骤
    1. 创建ALB
    2. 创建ECS Fargate集群
    3. 创建task定义
    4. 创建service
    5. 检查结果
  • 引申
  • 资源下载
  • 后记

环境(配置)

  • AWS中国或Global帐号,可在官网申请,一年内使用指定资源免费
  • AWS cli, 本文在win10 + terminal下使用aws cli

实战步骤

1. 创建ALB

ALB——Application Load Balancer,提供负载均衡,请求分配,SSO集成的aws服务。本文中ALB接受用户的http请求并转发到ECS中的Task中。

从中控台进入EC2界面,选择Load Balancer并点击Create Load Balancer
在这里插入图片描述
选择Application Load Balancer点击Create
file

添写ALB名称并选择internet-facing(实际业务中可能会选择internal)
file

选择ALB所在的VPC和subent,至少选择两项。因为要从internet访问所以要选择public subnet,点击Next
在这里插入图片描述

这里只开通了80端口,直接点击Next
在这里插入图片描述
选择Create a new security group,输入security group名称和描述,加一条允许任意来源访问80的规则
在这里插入图片描述
创建新的target group,注意在Target type中选择IP,点击Next。因为ECS Fargate中的task是随机分配IP。task会把端口和分配的IP注册到target group中,而ALB会和target group相关联,这样http请求通过ALB分配给target group再流到task中
在这里插入图片描述

选择ECS service所在的网络,这里直接点击Next即可
在这里插入图片描述点击创建
在这里插入图片描述
ALB创建需要一点时间provisioning,过一会儿可以看到创建成功。DNS name就是我们之后用来访问的地址
在这里插入图片描述
回到EC2界面选择Target Groups,然后点击刚才新建的tstest
在这里插入图片描述
记下ARN信息,这个信息会添加到ECS的service中
在这里插入图片描述

2. 创建ECS Fargate集群

登录AWS中控台选择Elastic Container Service进去ECS界面,点击"Create Cluster"
在这里插入图片描述
选择第一项“Networking only”,然后点击“Next Step”
在这里插入图片描述
在Cluster Name中输入新建ECS集群的名称,比如“tstest”,然后点击“Create”
在这里插入图片描述
创建成功,点击“View Cluster”查看新建的cluster。
在这里插入图片描述
没有运行task的Fargate集群是一个空壳,AWS并没有为其分配CPU,内存,所以也不产生费用。
在这里插入图片描述
接下来创建task定义和service

3. 创建task定义

task定义中可以

  • 指定拉取的镜像
  • 设定使用CPU/内存
  • 打开的端口
  • 启动类型
  • 外挂卷

创建task定义可以在中控台上通过图形界面操作,也可以写json文件利用aws cli创建。本文使用aws cli创建,更方便一些。

下面操作在windows terminal中操作,已经安装好了aws cli。先设置aws profile并用aws sts命令测试是否可以连接到aws,下图返回了用户信息说明连接成功。
在这里插入图片描述
在本地建一个tstest_task.json文件,内容如下
坑:在中国区arn:aws-cn,而在外国区是arn:aws
在这里插入图片描述

  • “family” :task定义的名称,以后更新的task定义会以版本号加1的形式存在同一个task定义中
  • “executionRoleArn” :任务执行角色的ARN,该角色授予 Amazon ECS 容器代理进行 AWS API 调用的权限
  • “networkMode” : Fargate 网络模式必需awsvpc
  • “containerDefinitions” :拉到到的image名称,生成容器名称,开放端口等信息
  • “requiresCompatibilities” :任务使用的启动类型
  • “cpu” :指定cpu大小, 256代表0.25个vCPU
  • “memory” :指定内存大小,256代表256M

官网TASK参数

运行命令创建task定义
在这里插入图片描述
现在可以在ECS中控台的Task Definitions中查看新建的task定义
在这里插入图片描述

4. 创建service

建好task定义是第一步,叫定义是因为这时我们只是写了一个要运行的task的结构模板,之后我们通过创建service来把模板实例化,生成真正运行的task。task会实际占用cpu和内存,而aws也在这时按cpu和内存开始计算费用。

在本地建一个create-svc.json文件,内容如下
坑:在中国区arn:aws-cn,而在外国区是arn:aws
在这里插入图片描述

  • “cluster” :上面建的cluster名称
  • “serviceName” :新建的service名称
  • “taskDefinition” : 是在service指定运行的task的某一版本,上面只建了一个task版本还没有更新过,所以是1
  • “loadBalancers” :配指定容器注册到target group中的端口,这里把容器fargate-app1的的80端口注册到了"tstest"这个target group中
  • “networkConfiguration” :task实例运行的subnet和security group

官网SERVICE参数

运行命令创建service定义
在这里插入图片描述
在ECS中控台的Cluster中查看新建的service
在这里插入图片描述
点击"tstest-svc"可以查看service中task的运行情况。先是provisioning经pending,最后是running
在这里插入图片描述

5. 检查结果

进入EC2 -> Target Groups -> 选择tstest -> 选择Targets 可以看到运行的task
在这里插入图片描述
在浏览器中输入建好的ALB的DNS可以看到httpd镜像已经正常运行
在这里插入图片描述

引申

这部分主要讲一下在生产中的扩展问题,主要是让有兴趣的读者有个方向,方便自己进一步研究使用

  1. 日志处理:可以在task定义把镜像日志发送到cloudwatch,或者elasticsearch,另外在镜像中挂载EFS把日志存到共存硬盘上,也是很方便的用法。实践中我们用的就是后者,方便开发使用。

  2. 自动部署:因为task中运行的是容器,所以自动部署主要涉及如何自动生成上传镜像。可以利用aws的auto deploy/build/pipeline来实现,另外也可以用自己搭建的Jenkins加aws cli实现。

  3. 自动扩容降级:配和aws autoscale功能可以实现通过监控CPU/内存的利用率自动扩容降级

  4. 安全合规性:把service放在private subnet,通过NAT访问外网,实现应用可以访问外网,而外网无法访问内网,通过security group/ALC lic控制访问目标/来源等。

  5. SSO openid:可以利用ALB中的openid(目前中国区不可用),也可以自己在task中加前端httpd/niginx,然后利用openid插件实现SSO,后者更合适与现在的SSO服务集成。

资源下载

三个json文件可以在以下链接下载,注意要把ARN中的account改成你自己的。
https://github.com/tansong0091/realCrapForAWS/tree/main/ecs_fargate1

后记

累死了我,本以为写一个很熟的东西应该很快,结果光排版截图就花了好长时间,再加上边写边测试,搞的脖子痛都复发了。不过,如果有朋友认为看完这个能真的有些帮助,那就足够了。本想写再细一些,不过发现脖子受不了,而且之前也有人说上来讲太多,根本消化不了,慢慢来吧,看看能坚持多久。

喜欢请关注微信公众号”全是AWS干货“

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值