本文介紹如何使用EDAS提供的Java SDK調用API管理ECS叢集中的應用執行個體分組。
前提條件
在管理ECS叢集中的應用執行個體分組前,您必須提前完成以下準備工作:- 安裝EDAS的Java SDK。更多資訊,請參見Java SDK接入指南。
- 確定應用所在地區,假設為cn-hangzhou。
- 建立應用執行個體分組前,請先調用ListHistoryDeployVersion介面查詢應用部署的歷史版本列表,擷取目標版本的唯一標識(PackageVersion.Id)。
- 更換分組前,請先調用ListApplicationEcc介面查詢應用的ECC資訊,擷取目標ECS執行個體的ECC ID(EccId)。
- 建立ECS執行個體。假設為i-bp13o01lzmbsvhsl****和i-bp13o01lzmbsvhsl****。
- 建立ECS叢集,具體操作,請參見使用API建立ECS叢集。
如果您已經建立了ECS叢集,則可以調用ListCluster介面查詢叢集列表,擷取目標ECS叢集的叢集ID(ClusterId),假設為369d06d7-450b-4f3d-bf75-9536fcd9****。
背景資訊
執行個體分組,指的是將應用中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.InsertDeployGroupRequest;
import com.aliyuncs.edas.model.v20170801.InsertDeployGroupResponse;
public class InsertDeployGroup {
public static void main(String[] args) {
//阿里雲帳號或RAM使用者的AccessKey ID。
String aliyun_user_ak = "<yourAccessKeyId>";
//阿里雲帳號或RAM使用者的AccessKey Secret。
String aliyun_user_sk = "<yourAccessKeySecret>";
//應用所在地區ID。
String region_id = "cn-hangzhou";
DefaultProfile defaultProfile = DefaultProfile.getProfile(region_id, aliyun_user_ak, aliyun_user_sk);
DefaultAcsClient client = new DefaultAcsClient(defaultProfile);
//建立API請求,並設定參數。
InsertDeployGroupRequest request = new InsertDeployGroupRequest();
//指定應用,在該應用中建立應用執行個體分組。
request.setAppId("6bbc57a2-a017-4bec-b521-49a15bd3****");
//自訂建立的應用執行個體分組名稱,支援設定為中文、字母、數字、底線(_)和半形句號(.),最長64個字元。
request.setGroupName("Beta");
//應用分組關聯的初始化部署套件版本ID,可以調用介面ListHistoryDeployVersion介面擷取。
request.setInitPackageVersionId("3fc52328-8746-4422-a742-94e0cfc7****");
try {
InsertDeployGroupResponse response = client.getAcsResponse(request);
System.out.println("GroupName=" + response.getDeployGroupEntity().getGroupName() + "\nId=" + response.getDeployGroupEntity().getId());
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
}
}GroupName=Beta
Id=941be68c-4aac-48a1-88fe-c9ad1502****更換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.ChangeDeployGroupRequest;
import com.aliyuncs.edas.model.v20170801.ChangeDeployGroupResponse;
public class ChangeDeployGroup {
public static void main(String[] args) {
//阿里雲帳號或RAM使用者的AccessKey ID。
String aliyun_user_ak = "<yourAccessKeyId>";
//阿里雲帳號或RAM使用者的AccessKey Secret。
String aliyun_user_sk = "<yourAccessKeySecret>";
//應用所在地區ID。
String region_id = "cn-hangzhou";
DefaultProfile defaultProfile = DefaultProfile.getProfile(region_id, aliyun_user_ak, aliyun_user_sk);
DefaultAcsClient client = new DefaultAcsClient(defaultProfile);
//建立API請求,並設定參數。
ChangeDeployGroupRequest request = new ChangeDeployGroupRequest();
//指定應用,將應用中的ECS執行個體更換應用執行個體分組。
request.setAppId("6bbc57a2-a017-4bec-b521-49a15bd3****");
//指定要切換應用分組的ECS執行個體的ECC ID。可以調用ListApplicationEcc介面查詢應用的ECC ID。
request.setEccInfo("4009a824-ce33-4ba0-9ca2-346249a9****");
//目標應用分組名稱,如果需要更換到預設分組,則設定為_DEFAULT_GROUP。
request.setGroupName("Beta");
//ECC的部署套件版本和應用分組的部署套件版本不一致時是否強制更換。true表示強制,false表示不強制。
request.setForceStatus(true);
try {
ChangeDeployGroupResponse response = client.getAcsResponse(request);
System.out.println("Message=" + response.getMessage() + "\nRequestId=" + response.getRequestId());
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
}
}Message=success
ChangeOrderId=369d06d7-450b-4f3d-bf75-9536fcd9****為應用執行個體分組設定JVM
以下代碼適用於在ECS環境為應用執行個體分組設定JVM。
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.UpdateJvmConfigurationRequest;
import com.aliyuncs.edas.model.v20170801.UpdateJvmConfigurationResponse;
public class UpdateJvmConfiguration {
public static void main(String[] args) {
//阿里雲帳號或RAM使用者的AccessKey ID。
String aliyun_user_ak = "<yourAccessKeyId>";
//阿里雲帳號或RAM使用者的AccessKey Secret。
String aliyun_user_sk = "<yourAccessKeySecret>";
//應用所在地區ID。
String region_id = "cn-hangzhou";
DefaultProfile defaultProfile = DefaultProfile.getProfile(region_id, aliyun_user_ak, aliyun_user_sk);
DefaultAcsClient client = new DefaultAcsClient(defaultProfile);
//建立API請求,並設定參數。
UpdateJvmConfigurationRequest request = new UpdateJvmConfigurationRequest();
//指定應用,為應用中的應用執行個體分組設定JVM參數。
request.setAppId("6bbc57a2-a017-4bec-b521-49a15bd3****");
//指定要設定JVM參數的應用執行個體分組的ID。可以調用ListDeployGroup介面查詢應用執行個體分組ID。
request.setGroupId("941be68c-4aac-48a1-88fe-c9ad1502****");
//自訂參數。
request.setOptions("-Dproperty=value");
//初始化堆記憶體大小,單位MB。
request.setMinHeapSize(500);
//持久代記憶體大小,單位MB。
request.setMaxPermSize(500);
//最大堆記憶體大小,單位MB。
request.setMaxHeapSize(500);
try {
UpdateJvmConfigurationResponse response = client.getAcsResponse(request);
System.out.println("Message=" + response.getMessage());
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
}
}Message=success為應用執行個體分組設定Tomcat
以下代碼適用於在ECS環境為應用執行個體分組設定Tomcat。
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.UpdateContainerConfigurationRequest;
import com.aliyuncs.edas.model.v20170801.UpdateContainerConfigurationResponse;
public class UpdateContainerConfiguration {
public static void main(String[] args) {
//阿里雲帳號或RAM使用者的AccessKey ID。
String aliyun_user_ak = "<yourAccessKeyId>";
//阿里雲帳號或RAM使用者的AccessKey Secret。
String aliyun_user_sk = "<yourAccessKeySecret>";
//應用所在地區ID。
String region_id = "cn-hangzhou";
DefaultProfile defaultProfile = DefaultProfile.getProfile(region_id, aliyun_user_ak, aliyun_user_sk);
DefaultAcsClient client = new DefaultAcsClient(defaultProfile);
//建立API請求,並設定參數。
UpdateContainerConfigurationRequest request = new UpdateContainerConfigurationRequest();
//指定應用,為應用中的應用執行個體分組設定Tomcat。
request.setAppId("6bbc57a2-a017-4bec-b521-49a15bd3****");
//指定要設定Tomcat參數的應用執行個體分組的ID。可以調用ListDeployGroup介面查詢應用執行個體分組ID。
request.setGroupId("941be68c-4aac-48a1-88fe-c9ad1502****");
//Tomcat的ContextPath,支援Null 字元串、null-war包名稱、ROOT-根目錄或其他非空自訂字串。
request.setContextPath("");
//應用連接埠。
request.setHttpPort(8080);
//最大線程數。
request.setMaxThreads(20);
//URI編碼方式,支援ISO-8859-1、GBK、GB2312和UTF-8。
request.setURIEncoding("ISO-8859-1");
//useBodyEncodingForURI是否啟用,true表示啟用,false表示不啟用。
request.setUseBodyEncoding(true);
try {
UpdateContainerConfigurationResponse response = client.getAcsResponse(request);
System.out.println("Message=" + response.getMessage());
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
}
}Message=success刪除應用執行個體分組
以下代碼適用於在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.DeleteDeployGroupRequest;
import com.aliyuncs.edas.model.v20170801.DeleteDeployGroupResponse;
public class DeleteDeployGroup {
public static void main(String[] args) {
//阿里雲帳號或RAM使用者的AccessKey ID。
String aliyun_user_ak = "<yourAccessKeyId>";
//阿里雲帳號或RAM使用者的AccessKey Secret。
String aliyun_user_sk = "<yourAccessKeySecret>";
//應用所在地區ID。
String region_id = "cn-hangzhou";
DefaultProfile defaultProfile = DefaultProfile.getProfile(region_id, aliyun_user_ak, aliyun_user_sk);
DefaultAcsClient client = new DefaultAcsClient(defaultProfile);
//建立API請求,並設定參數。
DeleteDeployGroupRequest request = new DeleteDeployGroupRequest();
//指定應用。
request.setAppId("6bbc57a2-a017-4bec-b521-49a15bd3****");
//應用中需要刪除的應用執行個體分組的名稱。可以調用ListDeployGroup介面查詢應用執行個體分組ID。
request.setGroupName("Beta");
try {
DeleteDeployGroupResponse response = client.getAcsResponse(request);
System.out.println("Message=" + response.getMessage() + "\nData=" + response.getData());
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
}
}Message=success
Data=1結果驗證
請根據您執行的操作選擇對應的驗證方式。
- 建立應用執行個體分組。
您可以調用ListDeployGroup介面查詢應用的執行個體分組列表,根據返回結果中的GroupName參數判斷建立應用執行個體分組是否成功。
調用ListDeployGroup介面返回的結果如下:{ "DeployGroupList": { "DeployGroup": [ { "GroupName": "Beta", "AppId": "6bbc57a2-a017-4bec-b521-49a15bd3****", ...... "GroupId": "941be68c-4aac-48a1-88fe-c9ad1502****" } ] }, "Message": "success", "RequestId": "E8DC196C-F446-4465-A2D1-503728601680", "Code": 200 } - 更換ECS執行個體的執行個體分組。
您可以調用ListApplicationEcc介面查詢應用的ECC資訊,根據返回結果中的GroupId和EccId參數判斷將ECS執行個體更換分組是否成功。
調用ListApplicationEcc介面返回的結果如下:
{ "EccInfoList": { "EccInfo": [ { "EcuId": "8287bcf6-cde3-4377-8906-086d2c32****", "GroupId": "941be68c-4aac-48a1-88fe-c9ad1502****", "AppId": "6bbc57a2-a017-4bec-b521-49a15bd3****", "EccId": "02cdcdfa-f22b-45e6-8a0f-a738c766****", ...... } ] }, "Message": "success", "RequestId": "763D5FDF-3EC0-4F73-9FB5-A34E22BA9410", "Code": 200 } - 為應用執行個體分組設定JVM。
您可以調用GetJvmConfiguration介面查詢應用執行個體分組的JVM設定,根據返回結果中的JVM資訊判斷是否操作成功。
調用GetJvmConfiguration介面返回結果如下:
{ "Message": "success", "RequestId": "8EEB65B1-FD4E-4279-A221-09BFB34B9BBF", "JvmConfiguration": { "Options": "-Dproperty=value", "MaxPermSize": 500, "MaxHeapSize": 500, "MinHeapSize": 500 }, "Code": 200 } - 為應用執行個體分組設定Tomcat。
調用GetContainerConfiguration介面查詢應用執行個體分組的Tomcat設定,根據返回結果中的Tomcat資訊判斷是否操作成功。
調用GetContainerConfiguration介面返回的結果如下:
{ "Message": "success", "RequestId": "B04B77C9-3978-4A3D-A628-72D385CB7DD3", "Code": 200, "ContainerConfiguration": { "HttpPort": 8080, "ContextPath": "ROOT", "UseBodyEncoding": true, "URIEncoding": "ISO-8859-1", "MaxThreads": 20 } } - 刪除應用執行個體分組。
您可以調用ListDeployGroup介面查詢應用的執行個體分組列表,根據返回結果中的GroupName參數判斷刪除應用執行個體分組是否成功。
調用ListDeployGroup介面返回的結果如下:
{ "DeployGroupList": { "DeployGroup": [ { "GroupName": "_DEFAULT_GROUP", "AppId": "6bbc57a2-a017-4bec-b521-49a15bd3****", ...... "GroupId": "941be68c-4aac-48a1-88fe-c9ad1502****" } ] }, "Message": "success", "RequestId": "E8DC196C-F446-4465-A2D1-503728601680", "Code": 200 }