技术标签: 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;
}
以上即本文的全部内容,错误之处欢迎大家交流指正:)。
csv文件数据过大,超过内存负荷,这种情况下,pandas对csv提供一个批量读取的参数。https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html代码如下:对于非分布式环境下的算法训练,这种方式是相对可取的,适合增量学习。...
最近在研究Flink SQL流,这里写一个简单的实战。背景每1分钟统计过去1个小时,各个商品的购买量。数据格式为{"behavior":"cart","itemId":19,"nowTime":1562314387553}behavior:为用户行为,有cart,pv,buy。我们这里要的就是buy代码import com.alibaba.fastjson.JSON;i...
基本概念问题分析改了写法,把事件写在函数里,然后直接调用,发现一直提示函数未定义,这个和浏览器渲染页面过程有关,就是当浏览器渲染到该标签时,事件函数还没定义,就报错。解决方案添加监听事件即可input.addEventListener('blur',function(){我是一个函数啦啦啦!});如果要兼容ie8要用attachEvent参考文章http...
function searchOrder(id,nil,iccid){ document.forms[0].action = &quot;viewCardInfo.action?iccid=&quot;+iccid; document.forms[0].submit(); }使用表单提交,访问后台,但是后台接收不到iccid这个参数,...
Flutter HTTP Multipart-Form使用详解Flutter HTTP上传文件详解multipart/form-dataFlutter Http插件Flutter HTTP上传文件详解最近使用Flutter开发新App,需要使用Http上传文件,对Flutter中Http上传进行一些总结multipart/form-data一个 HTML 表单中的 enctype 有三种类...
感谢朋友支持本博客,欢迎共同探讨交流,由于能力和时间有限,错误之处在所难免,欢迎指正!如果转载,请保留作者信息。博客地址:http://blog.csdn.net/gaoxingnengjisuan邮箱地址:[email protected]:最近没有登录博客,很多朋友的留言没有看见,这里道歉!还有就是本人较少上QQ,可以邮件交流。接续上一篇博客
概率分布基本概念,符号表示法 (概统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=
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...
if (!-e $request_filename) { rewrite ^/(.*)$ /index.php?s=$1 last;}
解析腾讯视频真实地址标签(空格分隔): php分析1 我们从腾讯视频上找到的网页链接格式是这样的https://v.qq.com/x/page/b0136et5ztz.htmlvid = b0136et5ztz2 把vid放单到接口上http://vv.video.qq.com/getinfo?vids=b0136et5ztz&platform=101001&charge=0&am...
这东东最难记,每次需要时都是重新到Google上搜,真是烦死了,这回整理一下贴到这。 按钮式: 链接式: 返回上一步 ">返回上一步 直接跳转式: window.location.href=http://www.9ba.cn; 开新窗口: 云上的日子
无光驱、软驱,硬盘安装XP(也可能是有软驱有光驱,但是没有可启动dos系统的软盘或者光盘)经常从网上下一些iso光盘镜像系统,想安装一下试试,可是身边又没有软盘启动盘,或者光盘可启动盘,怎样安装呢?请看吧:无光驱、软驱,硬盘安装XP在论坛看到朋友们发XP安装求助帖,不禁回想起偶做菜鸟时的苦难岁月,万恶的奸商每装次系统就要30个银圆,大年三十都上门要债,比黄世仁还黄世仁啊!逼的...