简介

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

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

选择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干货“

创建AWS ECS Fargate相关推荐

  1. AWS: ECS Fargate + ELB的使用(CDK)

    AWS: ECS Fargate + ELB的使用(CDK) 一.ECS定义 Amazon Elastic Container Service (Amazon ECS)是一种高度可扩展的快速容器管理服 ...

  2. AWS ECS Fargate 集群创建

    在之前的AWS 相关课程中已经对使用ECS Fargate方式创建集群做了简单实验,但在之前的实验中只对AWS预先定义好的sample-app做了实验,这里补充一个完整的实验内容. --课程与题库整理 ...

  3. 使用Fargate在AWS ECS中部署ASP.NET Core 微服务

    目录 介绍 为何选择ECS Fargate? 先决条件 应用架构 AWS基础架构 ASP.NET Core WebAPI的准备情况 在ECS上运行Docker镜像容器 使用Cloudformation ...

  4. 云服务器 ECS 建站教程:创建基于ECS和RDS的WordPress环境

    创建基于ECS和RDS的WordPress环境 您可以在资源编排服务ROS (Resource Orchestration Service)中通过模版创建一组阿里云资源. ROS 的控制台已经提供了一 ...

  5. 如何使用Java创建AWS Lambda函数

    在本教程中,我们将看到如何在Java中创建AWS Lambda函数,我告诉你,这样做非常容易-- 基本上,我们可以通过三种方式创建AWS Lambda函数: –通过实现RequestHandler接口 ...

  6. 创建AWS OrganizationsSCP

    Hello大家好,欢迎回来,我们今天视频课程的内容是从头开始创建一个AWS组织,加入组织,以及演示AWS组织的两个功能集的内容.. 演示环境 为了演示我们准备了两个AWS账户,左边的账户我们使用saf ...

  7. 亚马逊云创建Aws EC2示例+用Xshell7连接登录Aws+设置允许使用root登录

    在学Linux,想着搞个服务器来玩玩,发现亚马逊云可以弄免费的服务器,跌跌撞撞才了不少坑,最后给弄好了,这里记录一下我的创建Aws EC2示例+用Xshell7连接登录Aws+设置允许使用root登录 ...

  8. aws ecs 理解元数据和mock本地测试环境

    资料 Under the Hood: Task Networking for Amazon ECS amazon-ecs-local-container-endpoints A Guide to Lo ...

  9. AWS — AWS ECS

    目录 文章目录 目录 Amazon Elastic Container Service Amazon ECS 的优势 无需管理控制平面或节点 降低计算成本 Amazon Elastic Contain ...

最新文章

  1. 欧洲超高速网比宽带快万倍 几秒下载一部电影
  2. java 并发队列_JAVA并发编程:阻塞队列BlockingQueue之SynchronousQueue
  3. svn还原文件中去掉已经删除的文件
  4. php 接口数组排序,php 数组排序
  5. Java字节码(.class文件)格式详解(一)
  6. 一群猴子排成一圈,按1,2,...,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈...
  7. python基础编程题、积分面积_Python基础编程题100列目录
  8. 按规律插入一个数字到数组中
  9. html显示docx,网页中显示PDF的HTML代码.docx
  10. 解决WebService本地访问正常,远程无法访问的问题
  11. Matlab求解定积分/不定积分
  12. Amesim车辆仿真—入门二之善用帮助文档
  13. Python常用模块库下载及安装
  14. metasfresh 集成 yetiforce crm
  15. 本地 Git 文件夹显示绿色标识
  16. Selenium自动化测试:如何使用cookie跳过验证码登录
  17. 在线展示pdf和word并且不能显示下载和打印按钮
  18. 人力资源分析思维以及有必要学习数据分析吗?
  19. 07-07-Exchange Server 2019-配置-脱机地址簿
  20. 直播APP开发公司、直播源码出售《直播疑难杂症排查系列》之 :播放失败

热门文章

  1. DateDiff函数
  2. postgresql兼容MySQL datediff函数
  3. 拉里·埃里森再谈数据安全,机器学习必将火爆未来
  4. sdk与开放API协议支持二次开发的摄像头
  5. ZEMAX | 室内照明案例分享1 :照度分布的模拟
  6. 如何防范p2p终结者的限速
  7. 【面试记录】海天集团一面
  8. Linux再学--shell基础5正则表达式和文本搜索
  9. 单片机8位抢答器实训机电报告_单片机课程设计报告八路抢答器
  10. 最新织梦全国多城市分站地区插件dedecms分站网站源码插件