这段时间一直在熟悉aws,搞了个简单的web程序想放上去跑跑,死活跑不起来,今天终于完成踩坑,把过程做个总结,注意下面都是在mac下操作
准备个程序
这个简单,随便找个helloworld改改,web请求直接返回“hello test!”,端口使用的是8081,本地测试url为http://localhost:8081/hip-test-service/v1.0/location,注意在本地测试要通过。
部署到docker
1,打包安装
执行mvn clean install命令,成功的话会在maven的仓库中发现已经打好的jar包,如下:
drwxr-xr-x 6 zhuwen staff 192 10 8 16:21 .drwxr-xr-x 4 zhuwen staff 128 10 8 16:21 ..-rw-r--r-- 1 zhuwen staff 216 10 10 14:37 _remote.repositories-rw-r--r-- 1 zhuwen staff 18586143 10 10 14:37 hip-test-service-0.0.1-SNAPSHOT.jar-rw-r--r-- 1 zhuwen staff 9300 10 10 14:16 hip-test-service-0.0.1-SNAPSHOT.pom-rw-r--r-- 1 zhuwen staff 710 10 10 14:37 maven-metadata-local.xml
2,部署到docker
执行mvn -Pdocker docker:build,完成后通过docker images可以看到
ZhuWendeMacBook-Pro:hip-test-service zhuwen$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hip-test-service latest 2a71c8444332 29 hours ago 199MB
完成后通过docker run -p 8081:8081 hip-test-service在docker上启动,试试能否访问服务,以验证docker上应用是否OK
3,AWS上创建存储库
选择AWS上Elastic Container Service服务,创建存储库,命名为hip-test-serivce,创建完成后,会提示url为XXXXXXXX.dkr.ecr.cn-north-1.amazonaws.com.cn/hip-test-service,后面会用到
4,打tag
执行docker tag XXXXXXXX.dkr.ecr.cn-north-1.amazonaws.com.cn/hip-test-service:latest,其中斜体为上面创建存储库时的url,完成后,在docker images可以看到
ZhuWendeMacBook-Pro:hip-test-service zhuwen$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
XXXXXXXX.dkr.ecr.cn-north-1.amazonaws.com.cn/hip-test-service latest 2a71c8444332 31 hours ago 199MB
5,上传到AWS
执行docker push XXXXXXXX.dkr.ecr.cn-north-1.amazonaws.com.cn/hip-test-service:latest,将docker上传到AWS上的存储库,完成后会看到如下:
会上传如提示权限问题,请使用Access key ID和Secret access key登陆,具体使用下面命令
aws configure --profile hip
aws ecr get-login --no-include-email --profile=hip
6,ECS上创建任务定义hip-test-service
注意容器内存限制不要使用默认的128M,很可能因为这里的限制导致内存不够而使得服务不停的重启,具体配多少可以在docker跑下应用然后通过docker stats看看需要多大的内存。
7,创建服务
其中路径模式要写成/hip-test-serivce*,即所有路径hip-test-serivce的访问到目标组hip-test-service-new01,侦听端口为443,这里使用的是https,如果http则使用80。运行状况检查路径为/hip-test-service/health,在应用程序的pom文件依赖加入下面一段,程序会自动提供健康检查服务
<dependency>
<groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
创建完成后等待服务启动,启动成功后,会在该服务的目标组hip-test-serivce-new01的目标标签中看状态,如果状态为healthy则表示OK,否则需要检查配置。之前说的坑,就是容器内存使用默认128M太小导致启动失败
具体失败日志可以到CloudWatch服务中的日志组中找,如我配置的日志组为BSH-HIP-AWS-CHINA-DEV-HIP-TEST-Logs,日志流名称前缀为EHS-TEST
9,创建API GATE WAY
创建API,命名为hip-test-serivce,在资源页配置如下
在阶段页配置如下,这样实现了开发和上生产最终请求到不同的服务中去
最后在自定义域名中,选择之前已经申请好的域名,完成和API的映射配置,其中基本路径为hip-test-serivce,api选择hip-test-service,而阶段选择dev。
完成上面配置后,就可以使用postman测试了
网友评论