Java SDK 调用示例
更新时间 2026-09-03 10:10:57
最近更新时间: 2026-09-03 10:10:57
本节内容介绍了Java SDK 调用示例。
以下代码详细介绍了计算增强型 SDK的使用步骤,仅作步骤示范。示例展示了如何调用SDK创建一台计算增强型云电脑。 说明: 您需要替换示例中的 AK、SK和EndPoint的值以及对应参数的值。
package apis;
import cn.ctyun.apis.*;
import cn.ctyun.sdk.Credential;
import cn.ctyun.sdk.CtyunClient;
import cn.ctyun.sdk.CtyunRequestException;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
/**
* 示例:创建一台2C4G的Windows计算增强型云电脑
*/
class EcpcEcsDemoApiTest {
/**
* 创建计算增强型云电脑的完整流程
* 步骤:
* 1. 查询镜像ID
* 2. 查询VPC和子网ID
* 3. 查询规格模板ID
* 4. 查询安全组ID
* 5. 询价
* 6. 创建云电脑实例
*/
public static void main(String[] args) {
CtyunClient ctyunClient = CtyunClient.defaultClient();
// 创建认证凭证,指定AK,SK(请替换为实际的AK/SK)
Credential credential = new Credential("<YOUR_AK>", "<YOUR_SK>");
// 指定API网关地址(根据实际环境调整)
Apis apis = new Apis("<YOUR_ENDPOINT>", ctyunClient);
String REGION_ID = "<YOUR_REGION_ID>";
System.out.println("========== 开始创建计算增强型云电脑 ==========");
// ------------------ 1. 查询镜像ID ------------------
EcpcDescribeEcsImagesApi.DescribeEcsImagesRequest mirrorRequest = new EcpcDescribeEcsImagesApi.DescribeEcsImagesRequest();
mirrorRequest.setRegionId(REGION_ID);
mirrorRequest.setMirrorType("PUBLIC"); // 公共镜像
mirrorRequest.setFlavorType("Common"); // 通用型
mirrorRequest.setBillMode("Cycle"); // 包周期计费
EcpcDescribeEcsImagesApi.DescribeEcsImagesResponse mirrorResponse = apis.ecpcDescribeEcsImagesApi.send(credential, mirrorRequest);
// 这里筛选出一个windows镜像,可以根据实际需求选择
String imageId = mirrorResponse.getReturnObj().stream()
.filter(x -> x.getImageName().contains("Windows"))
.map(EcpcDescribeEcsImagesApi.DescribeEcsImagesReturnObjResponse::getImageOid)
.findFirst()
.orElseThrow(() -> new RuntimeException("未找到指定的镜像"));
System.out.println("获取镜像ID: " + imageId);
// ------------------ 2. 查询网络资源 ------------------
// 2.1 查询VPC
EcpcDescribeVpcsV3Api.DescribeVpcsV3Request vpcRequest = new EcpcDescribeVpcsV3Api.DescribeVpcsV3Request();
vpcRequest.setRegionId(REGION_ID);
vpcRequest.setVpcName("vpc-pisr"); // 可以指定VPC名称,根据实际情况选择云电脑所属的VPC
EcpcDescribeVpcsV3Api.DescribeVpcsV3Response vpcResponse = apis.ecpcDescribeVpcsV3Api.send(credential, vpcRequest);
String vpcId = vpcResponse.getReturnObj().getList().get(0).getVpcOid(); // 根据实际情况选择
System.out.println("获取VPC ID: " + vpcId);
// 2.2 查询子网
EcpcDescribeSubnetsV3Api.DescribeSubnetsV3Request subnetRequest = new EcpcDescribeSubnetsV3Api.DescribeSubnetsV3Request();
subnetRequest.setRegionId(REGION_ID);
subnetRequest.setVpcOid(vpcId); // 查询指定VPC下的子网
EcpcDescribeSubnetsV3Api.DescribeSubnetsV3Response subnetResponse = apis.ecpcDescribeSubnetsV3Api.send(credential, subnetRequest);
String subnetId = subnetResponse.getReturnObj().getList().get(0).getSubnetOid(); // 根据实际情况选择云电脑所属的VPC子网
System.out.println("获取子网ID: " + subnetId);
// ------------------ 3. 查询规格模板ID(4C8G) ------------------
EcpcDescribeEcsFlavorTemplatesApi.DescribeEcsFlavorTemplatesRequest flavorRequest = new EcpcDescribeEcsFlavorTemplatesApi.DescribeEcsFlavorTemplatesRequest();
flavorRequest.setRegionId(REGION_ID);
flavorRequest.setFlavorType("Common");
flavorRequest.setBillMode("Cycle");
EcpcDescribeEcsFlavorTemplatesApi.DescribeEcsFlavorTemplatesResponse flavorResponse = apis.ecpcDescribeEcsFlavorTemplatesApi.send(credential, flavorRequest);
// 根据实际需求选择规格,这里选择"通用型(2核4G)"作为示例
String templateId = flavorResponse.getReturnObj().stream()
.filter(x -> x.getTemplateName().equals("通用型(2核4G)"))
.map(EcpcDescribeEcsFlavorTemplatesApi.DescribeEcsFlavorTemplatesReturnObjResponse::getTemplateOid)
.findFirst()
.orElseThrow(() -> new RuntimeException("未找到指定的规格模板"));
System.out.println("获取规格模板ID: " + templateId);
// ------------------ 4. 查询安全组ID ------------------
EcpcGetSecurityGroupListV3Api.GetSecurityGroupListV3Request sgRequest = new EcpcGetSecurityGroupListV3Api.GetSecurityGroupListV3Request();
sgRequest.setRegionId(REGION_ID);
sgRequest.setSecurityGroupName("虚拟电子教室学生机默认安全组"); // 根据实际需求调整筛选条件
EcpcGetSecurityGroupListV3Api.GetSecurityGroupListV3Response sgResponse = apis.ecpcGetSecurityGroupListV3Api.send(credential, sgRequest);
String securityGroupId = sgResponse.getReturnObj().getList().get(0).getSecurityGroupOid();
System.out.println("获取安全组ID: " + securityGroupId);
// ------------------ 5. (可选)询价 ------------------
EcpcDescriEcsPriceV3Api.DescriEcsPriceV3Request priceRequest = new EcpcDescriEcsPriceV3Api.DescriEcsPriceV3Request();
priceRequest.setRegionId(REGION_ID);
priceRequest.setTemplateOid(templateId);
priceRequest.setImageOid(imageId);
priceRequest.setBillMode("Cycle");
priceRequest.setCycleType("Month");
priceRequest.setCycleCnt(1);
priceRequest.setSubnetOid(subnetId);
priceRequest.setOsType("Windows");
priceRequest.setSecurityGroupOid(securityGroupId);
priceRequest.setSysDiskType("uhio");
priceRequest.setSysDiskSize(120);
priceRequest.setAutoPay(true);
priceRequest.setInstanceNum(1);
EcpcDescriEcsPriceV3Api.DescriEcsPriceV3Response priceResponse = apis.ecpcDescriEcsPriceV3Api.send(credential, priceRequest);
System.out.println("询价完成,返回结果: " + priceResponse.getReturnObj().getFinalPrice());
// ------------------ 6. 创建云电脑实例 ------------------
EcpcCreateEcsV3Api.CreateEcsV3Request createRequest = new EcpcCreateEcsV3Api.CreateEcsV3Request();
// 基础配置
createRequest.setRegionId(REGION_ID);
createRequest.setTemplateOid(templateId); // 规格模板
createRequest.setImageOid(imageId); // 镜像
createRequest.setBillMode("Cycle"); // 包周期
createRequest.setCycleType("Month"); // 按月计费
createRequest.setCycleCnt(1); // 1个月
// 操作系统和认证
createRequest.setOsType("Windows"); // Windows系统
createRequest.setPassword("CreateEcsV3@93081b6"); // 实例密码(需符合复杂度要求)
// 网络配置
createRequest.setSubnetOid(subnetId); // 子网
createRequest.setSecurityGroupOid(securityGroupId); // 安全组
// 存储配置
createRequest.setSysDiskType("uhio"); // 系统盘类型(高性能云硬盘)
createRequest.setSysDiskSize(120); // 系统盘大小120GB
// 其他配置
createRequest.setInstanceNum(1); // 创建期望的云电脑数量,本示例设置为1
createRequest.setAutoPay(true); // 是否自动支付(仅创建单独付费云电脑有效),默认false。取值范围:- true:是。(仅订购类型为包周期类型有效,需账号有足够金额)- false:否。(仅订购类型为包周期类型有效)
// 发送创建请求
EcpcCreateEcsV3Api.CreateEcsV3Response createResponse = apis.ecpcCreateEcsV3Api.send(credential, createRequest);
System.out.println("✓ 云电脑创建请求已提交! 订单号:" + createResponse.getReturnObj().getNewOrderNo());
System.out.println("\n========== 创建流程完成 ==========");
}