文档

通过SDK使用ECS实例

更新时间:

如果您是一位开发者,可以通过SDK的方式创建ECS实例。本文介绍如何通过Java SDK 2.0创建ECS实例。

准备工作

  • 安装ECS SDK和VPC SDK

    安装创建实例所需的ECS SDK和VPC SDK。本文通过添加Maven依赖的方式来安装。更多安装方式,请参见安装ECS Java SDK安装VPC Java SDK

    添加Maven依赖的示例如下:

        <dependencies>
            <dependency>
                <groupId>com.aliyun</groupId>
                <artifactId>ecs20140526</artifactId>
                <version>5.1.8</version>
            </dependency>
            <dependency>
                <groupId>com.aliyun</groupId>
                <artifactId>vpc20160428</artifactId>
                <version>7.8.8</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>1.2.11</version>
            </dependency>
        </dependencies>
  • 配置访问凭证。

    • 获取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实例

  1. 创建VPC。

    华东1(杭州)创建专有网络VPC,VPC网段为192.168.0.0/16。

    API

    参数

    示例取值

    CreateVpc

    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****"
    }
    
  2. 创建交换机。

    在VPC中创建交换机,交换机网段为192.168.0.0/24。

    API

    参数

    示例取值

    CreateVSwitch

    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****"
    }
  3. 创建安全组。

    API

    参数

    示例取值

    CreateSecurityGroup

    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****"
    }
  4. 在安全组中添加入方向放行规则。

    API

    参数

    示例取值

    AuthorizeSecurityGroup

    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

参数

示例取值

RunInstances

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秒。打开多个云命令行窗口时,所有窗口都会连接到同一台虚拟机。虚拟机数量不会因为您打开新的命令行窗口而增加。

  1. 查询实例公网IP地址。

    API

    参数

    示例取值

    DescribeInstances

    RegionId

    地域:cn-hangzhou

    InstanceIds

    实例ID:使用购买ECS实例返回的结果。

    示例:'["i-bp17f3kzgtzzj91r****"]'

    以下命令示例表示查询实例公网IP。

    aliyun ecs DescribeInstances \
    --RegionId cn-hangzhou \
    --InstanceIds '["i-bp17f3kzgtzzj91r****"]'

    在返回结果中找到以下公网IP信息。

    公网IP

  2. 通过SSH登录ECS实例。

    ssh登录

停止ECS实例

停止一台按量付费的ECS实例。

API

参数

示例取值

StopInstance

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

参数

示例取值

DeleteInstances

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****"
}