本章节以CreateSnapshot为例,为您演示如何通过阿里云CLI、OpenAPI开发者门户和阿里云SDK等开发者工具调用ECS API。

背景信息

调用API时,您可以根据API文档了解使用说明,并查询必选的请求参数。发送请求后报错时,您可以在相应API文档中获取错误码说明。

调用方式

阿里云CLI示例

  1. 获取实例ID。
    • 如果您已远程连接到ECS实例,可以通过实例元数据获取实例ID。
      curl http://100.100.100.200/2016-01-01/meta-data/instance-id
    • 在本地计算机中,您可以通过DescribeInstances获取实例ID。
      aliyun ecs DescribeInstances --output cols=InstanceId,InstanceName rows=Instances.Instance[]
  2. 使用DescribeDisks筛选云盘ID。
    aliyun ecs DescribeDisks --RegionId cn-hangzhou --InstanceId i-bp1afnc98r8k69****** --output cols=DiskId rows=Disks.Disk[]
  3. 使用CreateSnapshot根据云盘ID创建快照。
    aliyun ecs CreateSnapshot --DiskId d-bp19pjyf12hebp******
    返回以下信息时,表示已成功发起创建任务。
    {"RequestId":"16B856F6-EFFB-4397-8A8A-CB73FA******","SnapshotId":"s-bp1afnc98r8kjh******"}
  4. 使用DescribeSnapshots查询快照创建状态。
    aliyun ecs DescribeSnapshots --RegionId cn-hangzhou --InstanceId i-bp1afnc98r8k69******
    "SnapshotId"="s-bp1afnc98r8kjh******""Status":"accomplished"同时出现,表示快照已成功创建。

OpenAPI开发者门户示例

  1. 通过DescribeInstances获取实例ID和云盘ID。
  2. 通过CreateSnapshot根据云盘ID创建快照。
  3. 使用DescribeSnapshots查询快照创建状态。
    "SnapshotId"="s-bp1afnc98r8kjh******""Status":"accomplished"同时出现,表示快照已成功创建。

Java SDK示例

示例代码中的下列参数需要您根据实际情况自行填写。

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.ecs.model.v20140526.CreateSnapshotRequest;
import com.aliyuncs.ecs.model.v20140526.CreateSnapshotResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;

/* pom.xml
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>3.0.9</version>
</dependency>
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-ecs</artifactId>
    <version>4.10.1</version>
</dependency>
*/  

public class CreateSnapshotExample {

    private String accessKeyId = "<AccessKey>";
    private String accessSecret = "<AccessSecret>";

    /**
     * 云盘所在的地域ID
     */
    private String regionId = "<RegionId>";

    /**
     * 要创建快照的云盘ID
     */
    private String diskId = "<DiskId>";

    public void createSnapshot() {
        DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessSecret);
        IAcsClient client = new DefaultAcsClient(profile);

        CreateSnapshotRequest request = new CreateSnapshotRequest();
        request.setRegionId(regionId);
        request.setDiskId(diskId);
        try {
            CreateSnapshotResponse response = client.getAcsResponse(request);
            logInfo(response.getSnapshotId());
        } catch (ServerException e) {
            logInfo(String.format("Fail. Something with your connection with Aliyun go incorrect. ErrorCode: %s",
                e.getErrCode()));
        } catch (ClientException e) {
            logInfo(String.format("Fail. Business error. ErrorCode: %s, RequestId: %s",
                e.getErrCode(), e.getRequestId()));
        }
    }

    private static void logInfo(String message) {
        System.out.println(message);
    }

    public static void main(String[] args) {
        new CreateSnapshotExample().createSnapshot();
    }
}