本入门教程以CreateSnapshot接口为例,为您演示如何通过阿里云CLI、OpenAPI开发者门户和阿里云SDK等开发者工具调用API接口来为一块云盘创建一份快照,帮助您快速上手云服务器ECS的API接口。
调用方式
调用API时,您可以根据API文档了解使用说明,并查询必选的请求参数。发送请求后报错时,您可以在对应的API文档中获取错误码说明。
阿里云CLI示例:适用于常使用命令行工具的场景。请确保您已经为ECS实例安装了阿里云CLI,在不同操作系统中安装CLI的方式请参见:
OpenAPI开发者门户示例:适用于习惯交互式操作界面的场景,或者初次使用阿里云产品的开发者用户。您可以在OpenAPI开发者门户中调试和获取SDK请求示例。更多信息,请参见OpenAPI 门户。
Java SDK示例:适用于SDK编码或DevOps等场景。要求您已提前安装了ECS Java SDK,安装方式请参见安装Java SDK。
阿里云CLI示例
访问Cloud Shell客户端。具体操作,请参见CLI使用方式。
获取实例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
调用DescribeDisks筛选云盘ID。
aliyun ecs DescribeDisks --RegionId cn-hangzhou --InstanceId i-bp1afnc98r8k69****** --output cols=DiskId rows=Disks.Disk[]
调用CreateSnapshot根据云盘ID创建快照。
aliyun ecs CreateSnapshot --DiskId d-bp19pjyf12hebp******
系统返回以下信息时,表示已成功发起创建任务。
{"RequestId":"16B856F6-EFFB-4397-8A8A-CB73FA******","SnapshotId":"s-bp1afnc98r8kjh******"}
调用DescribeSnapshots查询快照创建状态。
aliyun ecs DescribeSnapshots --RegionId cn-hangzhou --InstanceId i-bp1afnc98r8k69******
当系统返回信息中
"SnapshotId"="s-bp1afnc98r8kjh******"
和"Status":"accomplished"
同时出现时,表示快照已成功创建。
OpenAPI开发者门户示例
通过DescribeInstances获取实例ID和云盘ID。
通过CreateSnapshot根据云盘ID创建快照。
使用DescribeSnapshots查询快照创建状态。
当系统返回信息中"SnapshotId"="s-bp1afnc98r8kjh******"和"Status":"accomplished"同时出现时,表示快照已成功创建。
Java SDK示例
示例代码中的下列参数需要您根据实际情况自行填写。
<AccessKey>和<AccessSecret>:您的AccessKey ID和AccessKey Secret。获取方式请参见创建AccessKey。
说明代码中使用了环境变量
ALIBABA_CLOUD_ACCESS_KEY_ID
和ALIBABA_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();
}
}