javascript
使用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
總結
以上是生活随笔為你收集整理的使用Cloudformation集成Spring Boot和EC2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网易邮箱CSRF漏洞
- 下一篇: java java se_Java SE