Spring Cloud 微服务(五) 部署到AWS ECS

AWS是亚马逊托管的云服务,其中ECS是亚马逊的EC2实例在容器方面的优化,自带docker,而且每个机器都有个亚马逊实现的容器"ECS agent"来负责容器的治理,另外Spring Cloud本身也有对AWS的支持,封装了AWS的服务,叫做spring-cloud-aws。我们在上一篇文章实现了微服务的docker化,下一步可以把我们的服务发布到ECS上对外提供服务。

ECS层级结构
Spring Cloud 微服务(五) 部署到AWS ECS_第1张图片
mind_diagram_2 (2).png
创建一个集群 Cluster

集群是ECS最大的一个层级,集群的选择通常考虑地理因素,比如国内访问多的话就考虑在东京建立集群,目前AWS中国还没和其他AWS互连,而且只能使用部分功能,韩国区没有ECS服务。创建过程中特别注意Key pair一定要预先定义好,然后在这里选择一个Key pair,笔者就试过没有设置Key pari导致无法ssh到创建的实例上。Number of Instances代表我们想要开的实例数。

Spring Cloud 微服务(五) 部署到AWS ECS_第2张图片
image.png

这里的VPS是设置一个虚拟的内网,有了这个才能更好地构建一个内网微服务。


Spring Cloud 微服务(五) 部署到AWS ECS_第3张图片
image.png

Security Group其实定义的是防火墙相关的端口开关,这个在后面会用到。


image.png

整个创建过程需要几分钟,创建完就能看在面板上看到我们刚创建的微服务了,集群页面会展示运行的服务数,任务数,CPU和内存。
Spring Cloud 微服务(五) 部署到AWS ECS_第4张图片
image.png
创建一个服务 Service

一个集群可以运行很多服务,Number of tasks定义了预期要运行多少个task,如果目前运行的task低于这个值,ECS会自动发起task满足这个值。

Spring Cloud 微服务(五) 部署到AWS ECS_第5张图片
image.png

Task Placement 定义了当给定数量task要启动时,ECS会优先把task按照一定的算法启动到某个实例上,比如spread代表平均地放置task,random代表随机。下面的ELB和Auto scaling分别是负载均衡和自动扩展功能。

Spring Cloud 微服务(五) 部署到AWS ECS_第6张图片
image.png

Service创建出来的时候的面板:

Spring Cloud 微服务(五) 部署到AWS ECS_第7张图片
image.png
创建一个任务 Task

创建任务时候可以选择docker的联网方式,分别是bridge和host,默认的docker都是bridge方式。

Spring Cloud 微服务(五) 部署到AWS ECS_第8张图片
image.png

Task可以添加docker container,并且为每个container配置不同属性。这里定义使用的镜像,待会我们会创建一个镜像。为了防止突然升高的内存导致的高昂费用,可以设置内存最大值。这里说一个笔者遇到的坑,128兆内存其实是不够运行Spring Boot应用的,我在创建过程中使用了默认的128兆内存,导致微服务刚起来没多久就因为超出内存导致Task被干掉,同时Service里定义了最小存活Task为1,所以每次被干掉之后又会重新启动一个Task,导致了服务一只在不断循环重启,所以对于网络应用这里的推荐内存值是300-500兆内存。
Port mappings实现的是docker端口的映射。

Spring Cloud 微服务(五) 部署到AWS ECS_第9张图片
image.png

Essential代表它是这个任务的主要容器,如果这个容器失去联系了,Task将被Kill掉,这个也是导致上诉死循环的一个重要原因。

image.png
创建Container Registory(docker镜像仓库)

创建镜像很简单,只要把上面显示的命令行在本地镜像上执行一下就可以了,具体操作类似GIT把本地仓库push到远程仓库。

Spring Cloud 微服务(五) 部署到AWS ECS_第10张图片
image.png

把Eureka Server和我们的微服务推到远程的docker仓库之后,如图所示可以看到这两个Image。

Spring Cloud 微服务(五) 部署到AWS ECS_第11张图片
image.png
在ECS上部署我们的微服务

按照上面的任务创建方式创建一个任务,任务里面运行两个docker,分别是我们的Eureka Server和一个简单的服务

image.png

这时候update我们的Service


Spring Cloud 微服务(五) 部署到AWS ECS_第12张图片
image.png

等一段时间后就能看到我们的服务正运行在ECS集群上了

Spring Cloud 微服务(五) 部署到AWS ECS_第13张图片
image.png

这时候还有最后一步,因为我们设置了防火墙,所以要去防火墙开启8081端口和8870端口,因为我们的服务运行在这两个端口上。

image.png
Spring Cloud 微服务(五) 部署到AWS ECS_第14张图片
image.png

到这里,我们就可以用ECS实例的公网地址访问我们在AWS上创立的第一个微服务了。

最后附上官网文档上ECS的一个结构图


Spring Cloud 微服务(五) 部署到AWS ECS_第15张图片
ECS层级结构(1)

上一篇:Spring Cloud 微服务(四) Docker化
下一篇:Spring Cloud 微服务(六) 服务消费Feign

(1) http://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html

你可能感兴趣的:(Spring Cloud 微服务(五) 部署到AWS ECS)