使用Cloudformation集成Spring Boot和EC2

在之前的博客中,我们将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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351503.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

出现$ref的原因及解决方案

$ref的产生原因 (1)重复引用:一个集合/对象中的多个元素/属性都引用了同一个对象 (2)循环引用:集合/对象中的多个元素/属性在相互引用导致循环 针对fastjson的处理 fastjson作为一款序列化引擎,…

Wireshark图解教程(简介、抓包、过滤器)

Wireshark是世界上最流行的网络分析工具。这个强大的工具可以捕捉网络中的数据,并为用户提供关于网络和上层协议的各种信息。与很多其他网络工具一样,Wireshark也使用pcap network library来进行封包捕捉。可破解局域网内QQ、邮箱、msn、账号等的密码&am…

php格式书写,PHP书写格式详解(必看)

从一个例子开始。启动编辑器,创建一个php文件并键入如下代码:echo "你好!";?>将该文件命名为 test.php 并存储于 E:html 目录下。在浏览器地址栏里访问该 php 文件:http://127.0.0.1/test.php,输出结果如…

java java se_Java SE 11:推动Java前进

java java se介绍 在我看来,这篇文章提出了Java语言应该如何发展成为一种首选语言。 它还提供了一些我喜欢但是有时(可能永远不会)成为Java的一部分的功能,出于某些原因,我将对此加以解释,这些功能有时我已…

用GDAL/OGR去读shapefile

一、读shapefile 1、首先,用Arcgis创建所要读的shp文件。打开ArcCatalog,右键NEW->Shapefile,名称Name:point ,要素类型(Feature Type):Point。点击Edit,选择投影类型。 2、打开ArcMap. 单击工具栏里的A…

【日 志】

/// <summary>/// 记录执行sql时的错误日志/// <para>cmdTxt 执行的sql</para>/// <para>inputParams 传入的Hashtable参数</para>/// </summary>private static void LogLastError(string cmdTxt, Hashtable inputParams){try{StringBuil…

php 数组移除指定健,php删除数组指定键的方法

php删除数组指定键的方法&#xff1a;首先创建一个PHP代码示例文件&#xff1b;然后定义一个“array_remove”方法&#xff1b;最后利用“array_key_exists”、“array_search”等函数实现删除数组指定键即可。PHP删除Array数组里指定的key/*** php除数组指定的key值(直接删除k…

Intellij IDEA社区版中的SpringBoot入门

我们可以使用Intellij IDEA社区版来处理SpringBoot应用程序&#xff0c;因为我们不需要配置Tomcat&#xff0c;Wildlfy等服务器&#xff0c;只需运行main&#xff08;&#xff09;方法即可运行应用程序。 但是&#xff0c;Intellij IDEA社区版中没有提供直接创建SpringBoot应用…

SpatialHadoop中空间索引系列之(四)空间格网索引实现

有关空间格网索引原理详见前面章节讲述的内容。这里我们根据SpatialHadoop中具体的实现&#xff0c;来详细讲解下。格网索引是一级索引&#xff0c;格网的个数取决于两个参数&#xff0c;一个是数据集的大小&#xff0c;另外一个就是格网的大小。那么在SpatialHadoop当中&#…

php导入csv文件,php实现CSV文件导入和导出

项目开发中&#xff0c;很多时候要将外部CSV文件导入到数据库中或者将数据导出为CSV文件&#xff0c;那么具体该如何实现呢&#xff1f;本文将使用PHP并结合mysql&#xff0c;实现了CSV格式数据的导入和导出功能。我们先准备mysql数据表&#xff0c;假设项目中有一张记录学生信…

剑指offer-二叉搜索树的后序遍历序列

/*输入一个整数数组&#xff0c;判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。*/ /** 已知条件&#xff1a;后序序列最后一个值为root&#xff1b;二叉搜索树左子树值都比root小&#xff0c;右子树值都…

Nessus漏洞扫描教程之安装Nessus工具

Nessus基础知识 Nessus号称是世界上最流行的漏洞扫描程序&#xff0c;全世界有超过75000个组织在使用它。该工具提供完整的电脑漏洞扫描服务&#xff0c;并随时更新其漏洞数据库。Nessus不同于传统的漏洞扫描软件&#xff0c;Nessus可同时在本机或远端上遥控&#xff0c;进行系…

php强制关机代码,程序员关机代码是什么?

程序员关机代码&#xff1a;1、定时关机&#xff0c;在运行中输入【at 22:00 Shutdown -s】&#xff1b;2、倒计时方式关机&#xff0c;在运行中输入【Shutdown.exe -s -t 3600】&#xff1b;3、自动关机&#xff0c;输入【shutdown -i】。程序员关机代码&#xff1a;1、比如你…

Java 9和应用程序性能监视的激动人心之处

通过AppDynamics解决应用程序问题的速度提高了10倍–以最小的开销在代码级深度监视生产应用程序。 开始免费试用&#xff01; 在当今的现代计算时代&#xff0c;软件创新的不断增强使我们更接近软件革命的时代。 也许在遥远的未来&#xff0c;这可能是对21世纪记忆犹新的方式。…

GPU下train 模型出现nan

When training on GPU, the error "Model diverged with loss NaN" is often caused by a sotmax thats getting a symbol larger than vocab_size 转载于:https://www.cnblogs.com/wuxiangli/p/10344259.html

php语言的四种循环控制语句,PHP循环控制语句

循环语句的作用就是在条件满足的情况下&#xff0c;可以执行多次相同或相似的任务&#xff0c;PHP中的循环语句包括for、while、do-while和foreach语句结构&#xff0c;下面分别介绍。for语句for语句结构一般用于执行确定循环次数的操作&#xff0c;其条件包括三个部分&#xf…

Kali linux安装漏洞扫描工具Nessus安装指南

引子&#xff1a;Nessus是著名信息安全服务公司tenable推出的一款漏洞扫描与分析软件&#xff0c;号称是"世界上最流行的漏洞扫描程序,全世界超过75,000个组织在使用它"。尽管这个扫描程序可以免费下载得到&#xff0c;但是要从Tenable更新到所有最新的威胁信息,每年…

7.9 规划Varnish缓存

./varnishlog -i VCL_LOG 转载于:https://www.cnblogs.com/likevin/p/10337069.html

php详解递归,PHP递归算法详解

本篇文章主要介绍PHP递归算法详解&#xff0c;感兴趣的朋友参考下&#xff0c;希望对大家有所帮助。遇到需要设计树节点的数据库结构&#xff0c;以及需要读出来的树节点数据结构&#xff01;大家是否会选择用数据库的查询方式来获取树结构呢&#xff1f;//曾经的数据库查询获取…

土城战役_避免使用FOR –反假战役

土城战役您是否想知道FOR如何影响您的代码&#xff1f; 他们如何限制您的设计&#xff0c;更重要的是如何将您的代码转换为无人为含义的多行代码&#xff1f; 在这篇文章中&#xff0c;我们将看到如何将for的简单示例&#xff08;由Francesco Cirillio提供- 反if活动&#xff…