在之前的博客中,我们将Spring Boot应用程序与Elastic beantalk集成在一起。 该应用程序是一个基于Servlet的应用程序,可以响应请求。

在本教程中,我们将部署一个Spring Boot应用程序,该应用程序在ec2实例上执行一些计划的任务。 该应用程序与官方Spring指南中的应用程序几乎相同,只是包装上有一些细微差别。

我们的应用程序名称为ec2-deployment

rootProject.name = 'ec2-deployment'

然后,我们将计划任务到我们的Spring Boot应用程序。

package com.gkatzioura.deployment.task;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;/*** Created by gkatzioura on 12/16/16.*/
@Component
public class SimpleTask {private static final Logger LOGGER = LoggerFactory.getLogger(SimpleTask.class);@Scheduled(fixedRate = 5000)public void reportCurrentTime() {LOGGER.info("This is a simple task on ec2");}}

下一步是构建应用程序并将其部署到我们的s3存储桶中。

gradle build
aws s3 cp build/libs/ec2-deployment-1.0-SNAPSHOT.jar s3://{your bucket name}/ec2-deployment-1.0-SNAPSHOT.jar

接下来是引导脚本,以便在服务器启动并运行后运行我们的应用程序。

#!/usr/bin/env bash
aws s3 cp s3://{bucket with code}/ec2-deployment-1.0-SNAPSHOT.jar /home/ec2-user/ec2-deployment-1.0-SNAPSHOT.jar
sudo yum -y install java-1.8.0
sudo yum -y remove java-1.7.0-openjdk
cd /home/ec2-user/
sudo nohup java -jar ec2-deployment-1.0-SNAPSHOT.jar > ec2dep.log

该脚本几乎可以自我解释。 我们从先前上传的存储桶中下载该应用程序,安装所需的Java版本,然后运行该应用程序(此脚本用于示例目的,当然,有许多方法可以设置在Linux上运行的Java应用程序)。

下一步将继续进行我们的cloudformation脚本。 由于我们将从s3下载应用程序,因此必须有一个IAM策略,该策略允许我们从以前使用的s3存储桶中下载项目。 因此,我们将根据所需政策创建角色

"RootRole": {"Type": "AWS::IAM::Role","Properties": {"AssumeRolePolicyDocument": {"Version" : "2012-10-17","Statement": [ {"Effect": "Allow","Principal": {"Service": [ "ec2.amazonaws.com" ]},"Action": [ "sts:AssumeRole" ]} ]},"Path": "/","Policies": [ {"PolicyName": "root","PolicyDocument": {"Version" : "2012-10-17","Statement": [ {"Effect": "Allow","Action": ["s3:Get*","s3:List*"],"Resource": {"Fn::Join" : [ "", [ "arn:aws:s3:::", {"Ref":"SourceCodeBucket"},"/*"] ] }} ]}} ]}}

下一步是将引导脚本编码为Base64,以便能够将其作为用户数据传递。 一旦ec2实例启动并运行,它将运行先前指定的shell命令。

最后一步是创建我们的实例配置文件并指定要启动的ec2实例

"RootInstanceProfile": {"Type": "AWS::IAM::InstanceProfile","Properties": {"Path": "/","Roles": [ {"Ref": "RootRole"} ]}},"Ec2Instance":{"Type":"AWS::EC2::Instance","Properties":{"ImageId":"ami-9398d3e0","InstanceType":"t2.nano","KeyName":"TestKey","IamInstanceProfile": {"Ref":"RootInstanceProfile"},
"UserData":"IyEvdXNyL2Jpbi9lbnYgYmFzaA0KYXdzIHMzIGNwIHMzOi8ve2J1Y2tldCB3aXRoIGNvZGV9L2VjMi1kZXBsb3ltZW50LTEuMC1TTkFQU0hPVC5qYXIgL2hvbWUvZWMyLXVzZXIvZWMyLWRlcGxveW1lbnQtMS4wLVNOQVBTSE9ULmphcg0Kc3VkbyB5dW0gLXkgaW5zdGFsbCBqYXZhLTEuOC4wDQpzdWRvIHl1bSAteSByZW1vdmUgamF2YS0xLjcuMC1vcGVuamRrDQpjZCAvaG9tZS9lYzItdXNlci8NCnN1ZG8gbm9odXAgamF2YSAtamFyIGVjMi1kZXBsb3ltZW50LTEuMC1TTkFQU0hPVC5qYXIgPiBlYzJkZXAubG9n"}}

KeyName代表ssh密钥名称,以防您要登录ec2实例。

因此,我们很高兴去创建我们的cloudformation堆栈。 您必须添加CAPABILITY_IAM标志。

aws s3 cp ec2spring.template s3://{bucket with templates}/ec2spring.template
aws cloudformation create-stack --stack-name SpringEc2 --parameters ParameterKey=SourceCodeBucket,ParameterValue={bucket with code} --template-url https://s3.amazonaws.com/{bucket with templates}/ec2spring.template --capabilities CAPABILITY_IAM

而已。 现在,您已经启动了Spring应用程序并在ec2实例上运行。
您可以从GitHub下载源代码。

翻译自: https://www.javacodegeeks.com/2016/12/integrate-spring-boot-ec2-using-cloudformation.html

使用Cloudformation集成Spring Boot和EC2相关推荐

  1. Spring精华问答 | 如何集成Spring Boot?

    Spring框架是一个开源的Java平台,它提供了非常容易,非常迅速地开发健壮的Java应用程序的全面的基础设施支持.今天就让我们一起来看看关于Spring的精华问答吧. 1 Q:如何在自定义端口上运 ...

  2. boot spring 获取请求端口浩_Spring精华问答 | 如何集成Spring Boot?

    Spring框架是一个开源的Java平台,它提供了非常容易,非常迅速地开发健壮的Java应用程序的全面的基础设施支持.今天就让我们一起来看看关于Spring的精华问答吧. 1 Q:如何在自定义端口上运 ...

  3. flowable集成spring boot ----任务监听器

    任务监听器 任务监听器(task listener)用于在特定的任务相关事件发生时,执行自定义的Java逻辑或表达式. 任务监听器包含下列属性: event(事件)(必填):触发任务监听器的任务事件类 ...

  4. ElasticSearch快速入门(三)=> 集成Spring Boot + 效仿京东搜索小实战

    六.集成Spring Boot 6.1 环境的搭建 新建一个空项目 新建一个spring boot模块 发现导入的默认es依赖和我们本地的es版本不一样 自定义es 的版本 <propertie ...

  5. forkJoin集成spring boot

    forkJoin集成spring boot处理大量数据添加 import com.wugui.datax.admin.entity.JobModel; import com.wugui.datax.a ...

  6. SpringBoot实战(十二):集成 Spring Boot Admin 监控

    强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan [前言] 程序开发完实现相应的功能只是一个部分,如何让系统在线上运行更好创造更高的价值是另外一个 ...

  7. RocketMQ 源码分析 —— 集成 Spring Boot

    点击上方"芋道源码",选择"设为星标" 做积极的人,而不是积极废人! 源码精品专栏 原创 | Java 2020 超神之路,很肝~ 中文详细注释的开源项目 RP ...

  8. Swagger2 (1)到此一游集成spring boot

    1:认识Swagger2 Swagger2 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件的 ...

  9. Angular 6集成Spring Boot 2,Spring Security,JWT和CORS

    主要内容:Spring Boot 2的基础应用.CORS配置.Actuator监控:Spring Boot集成springfox-swagger,利用Swagger生成JSON API文档,利用Swa ...

最新文章

  1. 学习API网关遇到的名词
  2. 皮一皮:被看穿的既视感...
  3. Objective C 中的nil,Nil,NULL和NSNull理解
  4. php用什么工具调试代码,详细介绍利用开源的DebugBar工具调试PHP代码(图文)
  5. Docker部署微服务详解
  6. autoreleasing的用法介绍:
  7. Visual C# 打造 “浏览器”
  8. 小程序秒杀活动服务器,一套实用的小程序秒杀活动方案,亲这边建议你收藏哦...
  9. 横向对比EXT4,带你感受真实的Linux文件系统F2FS
  10. CImageList使用指南
  11. thing.js入门学习
  12. 先进的半导体晶圆清洗技术
  13. 第五部分 3D环绕声技术
  14. 乐高打印机robotc
  15. uniapp开发中ios底部出现安全距离问题怎么解决?
  16. ”Could not find tag for codec none in stream #0, codec not currently supported in container”的解决方法
  17. c语言学生请假系统项目总结,学生管理系统项目总结.doc
  18. linux 内核进程与用户进程的通信 方法一 使用sockopt与内核交换数据
  19. 英语KOREITE寿山石koreite单词
  20. sql如何取前几行_sql 取前几行记录语句

热门文章

  1. art-template入门(一)之介绍
  2. Java读取properties配置文件时,中文乱码解决方法
  3. 漫画:如何用Zookeeper实现分布式锁?
  4. java中如何对对象排序?
  5. 使用ADO.NET查询和操作数据
  6. 使用Servlet上传多张图片——Service层(ProductInfoService.java和ProductInfoServiceImpl)
  7. java实现字符逆序输出
  8. Mysql字符串截取 mysql将字符串字段转为数字排序或比大小
  9. kotlin能用嵌入式linux,Kotlin在项目中的应用和踩过的坑
  10. java aqs详解_Java AQS底层原理解析