本教程详细介绍如何使用 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 --&gt;     <dependency&gt;         <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>

前提条件

本教程之前,请确保已完成以下操作:

  • 使用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>     <!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-vpc-->     <dependency>         <groupId>com.aliyun</groupId>         <artifactId>aliyun-java-sdk-vpc</artifactId>         <version>3.0.6</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);         Thread.sleep(5000);         // 创建一个交换机         String VSwitchId = CreateVSwitch(client, VPCId);         Thread.sleep(5000);         // 创建一台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"         ]     } }