使用AWS SDK for Java创建并启动EC2实例
来源:互联网 发布:雷诺系数计算实验数据 编辑:程序博客网 时间:2024/05/17 21:59
本文主要记录使用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;}
以上即本文的全部内容,错误之处欢迎大家交流指正:)。
- 使用AWS SDK for Java创建并启动EC2实例
- AWS-EC2创建centOS6.7实例
- 从0开始,创建 AWS EC2 实例
- AmazonS3 使用 AWS SDK for Java
- AWS中启动EC2实例时使用上传的Key Pair文件
- 在AWS的EC2上创建root用户,并使用root用户登录
- 使用AWS SDK for Java 上传和下载文件
- 在AWS上创建linux系统EC2使用docker
- 亚马逊AWS免费套餐EC2安装centos连接登录并创建root
- [Amazon AWS 云计算服务] - 从无到有 创建完整Amazon EC2实例
- 在AWS EC2上创建root用户
- 亚马逊AWS学习-创建EC2 windows
- 启动 Amazon EC2 实例
- AWS EC2
- Enabling Metrics for the AWS SDK for Java
- AWS 使用CLI将IAM角色附加到现有的EC2实例中
- 使用免费的云服务 AWS EC2
- 【基础】使用Ansible连接AWS EC2
- 我理解的分类、目标检测、目标识别、目标定位、目标跟踪
- 2017/11/7模拟赛总结
- solr学习-search翻译
- linux安装jdk (centos7)
- 积分通道特征(integral channel features)(大腿写的详细版)
- 使用AWS SDK for Java创建并启动EC2实例
- BZOJ 2819: Nim
- kVM I/O虚拟化分析
- 树
- CS书籍目录
- python-notes
- USRP B210工作总结
- 3.jupyter的常用操作(中)
- 【Java笔记】---Week06 常用类、正则表达式与集合