本教程详细介绍如何使用 Alibaba Cloud SDK for Java,从创建专有网络VPC开始到成功创建云服务器ECS实例。

前提条件

在使用本教程之前,请确保已完成以下操作:
  • 使用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 -->
        <dependency>
            <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>

代码示例

本文操作示例主要以代码形式体现,具体代码如下:
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.ecs.model.v20140526.RunInstancesRequest;
import com.aliyuncs.ecs.model.v20140526.RunInstancesResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.vpc.model.v20160428.CreateVSwitchRequest;
import com.aliyuncs.vpc.model.v20160428.CreateVSwitchResponse;
import com.aliyuncs.vpc.model.v20160428.CreateVpcRequest;
import com.aliyuncs.vpc.model.v20160428.CreateVpcResponse;
import com.google.gson.Gson;

/**
 * CreateVpc    创建一个专有网络(VPC)
 * CreateVSwitch    创建一个交换机
 * RunInstances    创建一台ECS实例
 */
public class Demo{

    public static void main(String[] args) {
        // 初始化公共请求参数
        IAcsClient client = Initialization();
        // 创建一个专有网络(VPC)
        String VPCId = CreateVpc(client);
        // 创建一个交换机
        String VSwitchId = CreateVSwitch(client, VPCId);
        // 创建一台ECS实例
        RunInstances(client,VSwitchId);
    }

    /**
     * RunInstances    创建一台ECS实例
     */
    private static void RunInstances(IAcsClient client, String vSwitchId) {
        RunInstancesRequest request = new RunInstancesRequest();
        // 镜像文件ID,启动实例时选择的镜像资源。如需使用云市场镜像,您可以在云市场镜像商详情页查看ImageId。
        request.setImageId("centos_7_06_64_20G_alibase_20190711.vhd");
        // 实例的名称。长度为2~128个英文或中文字符。必须以大小字母或中文开头,不能以 http:// 和 https:// 开头。可以包含数字、半角冒号(:)、下划线(_)或者连字符(-)。如果没有指定该参数,默认值为实例的InstanceId。
        request.setInstanceName("DOM_ECS_TEST");
        // 实例的资源规格。更多详情,请参见实例规格族,也可以调用DescribeInstanceTypes接口获得最新的规格表。
        request.setInstanceType("ecs.g5.large");
        // 指定新创建实例所属于的安全组ID,同一个安全组内的实例之间可以互相访问。
        request.setSecurityGroupId("sg-uf6h7bxba3d1zelb0619");
        // 网络计费类型。取值范围:
        // PayByBandwidth:按固定带宽计费
        // PayByTraffic(默认):按使用流量计费
        request.setInternetChargeType("PayByBandwidth");
        // 公网入带宽最大值,单位为Mbit/s。取值范围:1~200
        // 默认值:200
        request.setInternetMaxBandwidthIn(100);
        // 公网出带宽最大值,单位为Mbit/s。取值范围:0~100
        // 默认值:0
        request.setInternetMaxBandwidthOut(1);
        // 云服务器的主机名。
        // 点号(.)和短横线(-)不能作为首尾字符,更不能连续使用。
        // Windows实例:字符长度为2~15,不支持点号(.),不能全是数字。允许大小写英文字母、数字和短横线(-)。
        // 其他类型实例(Linux等):字符长度为2~64,支持多个点号(.),点之间为一段,每段允许大小写英文字母、数字和短横线(-)。
        request.setHostName("LocalHost");
        // 实例的密码。长度为8至30个字符,必须同时包含大小写英文字母、数字和特殊符号中的三类字符。特殊符号可以是:
        //          ()`~!@#$%^&*-_+=|{}[]:;'<>,.?/
        // 其中,Windows实例不能以斜线号(/)为密码首字符。
        // 说明 如果传入Password参数,建议您使用HTTPS协议发送请求,避免密码泄露。
        request.setPassword("EcsV587!");
        // 实例所属的可用区ID。更多详情,请参见DescribeZones获取可用区列表。
        // 默认值:空,表示随机选择。
        request.setZoneId("cn-shanghai-f");
        // 实例的付费方式。取值范围:
        // PrePaid:包年包月。选择该类付费方式时,您必须确认自己的账号支持余额支付/信用支付,否则将返回 InvalidPayMethod的错误提示。
        // PostPaid(默认):按量付费。
        request.setInstanceChargeType("PostPaid");
        // 系统盘大小,单位为GiB。取值范围:20~500
        // 该参数的取值必须大于或者等于max{20, ImageSize}。
        // 默认值:max{40, ImageSize}
        request.setSystemDiskSize("40");
        // 系统盘的云盘种类。已停售的实例规格且非I/O优化实例默认值为cloud,否则默认值为cloud_efficiency。取值范围:
        // cloud:普通云盘
        // cloud_efficiency:高效云盘
        // cloud_ssd:SSD云盘
        // ephemeral_ssd:本地SSD盘
        // cloud_essd:ESSD云盘。
        request.setSystemDiskCategory("cloud_ssd");
        // 系统盘名称。长度为2~128个英文或中文字符。必须以大小字母或中文开头,不能以 http:// 和 https:// 开头。可以包含数字、半角冒号(:)、下划线(_)或者连字符(-)。默认值:空。
        request.setSystemDiskDiskName("SystemDisk");
        // 系统盘描述。长度为2~256个英文或中文字符,不能以 http:// 和 https:// 开头。默认值:空。
        request.setSystemDiskDescription("SystemDisk_test");
        // 实例的描述。长度为2~256个英文或中文字符,不能以 http:// 和 https:// 开头。默认值:空。
        request.setDescription("测试中.....");
        // 如果是创建VPC类型的实例,需要指定虚拟交换机ID。
        request.setVSwitchId(vSwitchId);
        try {
            RunInstancesResponse response = client.getAcsResponse(request);
            System.out.println("--------------------ECS实例创建成功--------------------");
            System.out.println(new Gson().toJson(response));
        } catch (ClientException e) {
            System.out.println("ErrCode:" + e.getErrCode());
            System.out.println("ErrMsg:" + e.getErrMsg());
            System.out.println("RequestId:" + e.getRequestId());
            throw new RuntimeException();
        }
    }

    /**
     * CreateVSwitch    创建一个交换机
     */
    private static String CreateVSwitch(IAcsClient client, String vpcId) {
        CreateVSwitchRequest request = new CreateVSwitchRequest();
        // 交换机所属的VPC ID。
        request.setVpcId(vpcId);
        // 交换机的网段。交换机网段要求如下:
        // 交换机网段的掩码长度范围为16-29位
        // 交换机的网段必须从属于所在VPC的网段
        // 交换机的网段不能与所在VPC中路由条目的目标网段相同,但可以是目标网段的子集
        // 如果交换机的网段与所在VPC的网段相同时,VPC只能有一个交换机
        request.setCidrBlock("192.168.0.0/16");
        // 交换机所属区的ID。 您可以通过调用DescribeZones接口获取地域ID
        request.setZoneId("cn-shanghai-b");
        // 交换机的描述信息
        // 长度为 2-256个字符,必须以字母或中文开头,但不能以http:// 或https://开头
        request.setDescription("DOCTestlalala");
        // 交换机的名称。
        // 长度为 2-128个字符,必须以字母或中文开头,但不能以http:// 或https://开头。
        request.setVSwitchName("DOCTest");
        try {
            CreateVSwitchResponse response = client.getAcsResponse(request);
            System.out.println("--------------------交换机创建成功--------------------");
            System.out.println(new Gson().toJson(response));
            return response.getVSwitchId();
        } catch (ClientException e) {
            System.out.println("ErrCode:" + e.getErrCode());
            System.out.println("ErrMsg:" + e.getErrMsg());
            System.out.println("RequestId:" + e.getRequestId());
            throw new RuntimeException();
        }
    }

    /**
     * CreateVpc    创建一个专有网络(VPC)
     */
    private static String CreateVpc(IAcsClient client) {
        CreateVpcRequest request = new CreateVpcRequest();
        // VPC的网段。您可以使用以下网段或其子集:
        // 10.0.0.0/8
        // 172.16.0.0/12(默认值)
        // 192.168.0.0/16
        request.setCidrBlock("192.168.0.0/16");
        // VPC的描述信息
        // 长度为2-256个字符,必须以字母或中文开头,但不能以http://或https://开头
        request.setDescription("DOCTest");
        // 资源组ID
        request.setResourceGroupId("rg-acfmxazb4ph6aiy");
        // VPC的名称
        // 长度为2-128个字符,必须以字母或中文开头,可包含数字,点号(.),下划线(_)和短横线(-),但不能以http:// 或https://开头
        request.setVpcName("DOCTestlalala");
        try {
            CreateVpcResponse response = client.getAcsResponse(request);
            System.out.println("--------------------VPC创建成功--------------------");
            System.out.println(new Gson().toJson(response));
            return response.getVpcId();
        } catch (ClientException e) {
            System.out.println("ErrCode:" + e.getErrCode());
            System.out.println("ErrMsg:" + e.getErrMsg());
            System.out.println("RequestId:" + e.getRequestId());
            throw new RuntimeException();
        }
    }
    /**
     * 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);
    }
}                

执行结果

正确的返回结果类似如下:
--------------------VPC创建成功--------------------
{
    "requestId": "ED0661D9-2433-4A47-9B9B-A51C63DE87A8", 
    "vpcId": "vpc-uf6o7****", 
    "vRouterId": "vrt-uf6wgeki****", 
    "routeTableId": "vtb-uf6grhi****", 
    "resourceGroupId": "rg-acfmxa****"
}
--------------------交换机创建成功--------------------
{
    "RequestId":"0ED8D006-F706-4D23-88ED-E11ED28DCAC0",
    "VSwitchId":"vsw-25naue4****"
}
--------------------ECS实例创建成功--------------------
{
    "RequestId":"04F0F334-1335-436C-A1D7-6C044FE73368",
    "InstanceIdSets":{
        "InstanceIdSet":[
            "i-instanceid"
        ]
    }
}