本文介紹如何使用EDAS提供的Java SDK調用API擴容ECS集群。
前提條件
在擴容ECS集群前,您必須提前完成以下準備工作:
安裝EDAS的Java SDK。更多信息,請參見Java SDK接入指南。
確定創建ECS集群的地域。
創建ECS實例。假設為i-bp13o01lzmbsvhsl****和i-bp13o01lzmbsvhsl****。
創建ECS集群,具體操作,請參見使用API創建ECS集群。
如果您已經創建了ECS集群,則可以調用ListCluster接口查詢集群列表,獲取目標ECS集群的集群ID(ClusterId),假設為369d06d7-450b-4f3d-bf75-9536fcd9****。
背景信息
支持調用InstallAgent接口或InsertClusterMember接口向ECS集群導入ECS實例,推薦使用InstallAgent接口,不推薦使用InsertClusterMember接口。
調用InsertClusterMember接口導入ECS實例時,會重裝ECS實例的操作系統,重裝后,實例中所有數據都會被刪除并且需要重新設置實例登錄密碼。因此不推薦使用該接口導入ECS實例。
調用InstallAgent接口導入ECS實例時,不會重裝ECS實例的操作系統。因此推薦使用該接口導入ECS實例。
購買ECS實例擴容
購買ECS實例擴容,支持以下兩種方式:
基于現有實例購買:需要指定現有實例的實例ID。
//基于現有實例規則購買,ECS實例的實例ID。 request.setTemplateInstanceId("i-bp13o01lzmbsvhsl****");
基于實例啟動模板購買:需要設置ECS啟動模板ID和模板版本。
//ECS啟動模板ID。 request.setTemplateId("lt-****hy9s2"); //ECS啟動模板版本,-1代表默認的啟動模板版本。 request.setTemplateVersion("-1");
說明實例啟動模板用于快速創建實例的模板。模板中包含了您自主選擇的用于創建實例的配置信息,所有配置為可選,能夠滿足不同場景的個性化需求。
實例啟動模板不支持修改,但可以創建多個版本,每個版本可以配置不同的參數,通過版本管理體現實例配置的演進過程。您可以使用模板任意一個版本創建實例。
更多關于實例啟動模板和模板版本的信息,請參見創建實例啟動模板和創建實例啟動模板的新版本。
以下代碼用于在ECS集群購買ECS實例。
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.edas.model.v20170801.ScaleoutApplicationWithNewInstancesRequest;
import com.aliyuncs.edas.model.v20170801.ScaleoutApplicationWithNewInstancesResponse;
public class ScaleoutApplicationWithNewInstances {
public static void main(String[] args) {
// 阿里云賬號AccessKey擁有所有API的訪問權限,風險很高。強烈建議您創建并使用RAM用戶進行API訪問或日常運維,請登錄RAM控制臺創建RAM用戶。
// 此處以把AccessKey和AccessKeySecret保存在環境變量為例說明。您可以根據業務需要,保存到配置文件里。
// 強烈建議不要把AccessKey和AccessKeySecret保存到代碼里,會存在密鑰泄漏風險。
String aliyun_user_ak = System.getenv("ACCESS_KEY_ID");
String aliyun_user_sk = System.getenv("ACCESS_KEY_SECRET");
//集群所在地域ID。
String region_id = "cn-hangzhou";
DefaultProfile defaultProfile = DefaultProfile.getProfile(region_id, aliyun_user_ak, aliyun_user_sk);
DefaultAcsClient client = new DefaultAcsClient(defaultProfile);
//創建API請求,并設置參數。
ScaleoutApplicationWithNewInstancesRequest request = new ScaleoutApplicationWithNewInstancesRequest();
//需要擴容的ECS集群的集群ID。
request.setClusterId("369d06d7-450b-4f3d-bf75-9536fcd9****");
//基于現有實例規則購買,ECS實例的實例ID。如果是基于實例模板購買,則無需設置此參數,需要設置ECS啟動模板ID和模板版本。
request.setTemplateInstanceId("i-bp13o01lzmbsvhsl****");
//購買的ECS實例數量。
request.setScalingNum(2);
//購買ECS實例的計費方式,PrePaid表示包年包月,PostPaid表示按量計費。
request.setInstanceChargeType("PrePaid");
//包年包月計費方式的時長單位,Month表示月,Week表示周。
request.setInstanceChargePeriodUnit("Month");
//購買資源的時長,時長單位為Month時可設置為:1~12和12的整數倍;時長單位為Week時可設置為:1~4。
request.setInstanceChargePeriod(12);
//是否開啟自動續費,true表示自動續費,false表示不自動續費。
request.setAutoRenew(true);
//單次自動續費的續費時長,時長單位為Month時可設置為:1~12和12的整數倍;時長單位為Week時可設置為:1~4。
request.setAutoRenewPeriod(12);
try {
ScaleoutApplicationWithNewInstancesResponse response = client.getAcsResponse(request);
System.out.println("Message=" + response.getMessage() + "\nInstanceIds=" + response.getInstanceIds());
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
}
}
運行程序,返回的執行結果如下:
Message=success
InstanceIds=[i-bp1ilg5114r054eo****, i-bp1ilg5114r054eo****]
添加已有ECS實例擴容
以下代碼用于向ECS集群導入已有ECS實例。
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.edas.model.v20170801.InstallAgentRequest;
import com.aliyuncs.edas.model.v20170801.InstallAgentResponse;
public class InstallAgent {
public static void main(String[] args) {
// 阿里云賬號AccessKey擁有所有API的訪問權限,風險很高。強烈建議您創建并使用RAM用戶進行API訪問或日常運維,請登錄RAM控制臺創建RAM用戶。
// 此處以把AccessKey和AccessKeySecret保存在環境變量為例說明。您可以根據業務需要,保存到配置文件里。
// 強烈建議不要把AccessKey和AccessKeySecret保存到代碼里,會存在密鑰泄漏風險。
String aliyun_user_ak = System.getenv("ACCESS_KEY_ID");
String aliyun_user_sk = System.getenv("ACCESS_KEY_SECRET");
//集群所在地域ID。
String region_id = "cn-hangzhou";
DefaultProfile defaultProfile = DefaultProfile.getProfile(region_id, aliyun_user_ak, aliyun_user_sk);
DefaultAcsClient client = new DefaultAcsClient(defaultProfile);
//創建API請求,并設置參數。
InstallAgentRequest request = new InstallAgentRequest();
//目標ECS集群的集群ID。
request.setClusterId("369d06d7-450b-4f3d-bf75-9536fcd9****");
//需要導入的ECS實例ID,多個實例間以半角逗號(,)分隔。
request.setInstanceIds("i-bp13o01lzmbsvhsl****,i-bp13o01lzmbsvhsl****");
try {
InstallAgentResponse response = client.getAcsResponse(request);
System.out.println("Message=" + response.getMessage());
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
}
}
運行程序,返回的執行結果如下:
Message=success
結果驗證
在為ECS集群購買ECS實例或添加已有ECS實例后,都可以調用InsertClusterMember接口查詢集群中ECS實例列表,根據返回結果中的ECS實例ID(EcsId)判斷擴容操作是否成功。
{
"Message": "success",
"RequestId": "C326EF8E-048E-45C8-BE87-18D512000573",
"ClusterMemberPage": {
"ClusterMemberList": {
"ClusterMember": [
{
"Status": 1,
"ClusterId": "369d06d7-450b-4f3d-bf75-9536fcd9****",
"CreateTime": 1618827574965,
"UpdateTime": 1618827655646,
"EcuId": "08da39f3-257c-44c4-abce-9ce31ec1****",
"ClusterMemberId": "49eeb7fa-7c97-436f-b87f-a875a8b8****",
"EcsId": "i-bp1ilg5114r054eo****"
},
{
"Status": 1,
"ClusterId": "369d06d7-450b-4f3d-bf75-9536fcd9****",
"CreateTime": 1618827574957,
"UpdateTime": 1618827655645,
"EcuId": "8287bcf6-cde3-4377-8906-086d2c32****",
"ClusterMemberId": "f5b30a72-7137-4b5c-8d21-a2eac2f0****",
"EcsId": "i-bp1ilg5114r054eo****"
}
]
},
"PageSize": 20000,
"CurrentPage": 1,
"TotalSize": 2
},
"Code": 200
}