SDK的使用方法


上次更新时间: 2024/06/27


以下为SDK使用的实际示例 (以 runInstances 与 describeInstances 为例)
案例说明:申请云服务器,并持续追踪订单状态直到云服务器完成供装

package chttl.cloud.hws;

import java.util.List;

import chttl.cloud.hws.auth.HwsBasicCredential;
import chttl.cloud.hws.auth.HwsCredential;
import chttl.cloud.hws.exception.HiCloudClientException;
import chttl.cloud.hws.exception.HiCloudServerException;
import chttl.cloud.hws.services.caas.VirtualMachineService;
import chttl.cloud.hws.services.caas.model.DescribeInstancesRequest;
import chttl.cloud.hws.services.caas.model.DescribeInstancesResponse;
import chttl.cloud.hws.services.caas.model.RunInstancesRequest;
import chttl.cloud.hws.services.caas.model.RunInstancesResponse;
import chttl.cloud.hws.services.caas.model.VirtualMachineEntry;

public class ExampleApp
{
	public static void main(String[] args)
			throws HiCloudClientException, HiCloudServerException
	{
		// 添加凭证
		String accessKey = "U0U0MU5UQXhNREF3TVRFek5qSTVPRFkxTURneU1UWT0";
		String secretKey = "WWpJNU16a3pOV1JsWWpNeU5HVXdOMkkxTURNd1lUbG1OMlEwTXpSaFptST0";
		HwsCredential credential = new HwsBasicCredential(accessKey, secretKey);

		// 添加凭证(使用Property文件)
		// HwsCredential credential = new HwsPropertyCredential();

		// 创建Client End
		HiCloudWebServiceClient client = new HiCloudWebServiceClient("hws.hicloud.hinet.net", credential);

		// 若使用Proxy Server,可通过以下方式设置
		client.getConfiguration().setProxyServerIp("proxy.cht.com.tw");
		client.getConfiguration().setProxyServerPort(8080);

		// 创建VM Service Proxy,负责代理处理参数传递与数据验证
		VirtualMachineService serviceProxy = client.newServiceProxy(VirtualMachineService.class);

		// 步骤1:添加VM
		// 添加Run Instance Request
		RunInstancesRequest request = new RunInstancesRequest();
		request.setImageId("hi-cuium8up");
		request.setCount(1);
		request.setInstanceName("Test HA");
		request.setMonitoringEnabled(false);
		request.setInstanceType("HC1.S.WIN");
		request.setRegionId("region-tw-1");

		// 呼叫CaaS / CVPC API创建VM並返回RunInstancesResponse
		RunInstancesResponse runInstancesResult = serviceProxy.runInstances(request);
		// 顯示RunInstancesResponse結果
		System.out.println(runInstancesResult);

		// 步驟2:查詢云服务器資訊
		// 添加Describe Instance Request
		DescribeInstancesRequest describeRequest = new DescribeInstancesRequest();
		// 根据添加RunInstance返回的uuid查询,云服务器订单状态
		describeRequest.setOrderUuid(runInstancesResult.getOrderUuidList());

		boolean isProvisionFinished = false;
		// 持续查询云服务器信息,直到云服务器供装完毕
		while (!isProvisionFinished)
		{
			// 呼叫CaaS / CVPC API查詢VM並返回DescribeInstancesResponse
			DescribeInstancesResponse describeInstancesResult = serviceProxy.describeInstances(describeRequest);
			// 显示VM订单状态
			System.out.println(describeInstancesResult);

			List<VirtualMachineEntry> instances = describeInstancesResult.getInstanceList();
			for (VirtualMachineEntry instance : instances)
			{
				if (!instance.getProvisionStatus().equals("provisioning"))
				{
					isProvisionFinished = true;
				}
			}

			try
			{
				Thread.sleep(5000);
			}
			catch (InterruptedException e)
			{
				e.printStackTrace();
			}
		}
	}
}

使用说明


  1. 1. hiCloud CaaS / CVPC SDK下载
  2. hicloud CaaS / CVPC API的相关信息
    1. 主机: hws.hicloud.hinet.net
    2. Port: 443
    3. HTTP protocol: HTTPS
  3. 取得凭证信息,先到 User Portal 取得 Access Key、Secret key 的信息,如:
    Access Key: U0U0MU5UQXhNREF3TVRFek5qSTVPRFkxTURneU1UWT0
    Secret key: WWpJNU16a3pOV1JsWWpNeU5HVXdOMkkxTURNd1lUbG1OMlEwTXpSaFptST0
  4. 注册凭证信息,可以以下两种方式宣告凭证
    1. 直接宣告于Java Code
      String accessKey = "U0U0MU5UQXhNREF3TVRFek5qSTVPRFkxTURneU1UWT0";
      String secretKey = "WWpJNU16a3pOV1JsWWpNeU5HVXdOMkkxTURNd1lUbG1OMlEwTXpSaFptST0";
      HwsCredential credential = new HwsBasicCredential(accessKey, secretKey);
    2. 将凭证信息写入Property文件,预设凭证文件名为HwsCredential.properties
      accessKey = U0U0MU5UQXhNREF3TVRFek5qSTVPRFkxTURneU1UWT0
      secretKey = WWpJNU16a3pOV1JsWWpNeU5HVXdOMkkxTURNd1lUbG1OMlEwTXpSaFptST0
      并宣告凭证,类名为HwsPropertyCredential
      HwsCredential credential = new HwsPropertyCredential();
  5. 创建服务器连接信息
    • 创建HiCloud Service Client
      HiCloudWebServiceClient client = new HiCloudWebServiceClient("hws.hicloud.hinet.net", credential);
    • 若使用Proxy Server,可透过以下方式设置
      client.getConfiguration().setProxyServerIp("proxy.cht.com.tw");
      client.getConfiguration().setProxyServerPort(8080);
  6. 创建云运算服务代理,透过代理机制将设置参数送往hicloud CaaS / CVPC API,各项服务代理如下:
    1. 云服务器:相关方法与参数,请参考Java开发者中心 > 云运算 > 云服务器
      // 创建Client End
      HiCloudWebServiceClient client = new HiCloudWebServiceClient("hws.hicloud.hinet.net", credential);
      
      // 创建云服务器服务Proxy
      VirtualMachineService serviceProxy = client.newServiceProxy(VirtualMachineService.class);
      // 添加Run Instance Request
      RunInstancesRequest request = new RunInstancesRequest();
      request.setImageId("hi-cuium8up");
      request.setCount(1);
      request.setInstanceName("Test HA");
      request.setMonitoringEnabled(false);
      request.setInstanceType("HC1.S.WIN");
      
      // 呼叫CaaS / CVPC API创建VM并返回RunInstancesResponse
      RunInstancesResponse runInstancesResult = serviceProxy.runInstances(request);
    2. 负载均衡:相关方法与参数,请参考Java开发者中心 > 云运算 > 负载均衡
      // 创建Client End
      HiCloudWebServiceClient client = new HiCloudWebServiceClient("hws.hicloud.hinet.net", credential);
      
      // 创建负载均衡服务Proxy
      ServerLoadBalancerService serviceProxy = client.newServiceProxy(ServerLoadBalancerService.class);
      			
      CreateLoadBalancerPolicyRequest request = new CreateLoadBalancerPolicyRequest();
      
      // 创建云服务器负载均衡群组
      List<String> instanceIds =   new ArrayList<String>();
      instanceIds.add("BV55010001000A");
      instanceIds.add("BV55010001000B");
      request.setInstanceId(instanceIds);
      
      // 设置SLB服务Port
      List<Integer> slbPorts = new ArrayList<Integer>();
      slbPorts.add(Integer.valueOf(80));
      slbPorts.add(Integer.valueOf(443));
      request.setPort(slbPorts);
      
      // 创建SLB Policy
      CreateLoadBalancerPolicyResponse slbResult = serviceProxy.createLoadBalancerPolicy(request);
    3. 云服务器监控:相关方法与参数,请参考Java开发者中心 > 云运算 > 云服务器监控
      // 创建Client End
      HiCloudWebServiceClient client = new HiCloudWebServiceClient("hws.hicloud.hinet.net", credential);
      
      // 创建虛擬機監控服務Proxy
      MonitorService serviceProxy = client.newServiceProxy(MonitorService.class);
      
      // 添加GetInstancesStats Request
      GetInstancesStatsRequest request =new GetInstancesStatsRequest();
      
      // 设置欲查询VM的Instance ID
      List<String> instanceIds = new ArrayList<String>();
      instanceIds.add("BV55010001000A");
      instanceIds.add("BV55010001000B");
      request.setInstanceId(instanceIds);
      
      // 取得云服务器监控资料
      GetInstancesStatsResponse instancesStatsResult = serviceProxy.getInstancesStats(request);
  7. hicloud CaaS / CVPC API的的异常信息,HiCloud SDK的所有方法皆会定义两类异常,分別為HiCloudServerException與HiCloudClientException
    1. Server端异常(HiCloudServerException),在類內定義hwsCode與message,接收來自HiCloudServer返回的异常訊息,相关信息请参考各服务定义的错误代码
    2. Client端异常(HiCloudClientException),宣告Client端在执行过程中所发生的所有异常