如果您是一位开发者,可以通过SDK的方式创建ECS实例。本文介绍如何通过Java SDK 2.0创建ECS实例。
准备工作
安装ECS SDK和VPC SDK
安装创建实例所需的ECS SDK和VPC SDK。本文通过添加Maven依赖的方式来安装。更多安装方式,请参见安装ECS Java SDK和安装VPC Java SDK。
配置访问凭证。
获取AccessKey信息。如果没有,请创建AccessKey。
重要为避免主账号泄露AccessKey带来的安全风险,建议您创建RAM用户,授予RAM用户云服务器ECS相关的访问权限,再使用RAM用户的AccessKey调用SDK。更多信息,请参见授权RAM用户使用ECS资源。
请确保代码运行环境设置了环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。具体配置方法,请参见在Linux、macOS和Windows系统配置环境变量。
创建ECS实例所需资源
在创建ECS实例前,您需要先创建专有网络VPC和安全组。
如果已经存在专有网络VPC和安全组,您也可以获取交换机ID和安全组ID后,直接购买ECS实例。具体操作,请参见购买ECS实例。
创建VPC。
在华东1(杭州)创建专有网络VPC,VPC网段为192.168.0.0/16。
API
参数
示例取值
RegionId
地域:cn-hangzhou
CidrBlock
VPC网段:192.168.0.0/16
以下代码示例表示创建VPC。
import com.aliyun.teaopenapi.models.Config; import com.aliyun.teautil.models.RuntimeOptions; import com.aliyun.vpc20160428.Client; import com.aliyun.vpc20160428.models.CreateVpcRequest; import com.aliyun.vpc20160428.models.CreateVpcResponse; import com.google.gson.Gson; public class CreateVpc { /** * 使用AK&SK初始化账号Client * 本示例通过从环境变量中读取AccessKey,来实现API访问的身份验证。请根据你的生产环境要求适当调整。 * 避免AK&SK等关键信息在代码中明文存储是云上安全红线! * @return Client * @throws Exception */ public static Client createClient() throws Exception { Config config = new Config() // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。 .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")) // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); config.endpoint = "vpc.cn-hangzhou.aliyuncs.com"; return new Client(config); } public static void main(String[] args) throws Exception { Client client = CreateVpc.createClient(); CreateVpcRequest createVpcRequest = new CreateVpcRequest() .setRegionId("cn-hangzhou") .setCidrBlock("192.168.0.0/16"); RuntimeOptions runtime = new RuntimeOptions(); try { CreateVpcResponse resp = client.createVpcWithOptions(createVpcRequest, runtime); System.out.println(new Gson().toJson(resp.getBody())); } catch (Exception error) { // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 // 错误 message System.out.println(error.getMessage()); } } }
返回结果如下所示。
{ "requestId": "C58D1B4D-E419-5DB3-BB04-6B1EAF7D****", "resourceGroupId": "rg-acfmzw2jz2z****", "routeTableId": "vtb-bp1u3bc01p5oo4iry****", "VRouterId": "vrt-bp1ul3501gkdsyivs****", "vpcId": "vpc-bp1aag0sb9s4i92i3****" }
创建交换机。
在VPC中创建交换机,交换机网段为192.168.0.0/24。
API
参数
示例取值
RegionId
地域:cn-hangzhou
ZoneId
可用区:cn-hangzhou-i
VpcId
VPC ID:使用步骤1返回的结果。
示例:vpc-bp1aag0sb9s4i92i3****
CidrBlock
交换机网段:192.168.0.0/24
以下代码示例表示创建交换机。
import com.aliyun.teaopenapi.models.Config; import com.aliyun.teautil.models.RuntimeOptions; import com.aliyun.vpc20160428.Client; import com.aliyun.vpc20160428.models.CreateVSwitchRequest; import com.aliyun.vpc20160428.models.CreateVSwitchResponse; import com.google.gson.Gson; public class CreateVSwitch { /** * 使用AK&SK初始化账号Client * 本示例通过从环境变量中读取AccessKey,来实现API访问的身份验证。请根据你的生产环境要求适当调整。 * 避免AK&SK等关键信息在代码中明文存储是云上安全红线! * @return Client * @throws Exception */ public static Client createClient() throws Exception { Config config = new Config() // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。 .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")) // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); config.endpoint = "vpc.cn-hangzhou.aliyuncs.com"; return new Client(config); } public static void main(String[] args) throws Exception { Client client = CreateVSwitch.createClient(); CreateVSwitchRequest createVSwitchRequest = new CreateVSwitchRequest() .setRegionId("cn-hangzhou") .setZoneId("cn-hangzhou-i") .setCidrBlock("192.168.0.0/24") .setVpcId("vpc-bp1aag0sb9s4i92i3****"); RuntimeOptions runtime = new RuntimeOptions(); try { CreateVSwitchResponse resp = client.createVSwitchWithOptions(createVSwitchRequest, runtime); System.out.println(new Gson().toJson(resp.getBody())); } catch (Exception error) { // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 // 错误 message System.out.println(error.getMessage()); } } }
返回结果如下所示。
{ "requestId": "4A48CC7D-A615-5C59-A846-53BA92CD****", "vSwitchId": "vsw-bp1nzprm8h7mmnl8t****" }
创建安全组。
API
参数
示例取值
RegionId
地域:cn-hangzhou
VpcId
VPC ID:使用步骤1返回的结果。
示例:vpc-bp1aag0sb9s4i92i3****
以下代码示例表示创建安全组。
import com.aliyun.ecs20140526.Client; import com.aliyun.ecs20140526.models.CreateSecurityGroupRequest; import com.aliyun.ecs20140526.models.CreateSecurityGroupResponse; import com.aliyun.teaopenapi.models.Config; import com.aliyun.teautil.models.RuntimeOptions; import com.google.gson.Gson; public class CreateSecurityGroup { /** * 使用AK&SK初始化账号Client * 本示例通过从环境变量中读取AccessKey,来实现API访问的身份验证。请根据你的生产环境要求适当调整。 * 避免AK&SK等关键信息在代码中明文存储是云上安全红线! * @return Client * @throws Exception */ public static Client createClient() throws Exception { Config config = new Config() // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。 .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")) // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); config.endpoint = "ecs-cn-hangzhou.aliyuncs.com"; return new Client(config); } public static void main(String[] args) throws Exception { Client client = CreateSecurityGroup.createClient(); CreateSecurityGroupRequest createSecurityGroupRequest = new CreateSecurityGroupRequest() .setRegionId("cn-hangzhou") .setVpcId("vpc-bp1aag0sb9s4i92i3****"); RuntimeOptions runtime = new RuntimeOptions(); try { CreateSecurityGroupResponse resp = client.createSecurityGroupWithOptions(createSecurityGroupRequest, runtime); System.out.println(new Gson().toJson(resp.getBody())); } catch (Exception error) { // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 // 错误 message System.out.println(error.getMessage()); } } }
返回结果如下所示。
{ "requestId": "15CE54BA-A181-5A8A-9895-DB13C035****", "securityGroupId": "sg-bp1esyhwfbqeyudt****" }
在安全组中添加入方向放行规则。
API
参数
示例取值
RegionId
地域:cn-hangzhou
SecurityGroupId
安全组ID:使用步骤3返回的结果。
示例:sg-bp1esyhwfbqeyudt****
IpProtocol
协议:tcp
SourceCidrIp
源CIDR:0.0.0.0/0
PortRange
端口范围:
Linux实例:22/22
Windows实例:3389/3389
以下代码示例表示添加安全组规则。
import com.aliyun.ecs20140526.Client; import com.aliyun.ecs20140526.models.AuthorizeSecurityGroupRequest; import com.aliyun.ecs20140526.models.AuthorizeSecurityGroupRequest.AuthorizeSecurityGroupRequestPermissions; import com.aliyun.ecs20140526.models.AuthorizeSecurityGroupResponse; import com.aliyun.teaopenapi.models.Config; import com.aliyun.teautil.models.RuntimeOptions; import com.google.gson.Gson; import static java.util.Arrays.asList; public class AuthorizeSecurityGroup { /** * 使用AK&SK初始化账号Client * 本示例通过从环境变量中读取AccessKey,来实现API访问的身份验证。请根据你的生产环境要求适当调整。 * 避免AK&SK等关键信息在代码中明文存储是云上安全红线! * @return Client * @throws Exception */ public static Client createClient() throws Exception { Config config = new Config() // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。 .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")) // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); config.endpoint = "ecs-cn-hangzhou.aliyuncs.com"; return new Client(config); } public static void main(String[] args) throws Exception { Client client = AuthorizeSecurityGroup.createClient(); AuthorizeSecurityGroupRequestPermissions permissions0 = new AuthorizeSecurityGroupRequestPermissions() .setIpProtocol("tcp") .setPortRange("22/22") .setSourceCidrIp("0.0.0.0/0"); AuthorizeSecurityGroupRequest authorizeSecurityGroupRequest = new AuthorizeSecurityGroupRequest() .setRegionId("cn-hangzhou") .setSecurityGroupId("sg-bp1esyhwfbqeyudt****") .setPermissions(asList( permissions0 )); RuntimeOptions runtime = new RuntimeOptions(); try { AuthorizeSecurityGroupResponse authoSGresponse = client.authorizeSecurityGroupWithOptions(authorizeSecurityGroupRequest, runtime); System.out.println(new Gson().toJson(authoSGresponse.getBody())); } catch (Exception error) { // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 // 错误 message System.out.println(error.getMessage()); } } }
返回结果如下所示。
{ "requestId": "437D588F-EEB4-59C9-9133-B7021000****" }
购买ECS实例
购买一台按量付费的ECS实例。
API | 参数 | 示例取值 |
RegionId | 地域:cn-hangzhou | |
ImageId | 镜像:推荐使用Alibaba Cloud Linux镜像aliyun_3_x64_20G_scc_alibase_20220225.vhd。 | |
InstanceType | 实例规格: ecs.g7.large。 | |
SecurityGroupId | 安全组ID:使用步骤3返回的结果。 示例:sg-bp1esyhwfbqeyudt**** | |
VSwitchId | 交换机ID:使用步骤2返回的结果。 示例:vsw-bp1nzprm8h7mmnl8t**** | |
InstanceName | 实例名称。 示例:ecs_sdk_demo | |
InstanceChargeType | 付费方式:实例按照按量付费的方式PostPaid 说明 您需要确保账号余额能够完成支付。 | |
InternetMaxBandwidthOut | 公网IP带宽:1 Mbps | |
Password | 实例登录密码:<yourPassword> 说明 您需要自定义复杂密码以保护ECS实例的安全。 | |
SystemDisk.Category | 系统盘的云盘种类:cloud_essd |
以下代码示例表示创建按量付费的ECS实例。
import com.aliyun.ecs20140526.Client;
import com.aliyun.ecs20140526.models.RunInstancesRequest;
import com.aliyun.ecs20140526.models.RunInstancesRequest.RunInstancesRequestSystemDisk;
import com.aliyun.ecs20140526.models.RunInstancesResponse;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.models.RuntimeOptions;
import com.google.gson.Gson;
public class RunInstances {
/**
* 使用AK&SK初始化账号Client
* 本示例通过从环境变量中读取AccessKey,来实现API访问的身份验证。请根据你的生产环境要求适当调整。
* 避免AK&SK等关键信息在代码中明文存储是云上安全红线!
* @return Client
* @throws Exception
*/
public static Client createClient() throws Exception {
Config config = new Config()
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
config.endpoint = "ecs-cn-hangzhou.aliyuncs.com";
return new Client(config);
}
public static void main(String[] args) throws Exception {
Client client = RunInstances.createClient();
RunInstancesRequestSystemDisk systemDisk = new RunInstancesRequestSystemDisk().setCategory("cloud_essd");
RunInstancesRequest runInstancesRequest = new RunInstancesRequest()
.setRegionId("cn-hangzhou")
.setInstanceType("ecs.g7.large")
.setImageId("aliyun_3_x64_20G_scc_alibase_20220225.vhd")
.setSecurityGroupId("sg-bp1esyhwfbqeyudt****")
.setInstanceName("ecs_sdk_demo")
.setVSwitchId("vsw-bp1nzprm8h7mmnl8t****")
.setInstanceChargeType("PostPaid")
.setInternetMaxBandwidthOut(1)
.setSystemDisk(systemDisk)
.setPassword("<yourPassword>");
RuntimeOptions runtime = new RuntimeOptions();
try {
RunInstancesResponse resp = client.runInstancesWithOptions(runInstancesRequest, runtime);
System.out.println(new Gson().toJson(resp.getBody()));
} catch (Exception error) {
// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
// 错误 message
System.out.println(error.getMessage());
}
}
}
返回结果如下所示。
{
"instanceIdSets": {
"instanceIdSet": [
"i-bp17f3kzgtzzj91r****"
]
},
"requestId": "14CFCA1B-5A0C-59BA-B4C5-9D8B4B00****"
}
连接ECS实例
此示例介绍通过Cloud Shell登录Linux实例,在浏览器中输入https://shell.aliyun.com打开云命令行操作界面。如果您安装的是Windows实例,登录方式请参见通过密码认证登录Windows实例。
第一次连接云命令行时会为您创建虚拟机,会消耗一些时间,最长不超过40秒。打开多个云命令行窗口时,所有窗口都会连接到同一台虚拟机。虚拟机数量不会因为您打开新的命令行窗口而增加。
查询实例公网IP地址。
API
参数
示例取值
RegionId
地域:cn-hangzhou
InstanceIds
实例ID:使用购买ECS实例返回的结果。
示例:'["i-bp17f3kzgtzzj91r****"]'
以下命令示例表示查询实例公网IP。
aliyun ecs DescribeInstances \ --RegionId cn-hangzhou \ --InstanceIds '["i-bp17f3kzgtzzj91r****"]'
在返回结果中找到以下公网IP信息。
通过SSH登录ECS实例。
停止ECS实例
停止一台按量付费的ECS实例。
API | 参数 | 示例取值 |
InstanceId | 实例ID:i-bp17f3kzgtzzj91r**** |
以下代码示例表示停止按量付费的ECS实例。
import com.aliyun.ecs20140526.Client;
import com.aliyun.ecs20140526.models.StopInstanceRequest;
import com.aliyun.ecs20140526.models.StopInstanceResponse;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.models.RuntimeOptions;
import com.google.gson.Gson;
public class StopInstance {
/**
* 使用AK&SK初始化账号Client
* 本示例通过从环境变量中读取AccessKey,来实现API访问的身份验证。请根据你的生产环境要求适当调整。
* 避免AK&SK等关键信息在代码中明文存储是云上安全红线!
* @return Client
* @throws Exception
*/
public static Client createClient() throws Exception {
Config config = new Config()
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
config.endpoint = "ecs-cn-hangzhou.aliyuncs.com";
return new Client(config);
}
public static void main(String[] args) throws Exception {
Client client = StopInstance.createClient();
StopInstanceRequest stopInstanceRequest = new StopInstanceRequest().setInstanceId("i-bp17f3kzgtzzj91r****");
RuntimeOptions runtime = new RuntimeOptions();
try {
StopInstanceResponse resp = client.stopInstanceWithOptions(stopInstanceRequest, runtime);
System.out.println(new Gson().toJson(resp.getBody()));
}catch (Exception error) {
// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
// 错误 message
System.out.println(error.getMessage());
}
}
}
返回结果如下所示。
{
"requestId": "41CDB15C-5ADC-50BB-B6F8-0D824162****"
}
释放ECS实例
释放一台按量付费的ECS实例。
API | 参数 | 示例取值 |
InstanceId | 实例 ID:i-bp17f3kzgtzzj91r**** |
以下代码示例表示释放按量付费的ECS实例。
import com.aliyun.ecs20140526.Client;
import com.aliyun.ecs20140526.models.DeleteInstanceRequest;
import com.aliyun.ecs20140526.models.DeleteInstanceResponse;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.models.RuntimeOptions;
import com.google.gson.Gson;
public class DeleteInstance {
/**
* 使用AK&SK初始化账号Client
* 本示例通过从环境变量中读取AccessKey,来实现API访问的身份验证。请根据你的生产环境要求适当调整。
* 避免AK&SK等关键信息在代码中明文存储是云上安全红线!
* @return Client
* @throws Exception
*/
public static Client createClient() throws Exception {
Config config = new Config()
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
config.endpoint = "ecs-cn-hangzhou.aliyuncs.com";
return new Client(config);
}
public static void main(String[] args) throws Exception {
Client client = DeleteInstance.createClient();
DeleteInstanceRequest deleteInstanceRequest = new DeleteInstanceRequest().setInstanceId("i-bp17f3kzgtzzj91r****");
RuntimeOptions runtime = new RuntimeOptions();
try {
DeleteInstanceResponse resp = client.deleteInstanceWithOptions(deleteInstanceRequest, runtime);
System.out.println(new Gson().toJson(resp.getBody()));
} catch (Exception error) {
// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
// 错误 message
System.out.println(error.getMessage());
}
}
}
返回结果如下所示。
{
"requestId": "557E2DE0-64F8-53C6-B3AB-7080B950****"
}