为ECS实例挂载已购买的按量付费的数据盘
更新时间:2019-11-12 16:31:41
本教程详细介绍如何使用Alibaba Cloud SDK for Java为一台ECS实例挂载已购买的按量付费的数据盘。 在使用本教程之前,请确保已完成以下操作:
前提条件
<dependencies>
<!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-core -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.4.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-ecs-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-ecs</artifactId>
<version>4.17.4</version>
</dependency>
</dependencies>
代码示例
说明 待挂载的ECS实例的状态必须为运行中(Running)或者已停止(Stopped)。
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.ecs.model.v20140526.AttachDiskRequest;
import com.aliyuncs.ecs.model.v20140526.AttachDiskResponse;
import com.aliyuncs.ecs.model.v20140526.DescribeDisksRequest;
import com.aliyuncs.ecs.model.v20140526.DescribeDisksResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.google.gson.Gson;
import java.util.List;
/**
* DescribeDisks 查询一块或多块您已经创建的云盘以及本地盘。
* AttachDisk 为一台ECS实例挂载一块按量付费数据盘。
*/
public class TestAttachDisk {
// (ECS实例ID)
private static String instanceId = "i-bp1332junn5uiq******";
public static void main(String[] args) {
IAcsClient client = Initialization();
List<DescribeDisksResponse.Disk> disks = DescribeDisks(client);
// 本示例只做简单处理来获取云盘ID,请您按照实际情况来修改此处代码
try {
// 获取云盘或本地盘ID。
String diskId = disks.get(0).getDiskId();
AttachDisk(client, instanceId, diskId);
} catch (IndexOutOfBoundsException e) {
System.out.println("--------------------没有获取到可用云盘--------------------");
System.out.println(e);
}
}
/**
* AttachDisk 为一台ECS实例挂载一块按量付费数据盘。
*/
private static void AttachDisk(IAcsClient client, String instanceId, String diskId) {
AttachDiskRequest request = new AttachDiskRequest();
// 待挂载的ECS实例ID。
request.setInstanceId(instanceId);
// 待挂载的云盘ID。云盘(DiskId)和实例(InstanceId)必须在同一个可用区。
request.setDiskId(diskId);
// 释放实例时,该云盘是否随实例一起释放。
// 默认值:False。
request.setDeleteWithInstance(false);
try {
AttachDiskResponse response = client.getAcsResponse(request);
System.out.println("--------------------云盘挂载成功--------------------");
System.out.println(new Gson().toJson(response));
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
}
/**
* DescribeDisks 查询一块或多块您已经创建的云盘以及本地盘。
*/
private static List<DescribeDisksResponse.Disk> DescribeDisks(IAcsClient client) {
DescribeDisksRequest request = new DescribeDisksRequest();
// 云盘种类。取值范围:
// all:所有云盘以及本地盘
// cloud:普通云盘
// cloud_efficiency:高效云盘
// cloud_ssd:SSD盘
// cloud_essd:ESSD云盘
// local_ssd_pro:I/O密集型本地盘
// local_hdd_pro:吞吐密集型本地盘
// ephemeral:(已停售)本地盘
// ephemeral_ssd:(已停售)本地SSD盘
// 默认值:all
request.setCategory("cloud_ssd");
// 云盘或本地盘的计费方式。取值范围:
// PrePaid:包年包月
// PostPaid:按量付费
request.setDiskChargeType("PrePaid");
request.setStatus("Available");
try {
DescribeDisksResponse response = client.getAcsResponse(request);
System.out.println("--------------------可用云盘的详细信息--------------------");
System.out.println(new Gson().toJson(response));
return response.getDisks();
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
return null;
}
/**
* Initialization 初始化请求参数
*/
private static IAcsClient Initialization() {
// 初始化请求参数
DefaultProfile profile = DefaultProfile.getProfile(
"<your-region-id>", // 您的可用区ID
"<your-access-key-id>", // 您的AccessKey ID
"<your-access-key-secret>"); // 您的AccessKey Secret
return new DefaultAcsClient(profile);
}
}
执行结果
正确的返回结果类似如下:
--------------------可用云盘的详细信息--------------------
{
"requestId": "61C43B32-A5D9-4608-956E-430E8F202A3B",
"totalCount": 1,
"pageNumber": 1,
"pageSize": 10,
"disks": [
{ ... }
]
}
--------------------云盘挂载成功--------------------
{
"RequestId":"473469C7-AA6F-4DC5-B3DB-A3DC0DE3C83E"
}