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. 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);
      
      // 取得VM監控資料
      GetInstancesStatsResponse instancesStatsResult = serviceProxy.getInstancesStats(request);
  7. hicloud CaaS / CVPC API的例外訊息,HiCloud SDK的所有方法皆會定義兩類例外,分別為HiCloudServerException與HiCloudClientException
    1. Server端例外(HiCloudServerException),在類別內定義hwsCode與message,接收來自HiCloudServer回傳的例外訊息,相關訊息請參考各服務定義的錯誤代碼
    2. Client端例外(HiCloudClientException),宣告Client端在執行過程中所發生的所有例外