本文介绍如何使用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
}