专栏首页云计算相关使用JClouds在Java中获取和发布云服务器

使用JClouds在Java中获取和发布云服务器

本文中,我们举例来说明如何使用JClouds API 获取和发布云服务器。JClouds API 可以和大量云服务提供商(包括Amazon EC2和Rackspace)协同工作并且允许使用Java代码执行大量操作。换句话说,JClouds API不是针对某些提供商所特定接口去进行交互。下面我们以Rackspace所提供的云服务为例进行说明。

首先为JClouds获取jar。如果您使用的是Maven,依赖关系如下所示。在操作之前,请先检查版本是否需要更新。

<dependency>
     <groupId>org.jclouds</groupId>
     <artifactId>jclouds-allcompute</artifactId>
     <version>1.5.2</version>
</dependency>
<dependency>
     <groupId>org.jclouds.driver</groupId>
     <artifactId>jclouds-sshj</artifactId>
     <version>1.5.1</version>
</dependency>
<dependency>
     <groupId>org.jclouds.driver</groupId>
     <artifactId>jclouds-log4j</artifactId>
     <version>1.5.1</version>
</dependency

创建计算服务

创建一个名为“CloudService”的类。在它的在构造函数中,设置好接口信息,如用户名、API秘钥等信息,最后将这个类实例化。

package co.syntx.examples.jclouds;

import static org.jclouds.compute.predicates.NodePredicates.inGroup;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.log4j.Logger;
import org.jclouds.ContextBuilder;
import org.jclouds.compute.ComputeService;
import org.jclouds.compute.ComputeServiceContext;
import org.jclouds.compute.domain.ComputeMetadata;
import org.jclouds.compute.domain.Image;
import org.jclouds.compute.domain.NodeMetadata;
import org.jclouds.compute.domain.Template;
import org.jclouds.compute.domain.TemplateBuilder;

public class CloudService {

    private ComputeService compute;
    private String location;
    public static final Logger logger = Logger.getLogger(CloudService.class);

    /**
     * CloudService类构造器
     * 需要明确云服务供应商提供的字符串,数据库位置,用户名,API秘钥。
     * @param provider
     * @param location
     * @param username
     * @param apiKey
     */

     public CloudService(String provider, String location, String username, String apiKey) {
        this.location = location;  
         ComputeServiceContext context = ContextBuilder.newBuilder(provider).credentials(username, apiKey)
					.buildView(ComputeServiceContext.class);
         compute = context.getComputeService();
         logger.info("Cloud Compute Service Context Created");
     }

获取云服务

接下来写一个获取云服务的功能,其中主要的参数如下:

groupName:如果要获取多个服务器,则所有服务器都需要以groupName作为前缀,以便识别和分类。

OS:操作系统的名称

osVersion:操作系统的版本

RAM:RAM的大小

count:所需的云服务器数量

/**
* 通过指定参数获取服务器
* @param groupName
* @param os
* @param osVersion
* @param ram
* @param count
* @throws Exception
*/
public void aquireServer(String groupName, String os, String osVersion, Integer ram, Integer count) throws Exception {

     TemplateBuilder templateBuilder = compute.templateBuilder();
     Template template = templateBuilder
                         .locationId(this.location)
                         .os64Bit(true)
                         .osDescriptionMatches(os)
                         .osVersionMatches(osVersion)
                         .minRam(ram)
                         .build();

      logger.info("Acquiring "+ count+ " server(s).");
      Set<? extends NodeMetadata> nodes = compute.createNodesInGroup(groupName,count, template);
      logger.info(nodes.size() + " server(s) acquired!");
}

发布服务器组中的服务器

我们可以一次发布一个或一组服务器。下面代码可以发布服务器组:

public void releaseGroup(String groupName) throws Exception {
    logger.info("Releasing server(s) from group " + groupName);
    Set<? extends NodeMetadata> servers = compute.destroyNodesMatching(inGroup(groupName));		
    logger.info(servers.size() + " released from group " + groupName);
}

实现

最后,我们对类进行实例化并传入一组参数,调用获取云服务的功能。在调用之前,rackspace控制面板如下:

rackspace 控制面板

CloudService cloudService = new CloudService("rackspace-cloudservers-us","DFW", "yourUsername", "yourAPIKey");
cloudService.aquireServer("my-test-servers","Ubuntu","12.04",512,2);

在成功获取服务器之前,再调用这个功能都会被阻塞。阻塞过程中,控制面板会像图中所示:

图片.png

最后,调用服务器发布功能进行发布。

cloudService.releaseGroup("my-test-servers");

这就是JClouds使用的简例。JClouds库提供了很多强大的功能。最重要的就是JClouds将您选择的云服务进行了抽象,如果更换其他提供商的云服务,基本上不需要去修改代码。

原文链接:https://dzone.com/articles/acquiring-and-releasing-cloud

原文作者:Faheem Sohail

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用Artik创建物联网项目

    Artik IoT平台是一个端到端的物联网平台,可协助我们构建出物联网项目。它是一个开放的平台,对多种不同设备提供云支持。通过Artik IoT,成功连接的设备...

    小芬达
  • IAAS与PAAS的开发者视角

    在我以前的文章中,解释了云计算的基本概念,包括它的定义,特性和各种服务模式。在本文中,将从开发者的角度对基础设施即服务(IAAS:Infrastrqucture...

    小芬达
  • 使用JClouds在Java中获取和发布云服务器

    本文中,我们举例来说明如何使用JClouds API 获取和发布云服务器。JClouds API 可以和大量云服务提供商(包括Amazon EC2和Racksp...

    Techeek
  • 微信开发之token认证 原

    用户2603479
  • Excel转shape file

    本文讲述如何结合geotools和POI实现Excel到shp的转换,再结合前文shp到geojson数据的转换,即可实现用户上传excel数据并在web端的展...

    lzugis
  • 用GeoTools实现shp+sld导出图片

    lzugis
  • SpringBoot---(21)核心原理:自动化配置2

    继续追SpringFactoriesLoader类中的loadFactoryNames这个方法--->

    IT云清
  • 完整教程:Springboot 2.2整合

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    程裕强
  • 微信企业号登录授权Java实现获取员工userid根据userid换openid

    微信企业号登录授权Java实现获取员工userid根据userid换openid 2016年1月8日 为了方便测试 。debug 建议大家搞个花生壳或者其他的可...

    小帅丶
  • springBoot生成SQL文件-Hibernate5的SchemaUpdate实现

    之前两篇介绍了使用Hibernate生成SQL全量脚本文件的方式,若需要生成增量脚本进行版本维护呢?想到的对于生成增量脚本的方案可归为:

    汐楓

扫码关注云+社区

领取腾讯云代金券