通过SDK使用阿里云服务器ECS实例

2023-10-06 17:53:41 百科 悟空

  通过SDK使用阿里云服务器ECS实例。筋斗云介绍如果您是一位开发者,那就可以通过SDK的方式创建阿里云服务器的ECS实例。本文将为您推荐如何才能通过Java SDK创建阿里云服务器的ECS实例。

  SDK一般指软件开发工具包。软件开发工具包一般都是一些软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件时的开发工具的集合。

怎样准备Java SDK的环境

在使用Java SDK创建ECS实例前,您需要配置好Java SDK环境,并在Maven项目的pom.xml文件中,添加阿里云核心库aliyun-java-sdk-core、云服务器aliyun-java-sdk-ecs、专有网络aliyun-java-sdk-vpc和fastjson依赖。(阿里云开发者中心为您提供了ECS Java SDK以及阿里云核心库的Maven项目依赖及jar包,您可以编写代码调用阿里云SDK来实现对阿里云的产品和服务的访问。)

pom.xml文件中新增专有网络aliyun-java-sdk-vpc依赖,如下所示。

<dependencies><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.4.3</version></dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-ecs</artifactId><version>4.17.1</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.60</version></dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-vpc</artifactId><version>3.0.9</version></dependency></dependencies>

获取AccessKey信息

创建AccessKey访问密钥AccessKey(AK)相当于登录密码,只是使用场景不同。AccessKey用于程序方式调用云服务API,而登录密码用于登录控制台。如果您不需要调用API,那么就不需要创建AccessKey。

说明为避免主账号泄露AccessKey带来的安全风险,建议您创建RAM用户,授予RAM用户云服务器ECS相关的访问权限,再使用RAM用户的AccessKey调用SDK。访问控制RAM是阿里云提供的资源访问控制服务。创建ak创建ak2

创建ECS实例所需资源

在创建ECS实例前,您需要先创建专有网络VPC和安全组。
说明如果已经存在专有网络VPC和安全组,您也可以获取交换机ID和安全组ID后,直接购买ECS实例。
  1. 创建VPC。
    华东1(杭州)创建专有网络VPC,VPC网段为192.168.0.0/16。
    API参数示例取值
    CreateVpcRegionId地域:cn-hangzhou
    CidrBlockVPC网段: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) {DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou","", "");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****"}
  2. 创建交换机。
    在VPC中创建交换机,交换机网段为192.168.0.0/24。
    API参数示例取值
    CreateVSwitchZoneId可用区:cn-hangzhou-i
    VpcIdVPC 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) {DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "", "");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****"}
  3. 创建安全组。
    API参数示例取值
    CreateSecurityGroupRegionId地域:cn-hangzhou
    VpcIdVPC 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) {DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "", "");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****"}
  4. 在安全组中添加入方向放行规则。
    API参数示例取值
    AuthorizeSecurityGroupRegionId地域: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) {DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "", "");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实例

API参数示例取值
RunInstancesRegionId地域: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
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) {DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "", "");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实例。

  1. 查询实例公网IP地址。
    API参数示例取值
    DescribeInstancesRegionId地域:cn-hangzhou
    InstanceIds实例ID:使用购买ECS实例返回的结果。

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

    以下代码示例表示查询实例公网IP。

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

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

    公网IP
  2. 通过SSH登录ECS实例。
    ssh登录
  连接阿里云服务器的ECS实例
  此示例介绍通过Cloud Shell登录Linux实例。如果本地设备使用Windows操作系统,您可以使用Windows自带的远程桌面连接工具MSTSC连接Windows实例。
  查询实例公网IP地址。

API参数示例取值
DescribeInstancesRegionId地域:cn-hangzhou
InstanceIds实例ID:使用购买ECS实例返回的结果。

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

  1. 以下代码示例表示查询实例公网IP。

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

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

    公网IP
  2. 通过SSH登录ECS实例。
    ssh登录
  释放ECS实例
  包年包月实例到期后,您可以手动释放。如果一直未续费,实例也会自动释放。
  如果您想要提前释放包年包月实例,阿里云目前支持三种退订类型:五天无理由退订、非五天无理由退订、未生效续费订单退订。有一条一定要注意的限制是退款只退还实付金额,已使用的代金券不退还。

发表评论: