全部产品
Search
文档中心

:快速入门

更新时间:Jan 18, 2024

本入门教程以CreateSnapshot接口为例,为您演示如何通过阿里云CLI、OpenAPI开发者门户和阿里云SDK等开发者工具调用API接口来为一块云盘创建一份快照,帮助您快速上手云服务器ECS的API接口。

调用方式

说明

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

阿里云CLI示例

  1. 访问Cloud Shell客户端。具体操作,请参见CLI使用方式

  2. 获取实例ID。

    • 在本地计算机中,您可以调用DescribeInstances获取实例ID。

      aliyun ecs DescribeInstances --output cols=InstanceId,InstanceName rows=Instances.Instance[]
    • 如果您已远程连接到ECS实例,可以通过实例元数据获取实例ID。

      curl http://100.100.100.200/2016-01-01/meta-data/instance-id
  3. 调用DescribeDisks筛选云盘ID。

    aliyun ecs DescribeDisks --RegionId cn-hangzhou --InstanceId i-bp1afnc98r8k69****** --output cols=DiskId rows=Disks.Disk[]
  4. 调用CreateSnapshot根据云盘ID创建快照。

    aliyun ecs CreateSnapshot --DiskId d-bp19pjyf12hebp******

    系统返回以下信息时,表示已成功发起创建任务。

    {"RequestId":"16B856F6-EFFB-4397-8A8A-CB73FA******","SnapshotId":"s-bp1afnc98r8kjh******"}
  5. 调用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示例

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

  • <AccessKey><AccessSecret>:您的AccessKey ID和AccessKey Secret。获取方式请参见创建AccessKey

    说明

    代码中使用了环境变量ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET来获取访问密钥。您需要确保在运行代码之前已经在运行环境中设置了这两个环境变量,并将其替换为实际的访问密钥。

  • <RegionId>:ECS实例所在的地域ID。取值请参见地域和可用区DescribeRegions

  • <DiskId>:云盘ID。取值请参见DescribeDisks

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 {
     /**
     * 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
     * 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取 AccessKey 的方式进行调用,仅供参考。
     * 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html
     */
    private String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
    private String accessSecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");

    /**
     * 云盘所在的地域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();
    }
}