本教程详细介绍如何使用Alibaba Cloud SDK for Java为一台ECS实例挂载已购买的按量付费的数据盘。

前提条件

在使用本教程之前,请确保已完成以下操作:

  • 使用ECS管理控制台或通过API获取您需要的ECS实例ID,API接口请参见DescribeInstances
  • 使用Alibaba Cloud SDK for Java,您需要一个阿里云账号和访问密钥(AccessKey)。 请在阿里云控制台中的AccessKey管理页面上创建和查看您的AccessKey。
  • 确保您已经安装了Alibaba Cloud SDK for Java,准确的SDK版本号,请参见 阿里云开发工具包(SDK)
    <dependencies>     <!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-core --&gt;     <dependency&gt;         <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" }