阿里云通过SDK使用ECS实例

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

准备Java SDK环境

在使用Java SDK创建ECS实例前,您需要配置好Java SDK环境,并在Maven项目的pom.xml文件中,添加阿里云核心库aliyun-java-sdk-core、云服务器aliyun-java-sdk-ecs、专有网络aliyun-java-sdk-vpc和fastjson依赖。详情请参见安装Java SDK。在pom.xml文件中新增专有网络aliyun-java-sdk-vpc依赖,如下所示。

com.aliyun
aliyun-java-sdk-core
4.4.3

com.aliyun
aliyun-java-sdk-ecs
4.17.1

com.alibaba
fastjson
1.2.83

com.aliyun
aliyun-java-sdk-vpc
3.0.9

获取AccessKey信息

创建AccessKey操作,请参见创建AccessKey。说明 为避免主账号泄露AccessKey带来的安全风险,建议您创建RAM用户,授予RAM用户云服务器ECS相关的访问权限,再使用RAM用户的AccessKey调用SDK。更多信息,请参见通过RAM用户控制资源访问。

创建ECS实例所需资源

在创建ECS实例前,您需要先创建专有网络VPC和安全组。 说明 如果已经存在专有网络VPC和安全组,您也可以获取交换机ID和安全组ID后,直接购买ECS实例。具体操作,请参见购买ECS实例。

  • 创建VPC。在华东1(杭州)创建专有网络VPC,VPC网段为192.168.0.0/16。
    API 参数 示例取值
    CreateVpc RegionId 地域:cn-hangzhou
    CidrBlock VPC网段:192.168.0.0/16

    以下代码示例表示创建VPC。import com.aliyuncs.DefaultAcsClient;
    import com.aliyuncs.IAcsClient;
    import com.aliyuncs.exceptions.ClientException;
    import com.aliyuncs.exceptions.ServerException;
    import com.aliyuncs.profile.DefaultProfile;
    import com.google.gson.Gson;
    import com.aliyuncs.vpc.model.v20160428.*;

    public class CreateVpc {

    public static void main(String[] args) {
    // 请确保代码运行环境设置了环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
    // 工程代码泄露可能会导致AccessKey泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取AccessKey的方式进行调用,建议使用更安全的STS方式。
    DefaultProfile profile = DefaultProfile.getProfile(“cn-hangzhou”, System.getenv(“ALIBABA_CLOUD_ACCESS_KEY_ID”), System.getenv(“ALIBABA_CLOUD_ACCESS_KEY_SECRET”));
    IAcsClient client = new DefaultAcsClient(profile);

    CreateVpcRequest request = new CreateVpcRequest();
    request.setRegionId(“cn-hangzhou”);
    request.setCidrBlock(“192.168.0.0/16”);

    try {
    CreateVpcResponse response = client.getAcsResponse(request);
    System.out.println(new Gson().toJson(response));
    } catch (ServerException e) {
    e.printStackTrace();
    } catch (ClientException e) {
    System.out.println(“ErrCode:” + e.getErrCode());
    System.out.println(“ErrMsg:” + e.getErrMsg());
    System.out.println(“RequestId:” + e.getRequestId());
    }

    }
    }返回结果如下所示。{
    “requestId”:”5BE6AEA4-347F-46A9-9808-B429EF02****”,
    “vpcId”:”vpc-bp1h99qfh290thxml****”,
    “vRouterId”:”vrt-bp1cbum5ozelljyet****”,
    “routeTableId”:”vtb-bp1qm6p3yoww2cv10****”,
    “resourceGroupId”:”rg-acfmzw2jz2z****”
    }

  • 创建交换机。在VPC中创建交换机,交换机网段为192.168.0.0/24。
    API 参数 示例取值
    CreateVSwitch ZoneId 可用区:cn-hangzhou-i
    VpcId VPC ID:使用步骤1返回的结果。 示例:vpc-bp1h99qfh290thxml****
    CidrBlock 交换机网段:192.168.0.0/24

    以下代码示例表示创建交换机。import com.aliyuncs.DefaultAcsClient;
    import com.aliyuncs.IAcsClient;
    import com.aliyuncs.exceptions.ClientException;
    import com.aliyuncs.exceptions.ServerException;
    import com.aliyuncs.profile.DefaultProfile;
    import com.google.gson.Gson;
    import java.util.*;
    import com.aliyuncs.vpc.model.v20160428.*;

    public class CreateVSwitch {

    public static void main(String[] args) {
    // 请确保代码运行环境设置了环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
    // 工程代码泄露可能会导致AccessKey泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取AccessKey的方式进行调用,建议使用更安全的STS方式。
    DefaultProfile profile = DefaultProfile.getProfile(“cn-hangzhou”, System.getenv(“ALIBABA_CLOUD_ACCESS_KEY_ID”), System.getenv(“ALIBABA_CLOUD_ACCESS_KEY_SECRET”));
    IAcsClient client = new DefaultAcsClient(profile);

    CreateVSwitchRequest request = new CreateVSwitchRequest();
    request.setRegionId(“cn-hangzhou”);
    request.setCidrBlock(“192.168.0.0/24”);
    request.setVpcId(“vpc-bp1h99qfh290thxml****”);
    request.setZoneId(“cn-hangzhou-i”);

    try {
    CreateVSwitchResponse response = client.getAcsResponse(request);
    System.out.println(new Gson().toJson(response));
    } catch (ServerException e) {
    e.printStackTrace();
    } catch (ClientException e) {
    System.out.println(“ErrCode:” + e.getErrCode());
    System.out.println(“ErrMsg:” + e.getErrMsg());
    System.out.println(“RequestId:” + e.getRequestId());
    }

    }
    }返回结果如下所示。{
    “requestId”: “BAFBC8C4-3C65-427B-B470-3D257288****”,
    “vSwitchId”: “vsw-bp1mihse903i05oxn****”
    }

  • 创建安全组。
    API 参数 示例取值
    CreateSecurityGroup RegionId 地域:cn-hangzhou
    VpcId VPC ID:使用步骤1返回的结果。 示例:vpc-bp1h99qfh290thxml****

    以下代码示例表示创建安全组。import com.aliyuncs.DefaultAcsClient;
    import com.aliyuncs.IAcsClient;
    import com.aliyuncs.exceptions.ClientException;
    import com.aliyuncs.exceptions.ServerException;
    import com.aliyuncs.profile.DefaultProfile;
    import com.google.gson.Gson;
    import java.util.*;
    import com.aliyuncs.ecs.model.v20140526.*;

    public class CreateSecurityGroup {

    public static void main(String[] args) {
    // 请确保代码运行环境设置了环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
    // 工程代码泄露可能会导致AccessKey泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取AccessKey的方式进行调用,建议使用更安全的STS方式。
    DefaultProfile profile = DefaultProfile.getProfile(“cn-hangzhou”, System.getenv(“ALIBABA_CLOUD_ACCESS_KEY_ID”), System.getenv(“ALIBABA_CLOUD_ACCESS_KEY_SECRET”));
    IAcsClient client = new DefaultAcsClient(profile);

    CreateSecurityGroupRequest request = new CreateSecurityGroupRequest();
    request.setRegionId(“cn-hangzhou”);
    request.setVpcId(“vpc-bp1h99qfh290thxml****”);

    try {
    CreateSecurityGroupResponse response = client.getAcsResponse(request);
    System.out.println(new Gson().toJson(response));
    } catch (ServerException e) {
    e.printStackTrace();
    } catch (ClientException e) {
    System.out.println(“ErrCode:” + e.getErrCode());
    System.out.println(“ErrMsg:” + e.getErrMsg());
    System.out.println(“RequestId:” + e.getRequestId());
    }

    }
    }返回结果如下所示。{
    “requestId”: “718D29C6-6183-4196-AD76-A53F6A6E****”,
    “securityGroupId”: “sg-bp1dve08xy2c8y9g****”
    }

  • 在安全组中添加入方向放行规则。
    API 参数 示例取值
    AuthorizeSecurityGroup RegionId 地域:cn-hangzhou
    SecurityGroupId 安全组ID:使用步骤3返回的结果。 示例:sg-bp1dve08xy2c8y9g****
    IpProtocol 协议:tcp
    SourceCidrIp 源CIDR:0.0.0.0/0
    PortRange 端口范围:

    • Linux实例:22/22
    • Windows实例:3389/3389

    以下代码示例表示添加安全组规则。 import com.aliyuncs.DefaultAcsClient;
    import com.aliyuncs.IAcsClient;
    import com.aliyuncs.exceptions.ClientException;
    import com.aliyuncs.exceptions.ServerException;
    import com.aliyuncs.profile.DefaultProfile;
    import com.google.gson.Gson;
    import java.util.*;
    import com.aliyuncs.ecs.model.v20140526.*;

    public class AuthorizeSecurityGroup {

    public static void main(String[] args) {
    // 请确保代码运行环境设置了环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
    // 工程代码泄露可能会导致AccessKey泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取AccessKey的方式进行调用,建议使用更安全的STS方式。
    DefaultProfile profile = DefaultProfile.getProfile(“cn-hangzhou”, System.getenv(“ALIBABA_CLOUD_ACCESS_KEY_ID”), System.getenv(“ALIBABA_CLOUD_ACCESS_KEY_SECRET”));
    IAcsClient client = new DefaultAcsClient(profile);

    AuthorizeSecurityGroupRequest request = new AuthorizeSecurityGroupRequest();
    request.setRegionId(“cn-hangzhou”);
    request.setSecurityGroupId(“sg-bp1dve08xy2c8y9g****”);
    request.setIpProtocol(“tcp”);
    request.setPortRange(“22/22”);
    request.setSourceCidrIp(“0.0.0.0/0”);

    try {
    AuthorizeSecurityGroupResponse response = client.getAcsResponse(request);
    System.out.println(new Gson().toJson(response));
    } catch (ServerException e) {
    e.printStackTrace();
    } catch (ClientException e) {
    System.out.println(“ErrCode:” + e.getErrCode());
    System.out.println(“ErrMsg:” + e.getErrMsg());
    System.out.println(“RequestId:” + e.getRequestId());
    }

    }
    }返回结果如下所示。 {
    “requestId”: “7052E70F-4678-4400-81CF-E0133CCB****”
    }

  • 购买ECS实例

    购买一个包年包月的ECS实例。

    API 参数 示例取值
    RunInstances RegionId 地域:cn-hangzhou
    ImageId 镜像:推荐使用Alibaba Cloud Linux镜像aliyun_2_1903_x64_20G_alibase_20200324.vhd。
    InstanceType 实例规格:

    • 个人应用:推荐选择1核2G的实例规格ecs.s6-c1m2.small。
    • 中小企业应用:推荐选择2核4G的实例规格ecs.c5.large。
    SecurityGroupId 安全组ID:使用步骤3返回的结果。 示例:sg-bp1dve08xy2c8y9g****
    VSwitchId 交换机ID:使用步骤2返回的结果。 示例:vsw-bp1mihse903i05oxn****
    InstanceName 实例名称。 示例:ecs_sdk_demo
    InstanceChargeType 付费方式:实例按照包年包月的付费方式PrePaid。 说明 您需要确保账号余额能够完成支付。
    PeriodUnit 付费周期单位:Month
    Period 付费时长:1
    InternetMaxBandwidthOut 公网IP带宽:1 Mbps
    Password 实例登录密码:说明 您需要自定义复杂密码以保护ECS实例的安全。

    以下代码示例表示创建包年包月的ECS实例。import com.aliyuncs.DefaultAcsClient;
    import com.aliyuncs.IAcsClient;
    import com.aliyuncs.exceptions.ClientException;
    import com.aliyuncs.exceptions.ServerException;
    import com.aliyuncs.profile.DefaultProfile;
    import com.google.gson.Gson;
    import java.util.*;
    import com.aliyuncs.ecs.model.v20140526.*;

    public class RunInstances {

    public static void main(String[] args) {
    // 请确保代码运行环境设置了环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
    // 工程代码泄露可能会导致AccessKey泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取AccessKey的方式进行调用,建议使用更安全的STS方式。
    DefaultProfile profile = DefaultProfile.getProfile(“cn-hangzhou”, System.getenv(“ALIBABA_CLOUD_ACCESS_KEY_ID”), System.getenv(“ALIBABA_CLOUD_ACCESS_KEY_SECRET”));
    IAcsClient client = new DefaultAcsClient(profile);

    RunInstancesRequest request = new RunInstancesRequest();
    request.setRegionId(“cn-hangzhou”);
    request.setImageId(“aliyun_2_1903_x64_20G_alibase_20200324.vhd”);
    request.setInstanceType(“ecs.s6-c1m2.small”);
    request.setSecurityGroupId(“sg-bp1dve08xy2c8y9g****”);
    request.setVSwitchId(“vsw-bp1mihse903i05oxn****”);
    request.setInstanceName(“ecs_sdk_demo”);
    request.setInternetMaxBandwidthOut(1);
    request.setPassword(“”);
    request.setPeriod(1);
    request.setPeriodUnit(“Month”);
    request.setInstanceChargeType(“PrePaid”);

    try {
    RunInstancesResponse response = client.getAcsResponse(request);
    System.out.println(new Gson().toJson(response));
    } catch (ServerException e) {
    e.printStackTrace();
    } catch (ClientException e) {
    System.out.println(“ErrCode:” + e.getErrCode());
    System.out.println(“ErrMsg:” + e.getErrMsg());
    System.out.println(“RequestId:” + e.getRequestId());
    }

    }
    }返回结果如下所示。{
    “requestId”: “9582F9F2-349C-438E-A6A2-3E7B6B56****”,
    “tradePrice”: ****,
    “instanceIdSets”: [“i-bp1hcv43i3glqxbv****”]
    }

    连接ECS实例

    此示例介绍通过Cloud Shell登录Linux实例。如果您安装的是Windows实例,登录方式请参见通过密码认证登录Windows实例。

  • 查询实例公网IP地址。
    API 参数 示例取值
    DescribeInstances RegionId 地域:cn-hangzhou
    InstanceIds 实例ID:使用购买ECS实例返回的结果。 示例:'[“i-bp1hcv43i3glqxbv****”]’

    以下命令示例表示查询实例公网IP。aliyun ecs DescribeInstances \
    –RegionId cn-hangzhou \
    –InstanceIds ‘[“i-bp1hcv43i3glqxbv****”]’在返回结果中找到以下公网IP信息。公网IP

  • 通过SSH登录ECS实例。ssh登录
  • 释放ECS实例

    包年包月实例到期后,您可以手动释放。如果一直未续费,实例也会自动释放。如果您想要提前释放包年包月实例,请参见退款规则及退款流程。

    发表评论