使用AWS SDK for Java创建并启动EC2实例_awssdk2transportoptions.builder().setcredentials()_十豆彡v彡的博客-程序员宅基地

技术标签: amazon ec2  AWS  

本文主要记录使用AWS SDK for Java创建并启动EC2实例的过程及遇到的问题和解决办法。


1.初始化EC2

AWS的身份验证方式有两种:一种是通过获取默认路径下的credentials文件,该文件通常在"\Users\****\.aws"下;另一种是直接将密钥(ACCESS_KEY,SECRET_KEY)作为参数。两种方法本质上其实是相同的。具体实现如下:

①方式一:

public void init() {
	try {
		AWSCredentials credentials = new ProfileCredentialsProvider("default").getCredentials();
		EC2 = new AmazonEC2Client(credentials);
		EC2.setRegion(Region.getRegion(Regions.CN_NORTH_1));
	}catch(Exception e) {
		log.error("init EC2",e);
	}
}

②方式二:

public void init_with_key(String ACCESS_KEY, String SECRET_KEY) {  
    try {  
        AWSCredentials credentials = null;  
        credentials = new BasicAWSCredentials(ACCESS_KEY,SECRET_KEY);  
        EC2 = new AmazonEC2Client(credentials);  
        EC2.setRegion(Region.getRegion(Regions.CN_NORTH_1));   
    }catch(Exception e) {  
        log.error("init EC2", e);  
    }  
}  


*注意:要设置区域(setRegion),不然会出错!


2.创建并启动EC2实例

在启动实例之前,需要对EC2的相关属性进行设置,如下所示:

·withImageId

 AMI的ID。

·withInstanceType

 与指定的AMI兼容的实例类型。

·withMinCount

 待启动的EC2实例的最小数量。如果此数量大于目标可用区中可以启动的实例数,则EC2不会启动任何实例。

·withMaxCount

 待启动的EC2实例的最大数量。如果此数量大于目标可用区中可以启动的实例数,则EC2会启动MinCount之上最大数量的实例。可以启动的实例数介于1和允许为该实例类型启动的最大实例数之间。

·withKeyName

 EC2密钥对的名称。如果在未指定密钥对的情况下启动实例,将无法连接到该实例。

·withSecurityGroups

 一个或多个安全组。

·withUserData

 设置用户数据。


可以将以上属性通过键值对的形式作为参数进行设置。具体实现如下:

①设置属性:

Map<String,String> config = new HashMap<String,String>();
config.put("ImageId", "ami-4b814f22");
config.put("InstanceType", "m1.small");
config.put("MinCount", "1");
config.put("MaxCount", "1");
config.put("KeyName", "my-key-pair");
config.put("SecurityGroups", "my-security-group");
config.put("UserData", "script");

*说明:以上设置需要根据实际的需求进行修改,这里只是示例。


②启动实例:

public void runInstance(Map<String,String> config) {
	try {
		RunInstancesRequest runInstancesRequest = new RunInstancesRequest();
			
		//设置EC2实例的属性
		runInstancesRequest.withImageId(config.get("ImageId"))   //AMI ID
		.withInstanceType(config.get("InstanceType"))            //实例类型
		.withMinCount(Integer.parseInt(config.get("MinCount")))  //最少启动实例数
		.withMaxCount(Integer.parseInt(config.get("MaxCount")))  //最多启动实例数
		.withKeyName(config.get("KeyName"))                      //密钥名称
		.withSecurityGroups(config.get("SecurityGroups"))        //安全组
		.withUserData(config.get("UserData"));                   //用户数据
			
		RunInstancesResult result = EC2.runInstances(runInstancesRequest);
		System.out.println(result);
	}catch(Exception e){
		log.error("run instance",e);
	}
}


3.注意问题

在上述实现过程中,需要注意的一个问题就是用户数据必须采用base64编码。否则,实例会创建失败。因此需要对用户数据进行base64编码处理后,再调用"withUserData"进行设置。

说明:

用户数据是在开虚拟机时由用户提供的,最常用来让自动化的脚本(script)可以很方便、简单地完成工作。

具体可参考:http://docs.aws.amazon.com/zh_cn/AWSEC2/latest/WindowsGuide/ec2-instance-metadata.html#instancedata-add-user-data

Java8之后,在java.util中增加了Base64,用来处理base64的编码与解码。具体实现如下:

①base64编码:

public String getEncode(String str) {
	final Base64.Encoder encode = Base64.getEncoder();
	final byte[] bytes = str.getBytes();
	final String encodeStr = encode.encodeToString(bytes);
	return encodeStr;
}


②base64解码:

public String getDecode(String encodeText) {
	final Base64.Decoder decode = Base64.getDecoder();
	final String decodeStr = decode.decode(encodeText).toString();
	return decodeStr;
}

以上即本文的全部内容,错误之处欢迎大家交流指正:)。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u013216537/article/details/78469140

智能推荐

pandas分批读取csv文件_fjssharpsword的博客-程序员宅基地

csv文件数据过大,超过内存负荷,这种情况下,pandas对csv提供一个批量读取的参数。https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html代码如下:对于非分布式环境下的算法训练,这种方式是相对可取的,适合增量学习。...

Flink SQL实战_flinksql jdbc ddl 使用limit_lvwenyuan_1的博客-程序员宅基地

最近在研究Flink SQL流,这里写一个简单的实战。背景每1分钟统计过去1个小时,各个商品的购买量。数据格式为{"behavior":"cart","itemId":19,"nowTime":1562314387553}behavior:为用户行为,有cart,pv,buy。我们这里要的就是buy代码import com.alibaba.fastjson.JSON;i...

JavaScript——onblur事件失效问题解决方案_onblur事件不起作用_Starzkg的博客-程序员宅基地

基本概念问题分析改了写法,把事件写在函数里,然后直接调用,发现一直提示函数未定义,这个和浏览器渲染页面过程有关,就是当浏览器渲染到该标签时,事件函数还没定义,就报错。解决方案添加监听事件即可input.addEventListener('blur',function(){我是一个函数啦啦啦!});如果要兼容ie8要用attachEvent参考文章http...

struts2后台接收不到url传来的参数_狮子狗的自我修养的博客-程序员宅基地

function searchOrder(id,nil,iccid){ document.forms[0].action = &amp;quot;viewCardInfo.action?iccid=&amp;quot;+iccid; document.forms[0].submit(); }使用表单提交,访问后台,但是后台接收不到iccid这个参数,...

Flutter HTTP上传文件使用详解_flurl.http 参数如何带文件_建炜的博客-程序员宅基地

Flutter HTTP Multipart-Form使用详解Flutter HTTP上传文件详解multipart/form-dataFlutter Http插件Flutter HTTP上传文件详解最近使用Flutter开发新App,需要使用Http上传文件,对Flutter中Http上传进行一些总结multipart/form-data一个 HTML 表单中的 enctype 有三种类...

Swift源码分析----swift-proxy与swift-object(2)_溜溜小哥的博客-程序员宅基地

感谢朋友支持本博客,欢迎共同探讨交流,由于能力和时间有限,错误之处在所难免,欢迎指正!如果转载,请保留作者信息。博客地址:http://blog.csdn.net/gaoxingnengjisuan邮箱地址:[email protected]:最近没有登录博客,很多朋友的留言没有看见,这里道歉!还有就是本人较少上QQ,可以邮件交流。接续上一篇博客

随便推点

概率分布基本概念,符号表示法 (概统2.符号)_概率符号_lynn0085的博客-程序员宅基地

概率分布基本概念,符号表示法 (概统2.符号)前面一章,我们计算某事件某结果的概率,会用P(A), P(B),或者P(A1),P(B1)来表达 对于条件概率,我们会用P(A|Bj)" role="presentation" style="position: relative;">P(A|Bj)P(A|Bj)P(A|B_{j})来表达Bj" role="presentation" style=

Loadrunner-参数化中文乱码问题_loadrunner参数化乱码_Mrs Wang的博客-程序员宅基地

Action(){ char tmp[150]; char tmp1[150]; char tmp2[150]; lr_convert_string_encoding( lr_eval_string("{CityName}"),NULL,"utf-8","str"); strcpy(tmp,lr_eval_string("{str}")); lr_save_string(tmp,"CityName1"); lr_start_transac...

nginx伪静态配置_^(.*)$ index.php?/$1_划水小老虎的博客-程序员宅基地

if (!-e $request_filename) { rewrite ^/(.*)$ /index.php?s=$1 last;}

获取腾讯视频真实地址php源码,解析腾讯视频真实地址 - osc_hajrc28s的个人空间 - OSCHINA - 中文开源技术交流社区..._weixin_39952502的博客-程序员宅基地

解析腾讯视频真实地址标签(空格分隔): php分析1 我们从腾讯视频上找到的网页链接格式是这样的https://v.qq.com/x/page/b0136et5ztz.htmlvid = b0136et5ztz2 把vid放单到接口上http://vv.video.qq.com/getinfo?vids=b0136et5ztz&amp;platform=101001&amp;charge=0&am...

javascript页面跳转常用代码_深度Java的博客-程序员宅基地

这东东最难记,每次需要时都是重新到Google上搜,真是烦死了,这回整理一下贴到这。  按钮式:    链接式:  返回上一步  ">返回上一步  直接跳转式:  window.location.href=http://www.9ba.cn;  开新窗口:  云上的日子 

硬盘安装xp(初学者)_weixin_30888413的博客-程序员宅基地

无光驱、软驱,硬盘安装XP(也可能是有软驱有光驱,但是没有可启动dos系统的软盘或者光盘)经常从网上下一些iso光盘镜像系统,想安装一下试试,可是身边又没有软盘启动盘,或者光盘可启动盘,怎样安装呢?请看吧:无光驱、软驱,硬盘安装XP在论坛看到朋友们发XP安装求助帖,不禁回想起偶做菜鸟时的苦难岁月,万恶的奸商每装次系统就要30个银圆,大年三十都上门要债,比黄世仁还黄世仁啊!逼的...

推荐文章

热门文章

相关标签