Amazon EC2 的 Web 服务接口非常简单,您可以轻松获取和配置容量。使用该服务,您可以完全控制您的计算资源,并可以在成熟的 Amazon 计算环境中运行。Amazon EC2 将获取并启动新服务器实例所需要的时间缩短至几分钟,这样一来,在您的计算要求发生变化时,您便可以快速扩展计算容量。Amazon EC2 按您实际使用的容量收费,从而改变了计算经济的理论。 Amazon EC2 还为开发人员提供了创建故障恢复应用程序以及排除常见故障情况的工具。
弹性 – 有了 Amazon EC2,您可以在几分钟(而不是几小时或几天)内增加或减少容量。您可以同时管理一个、数百个,甚至数千个服务器实例。当然,因为这全是通过 Web 服务 API 控制,所以您的应用程序可根据其自身需要自动扩展。
完全控制 – 您可以完全控制您的实例。您拥有每个实例的根目录访问权,可以像与其他任何机器一样与这些实例互动。您可以在将数据保存在启动分区时停止运行实例,然后用 Web 服务 API 重启。使用 Web 服务 API 还可以远程重启实例。您还拥有实例控制台输出的访问权。
灵活性 – 有多种实例类型、操作系统和软件包供您选择。有了 Amazon EC2,您可以为您所选择的操作系统和应用程序选取理想的内存、CPU、实例存储和启动分区大小配置。例如,您选择的操作系统中可以包含许多的 Linux 发行版以及 Microsoft Windows Server。
与其他 Amazon Web Services 配合使用 – Amazon EC2 与 Amazon Simple Storage Service (Amazon S3)、Amazon Relational Database Service (Amazon RDS)、Amazon SimpleDB 和 Amazon Simple Queue Service (Amazon SQS) 配合使用,为多种应用程序提供完整的计算、列队处理和存储解决方案。
可靠 – Amazon EC2 提供了一个非常可靠的环境,可以快速与可预期的委托替换实例。 该服务在 Amazon 经过验证的网络基础设施和数据中心中运行。Amazon EC2 服务等级协议的承诺是为每个 Amazon EC2 地区提供 99.95% 的可用性。
安全 – Amazon EC2 与 Amazon VPC 配合工作,为您的计算资源提供安全及强大的联网功能。【1】
说白了,就是EC2可以为你很好的管理计算,可以任你更改Instance(实例,你可以把它理解为一台计算机)的数量,以及相关的配置等等(这里“更改”配置,指的是可以选择不同型号的机器,不同的配置,以及不同的操作系统)。当然选择不同的Instance其费用也有所不同,具体的费用在此就不多说了。作为初次使用者建议你先选择免费的Instance进行试验。
1. create an Amazon EC2 Client,创建一个帐号,这个在上一章(Amazon Simple Storage Service (Amazon S3))已将过。只有登录账户你才可以创建Instance。
2. create an Amazon EC2 security group,创建一个安全组,以便你可以统一管理一系列Instance 。在此,你还需要对你的安全组设置一个名字,以及其允许访问的相关IP范围,这样做的目的完全是处于安全性考虑。
3. create key pair,创建”钥匙“,你可以自行命名你的“钥匙名”,但之后要通过 KeyPair 类的getKeyPair()方法来获得服务器向你发送的“keypair”,记住要很安全地保存好你的“keypair”,如果丢失了,你就无法登录到你申请的Instance里。
4. create instances,创建Instance,你可以在你之前创建的 安全组( security group) 里面,利用你的 “keypair” 申请你需要的类型、数量的Instance,并启动他们。
PS: 对于机器的选择你可以去官方查询,http://aws.amazon.com/cn/ec2/instance-types/#selecting-instance-types。
另外,你也可以选择你需要的instance的具体位置(建议你选择离自己最近的地方),地域的选择也可以参考官网(忘了这个地址了)。
下面是Java的具体实现
Java相关配置在
Amazon Simple Storage Service (Amazon S3) 已详细说明。
package testEc2;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.ec2.AmazonEC2Client;
import com.amazonaws.services.ec2.model.AuthorizeSecurityGroupIngressRequest;
import com.amazonaws.services.ec2.model.CreateKeyPairRequest;
import com.amazonaws.services.ec2.model.CreateKeyPairResult;
import com.amazonaws.services.ec2.model.CreateSecurityGroupRequest;
import com.amazonaws.services.ec2.model.IpPermission;
import com.amazonaws.services.ec2.model.KeyPair;
import com.amazonaws.services.ec2.model.RunInstancesRequest;
public class TestEc2 {
public static void main(String[] args) {
//create an Amazon EC2 Client
AWSCredentials myCredentials = new BasicAWSCredentials(yourKey,yourSecret );//输入你的key和secret,你得去“我的帐户”里找
AmazonEC2Client aec = new AmazonEC2Client(myCredentials);
aec.setEndpoint("ec2.us-west-2.amazonaws.com");//这里是选择你想要什么地方的机器
//create an Amazon EC2 security group
CreateSecurityGroupRequest createSecurityGroupRequest = new CreateSecurityGroupRequest();
createSecurityGroupRequest.withGroupName("JavaSecurityGroup").withDescription("My Java Security Group");
aec.createSecurityGroup(createSecurityGroupRequest);
IpPermission ipPermission = new IpPermission();
ipPermission.withIpRanges("192.168.0.100/32", "192.168.0.110/32").withIpProtocol("tcp").withFromPort(22).withToPort(22);
AuthorizeSecurityGroupIngressRequest authorizeSecurityGroupIngressRequest =new AuthorizeSecurityGroupIngressRequest();
authorizeSecurityGroupIngressRequest.withGroupName("myJavaSecurityGroup").withIpPermissions(ipPermission);
aec.authorizeSecurityGroupIngress(authorizeSecurityGroupIngressRequest);
//create key pair
CreateKeyPairRequest createKeyPairRequest = new CreateKeyPairRequest();
createKeyPairRequest.withKeyName("ddPair");
CreateKeyPairResult createKeyPairResult = aec.createKeyPair(createKeyPairRequest);
KeyPair keyPair = new KeyPair();
keyPair = createKeyPairResult.getKeyPair();
String privateKey = keyPair.getKeyMaterial();
System.out.println("the key is : '"+privateKey+"', please keep it safely!");
// CreateVolumeResult cvr=aec.createVolume(new CreateVolumeRequest());
// Volume v=cvr.getVolume();
// ArrayList<VolumeAttachment> valist=(ArrayList<VolumeAttachment>) v.getAttachments();
// valist.get(0).getDevice();
// AttachVolumeResult avr=aec.attachVolume(new AttachVolumeRequest());
// avr.getAttachment().getDevice();
//create instances
RunInstancesRequest runInstancesRequest = new RunInstancesRequest();
//这里可以设置Instance的Image、类型、最小最大数目
runInstancesRequest.withImageId("ami-5cb3276c").withInstanceType("m1.small").withMinCount(1).withMaxCount(1).withKeyName("myPair").withSecurityGroups("myJavaSecurityGroup");
aec.runInstances(runInstancesRequest);
}
}
PS: 为什么创建Instacne时要设置最小最大的数目?这是为了便于Auto-scaling的实现,即可以不用人为参与,仅根据相关条件(如CPU使用情况等等)服务器自动调整Instance数目已达到整体的最优化。
参考文献:
【1】AWS官网,http://aws.amazon.com/cn/ec2/