本教程详细介绍如何使用Alibaba Cloud SDK for Java修改预付费实例的带宽配置,返回ECS实例的详细信息。

前提条件

在使用本教程之前,请确保已完成以下操作:

  • 使用ECS管理控制台或通过API获取您需要的ECS实例ID,API接口请参见DescribeInstances
  • 使用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>
    </dependencies>

代码示例

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.ecs.model.v20140526.DescribeInstancesRequest;
import com.aliyuncs.ecs.model.v20140526.DescribeInstancesResponse;
import com.aliyuncs.ecs.model.v20140526.ModifyInstanceNetworkSpecRequest;
import com.aliyuncs.ecs.model.v20140526.ModifyInstanceNetworkSpecResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.google.gson.Gson;
import com.google.gson.JsonArray;

/**
 * ModifyInstanceNetworkSpec    修改实例的带宽配置
 * DescribeInstances    查询一台或多台实例的详细信息
 */
public class TestModifyInstanceNetworkSpec {

    // ECS实例ID(请自行配置)
    private static String instanceId = "i-bp1332juxxxxxxx";

    public static void main(String[] args) {
        IAcsClient client = Initialization();
        // 修改实例的带宽配置
        ModifyInstanceNetworkSpec(client, instanceId);
        // 查询一台或多台实例的详细信息
        DescribeInstances(client, instanceId);
    }

    private static void DescribeInstances(IAcsClient client, String instanceId) {
        DescribeInstancesRequest request = new DescribeInstancesRequest();
        JsonArray elements = new JsonArray();
        elements.add(instanceId);
        request.setInstanceIds(elements.toString());
        try {
            DescribeInstancesResponse response = client.getAcsResponse(request);
            System.out.println("--------------------实例的详细信息--------------------");
            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());
        }
    }

    private static void ModifyInstanceNetworkSpec(IAcsClient client, String instanceId) {
        ModifyInstanceNetworkSpecRequest request = new ModifyInstanceNetworkSpecRequest();
        // 需要修改网络配置的实例ID。
        request.setInstanceId(instanceId);
        // 公网入带宽最大值,单位:Mbps(Megabit per second)。取值范围:1~200
        request.setInternetMaxBandwidthIn(50);
        // 公网出带宽最大值,单位:Mbps(Megabit per second)。取值范围:0~100
        request.setInternetMaxBandwidthOut(50);
        // 转换网络计费方式。取值范围:
        // PayByTraffic:按使用流量计费
        // PayByBandwidth:按固定带宽计费
        request.setNetworkChargeType("PayByTraffic");
        // 临时带宽升级开始时间。按照ISO8601标准表示,并使用UTC +0时间,格式为yyyy-MM-ddThh:mmZ。精确到分钟(mm)。
        request.setStartTime("2019-09-16T16:00Z");
        // 临时带宽升级结束时间。按照ISO8601标准表示,并使用UTC +0时间,格式为yyyy-MM-ddThhZ。精确到小时(hh)。
        request.setEndTime("2019-09-17T16:00Z");
        // 是否分配公网 IP 地址。默认值:false
        request.setAllocatePublicIp(false);
        // 是否自动支付。取值范围:
        // true:变更带宽配置后,自动扣费。当您将参数Autopay置为true时,您需要确保账户余额充足,如果账户余额不足会生成异常订单,此订单暂时不支持通过ECS控制台支付,只能作废。
        // false:变更带宽配置后,只生成订单不扣费。如果您的支付方式余额不足,可以将参数Autopay置为false,即取消自动支付,此时调用该接口会生成正常的未支付订单,此订单可登录ECS管理控制台支付。
        // 默认值:true
        request.setAutoPay(true);
        try {
            ModifyInstanceNetworkSpecResponse response = client.getAcsResponse(request);
            System.out.println("--------------------实例的带宽配置修改成功--------------------");
            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());
        }
    }


    /**
     * 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);
    }
}
            

执行结果

正确的返回结果类似如下:
--------------------实例的带宽配置修改成功--------------------
{"requestId":"3E5B95DA-F3FC-472B-B1BB-7F923AF937E7","orderId":"2044823XXXXXX"}
--------------------实例的详细信息--------------------
{
    "requestId": "88289E05-3B7F-4A5E-8734-21F9531CCAE0", 
    "totalCount": 1, 
    "pageNumber": 1, 
    "pageSize": 10, 
    "instances": [
        {
            "instanceId": "i-bp1332junxxxx", 
            "instanceName": "launch-advisor-201xxxx", 
            "description": "", 
            "imageId": "centos_7_05_64_20G_alibase_20181210.vhd", 
            "oSName": "CentOS  7.5 64位", 
            "oSType": "linux", 
            "regionId": "cn-hangzhou", 
            "zoneId": "cn-hangzhou-i", 
            "clusterId": "", 
            "instanceType": "ecs.gn6v-c8g1.2xlarge", 
            "cpu": 8, 
            "memory": 32768, 
            "hostName": "iZbp1332junn5uiqg7ekr3Z", 
            "status": "Running", 
            "serialNumber": "955be26e-9761-4fde-8b01-337xxxxx", 
            "internetChargeType": "PayByTraffic", 
            "internetMaxBandwidthIn": 2500, 
            "internetMaxBandwidthOut": 50, 
            "vlanId": "", 
            "creationTime": "2019-09-16T07:23Z", 
            "startTime": "2019-09-16T07:23Z", 
            "instanceNetworkType": "vpc", 
            "instanceChargeType": "PrePaid", 
            "saleCycle": "", 
            "expiredTime": "2019-09-23T16:00Z", 
            "autoReleaseTime": "", 
            "ioOptimized": true, 
            "deviceAvailable": true, 
            "instanceTypeFamily": "ecs.gn6v", 
            "gPUAmount": 1, 
            "gPUSpec": "NVIDIA V100", 
            "spotStrategy": "NoSpot", 
            "spotPriceLimit": 0, 
            "resourceGroupId": "", 
            "recyclable": false, 
            "stoppedMode": "Not-applicable", 
            "creditSpecification": "", 
            "networkInterfaces": [...], 
            "operationLocks": [...], 
            "tags": [...], 
            "securityGroupIds": [...], 
            "publicIpAddress": [...], 
            "innerIpAddress": [...], 
            "rdmaIpAddress": [...], 
            "vpcAttributes": {...}, 
            "eipAddress": {...}, 
            "dedicatedHostAttribute": {...}
        }
    ]
}