创建ECS实例(包含创建VPC、交换机)
更新时间:2019-11-12 16:31:43
本教程详细介绍如何使用 Alibaba Cloud SDK for Java,从创建专有网络VPC开始到成功创建云服务器ECS实例。 在使用本教程之前,请确保已完成以下操作:
前提条件
<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>
前提条件
本教程之前,请确保已完成以下操作:
- 使用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"
]
}
}