通过AWS SDK for Java操作Eucalyptus私有云(1)

By , March 7, 2013 10:28 pm

Eucalyptus是一个开放源代码的、与AWS高度兼容的云管理平台。以AWS为参考原型的各种云管理平台(例如OpenStack)都在某种程度上兼容AWS API,但是只有Eucalyptus将忠诚地兼容AWS API上升到企业战略与核心竞争力的层面。忠诚地兼容AWS API意味着客户能够在私有云环境中继续使用各种现有的与AWS API相兼容的工具、脚本和映像(AMI),能够在基于Eucalyptus的私有云和AWS公有云之间迁移负载和数据,或者是将基于Eucalyptus的私有云作为开发测试环境但是将AWS公有云作为生产环境。

但是,理想与现实之间总是存在差距的。Eucalyptus以AWS为原型不断地完善自身所提供的功能,而AWS也在不断地对现有的服务进行改进。在目前这个阶段,Eucalyptus还无法100%地实现AWS所提供的各种功能和特性。举个例子来说,一个基于最新版本的AWS SDK for Java的应用,直接用来管理一个基于Eucalyptus的私有云,可能还是会遇到一些意想不到的问题。因此,Eucalyptus公司对AWS SDK for Java打了一些补丁。使用打了Eucalyptus补丁的AWS SDK for Java之后,原有的应用无需进行任何修改即可同时用来管理基于AWS的公有云以及基于Eucalyptus的私有云。这听起来好像很复杂,但是操作起来很简单 - 你只需要下载一个我们打了补丁的JAR文件,用其替代掉原来的JAR文件即可。

如果你从来没有使用过AWS SDK for Java,你需要做一些入门的功呢。具体的教程可以从这里获得。这篇博客文章假定您已经按转配置好AWS SDK for Java,并且能够成功地运行其中的一些演示程序。接下来您需要做的是从下面这个链接下载Eucalyptus公司打过补丁的AWS SDK for Java,并用这个新的JAR文件替换掉原来的JAR文件。

http://jeevanullas.in/tmp/aws-java-sdk-1.3.26.jar

下面这段简单的Java代码,演示了如何通过AWS SDK for Java来对基于Eucalyptus的私有云进行操作。这里我使用了我在Eucalyptus社区云服务(Eucalyptus Community Cloud)中的个人帐号进行测试。

/*
* 导入必要的类库
*/

import java.util.HashSet;
import java.util.List;
import java.util.Set;
import com.amazonaws.AmazonClientException;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.ec2.AmazonEC2;
import com.amazonaws.services.ec2.AmazonEC2Client;
import com.amazonaws.services.ec2.model.DescribeAvailabilityZonesResult;
import com.amazonaws.services.ec2.model.DescribeInstancesResult;
import com.amazonaws.services.ec2.model.Instance;
import com.amazonaws.services.ec2.model.Reservation;

public class AwsConsoleApp
{

// 必要的登录信息
// 如果要用来测试AWS公有云服务,需要使用AWS的帐号信息
// 如果要用来测试Eucalyptus私有云服务,可以从eucarc文件中找到这些帐号信息
static String EC2_ACCESS_KEY=”THIS_IS_AN_EC2_ACCESS_KEY”;
static String EC2_SECRET_KEY=”THIS_IS_AN_EC2_SECRET_KEY”;
// 这个信息也可以从eucarc文件中找到,
static String EC2_END_POINT =”http://eucalyptus.ecc.eucalyptus.com:8773/services/Eucalyptus”;
static AmazonEC2 ec2;

// 创建一个AWSCredentials类的实例,包含登录信息
// 设定访问AWS(Eucalyptus)云的端点
private static void init() throws Exception
{
AWSCredentials myCredential = new BasicAWSCredentials(EC2_ACCESS_KEY, EC2_SECRET_KEY);
ec2 = new AmazonEC2Client(myCredential);
ec2.setEndpoint(EC2_END_POINT);
}

// 测试方法
public static void main(String[] args) throws Exception
{
// 初始化登录信息和访问端点
init();

try
{
// 获得所有的可用域列表
DescribeAvailabilityZonesResult availabilityZonesResult = ec2.describeAvailabilityZones();
System.out.println(“You have access to ” + availabilityZonesResult.getAvailabilityZones().size() +
” Availability Zones.”);
// 获得所有的虚拟机列表
DescribeInstancesResult describeInstancesRequest = ec2.describeInstances();
List<Reservation> reservations = describeInstancesRequest.getReservations();
Set<Instance> instances = new HashSet<Instance>();

for (Reservation reservation : reservations)
{
instances.addAll(reservation.getInstances());
}

System.out.println(“You have ” + instances.size() + ” Amazon EC2 instance(s) running.”);
} catch (AmazonServiceException ase) {
System.out.println(“Caught Exception: ” + ase.getMessage());
System.out.println(“Reponse Status Code: ” + ase.getStatusCode());
System.out.println(“Error Code: ” + ase.getErrorCode());
System.out.println(“Request ID: ” + ase.getRequestId());
}

}
}

在Eucalyptus 3.3中,将会进一步增强Eucalyptus与AWS之间的兼容性。在AWS SDK for Java这方面,您可以通过如下两个链接了解我们正在做的工作。

https://github.com/eucalyptus/architecture/wiki/aws_java_sdk-3.3-design
https://github.com/eucalyptus/architecture/wiki/aws_java_sdk-3.3-spec

One Response to “通过AWS SDK for Java操作Eucalyptus私有云(1)”

  1. [...] 在我的前一篇博客文章《通过AWS SDK for Java操作Eucalyptus私有云(1)》中,我们通过一段简单的Java代码演示了可以使用AWS SDK for Java来对基于Eucalyptus的私有云进行操作。在这篇博客文章中,我们进一步介绍AWS SDK for Java中一些常用的API,并以Eucalyptus社区云服务(Eucalyptus Community Cloud)为测试环境对这些代码进行测试。 [...]

Leave a Reply

Panorama Theme by Themocracy