以弹性伸缩Java SDK查询伸缩组内ECS实例列表的方法DescribeScalingInstances为例,介绍编写弹性伸缩Java SDK的通用流程。

前提条件

  • 已创建了AccessKey。具体操作,请参见创建AccessKey
    重要
    • 为避免主账号泄露AccessKey带来的安全风险,强烈建议您创建RAM用户,授予RAM用户相关访问权限,再使用RAM用户的AccessKey调用SDK。具体操作,请参见通过RAM用户控制资源访问
    • RAM用户的AccessKey Secret只能在创建AccessKey时显示,创建完成后不支持查看。请在创建好AccessKey后,及时并妥善保存AccessKey Secret。
  • 已安装弹性伸缩的Java SDK及阿里云核心库,具体操作,请参见步骤一:安装弹性伸缩的Java SDK

背景信息

  • 阿里云开发者中心为您提供了弹性伸缩Java SDK以及阿里云核心库的Maven项目依赖,您可以编写代码调用阿里云SDK来实现对阿里云的产品和服务的访问。
  • 本文通过配置环境变量(ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET)的方式配置Alibaba Cloud Credentials工具的身份验证,实现以非AK硬编码的方式访问阿里云OpenAPI。更多信息,请参见配置环境变量方案
  • 本文示例目的是查询伸缩组内ECS实例的列表,关于伸缩组的更多信息,请参见伸缩组概述
  • 旧版SDK和新版SDK的方法、类以及对象之间存在一定的区别。若您使用的是旧版SDK,建议您切换为新版SDK,获取最新功能。
    说明 升级版SDK和原版SDK区别的更多信息,请参见升级版SDK与原版SDK的区别
  • 更多代码示例请参见阿里云代码示例库(CodeSample)

步骤一:安装弹性伸缩的Java SDK

本步骤中客户端以Windows 10 64位操作系统为例,使用的Java开发工具以IntelliJ IDEA为例。

  1. 通过以下任一方式在IDEA中配置Maven项目管理工具。
    • 方式一:使用IDEA中集成的Maven项目管理工具。
    • 方式二:访问Maven官方下载页面(Download Apache Maven)下载对应操作系统的Maven工具,手动配置Maven工具。
  2. 访问阿里云开发工具包(SDK),获取阿里云的SDK核心库弹性伸缩的Maven项目依赖。
  3. 通过以下任一方式创建Maven项目。
    • 方式一:在IDEA中添加一个Maven项目。maven1
    • 方式二:将已有的项目转换为Maven项目。
      1. 右键单击要转换的项目,并选择Add Framework Support...maven2
      2. 选择Maven,并单击OKmaven3
  4. 在项目目录下的pom.xml文件中,添加以下依赖。
    添加依赖后,Maven项目管理工具会自动下载相关jar包。
    说明 SDK包更新频繁,建议您通过阿里云开发工具包(SDK)官网获取最新版本依赖。
    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>tea-openapi</artifactId>
      <version>0.2.8</version>
    </dependency>
     <dependency>
          <groupId>com.aliyun</groupId>
          <artifactId>ess20220222</artifactId>
          <version>1.0.5</version>
        </dependency>
        <dependency>
          <groupId>com.aliyun</groupId>
          <artifactId>credentials-java</artifactId>
          <version>0.2.11</version>
        </dependency>

步骤二:编写Java SDK的通用流程

本步骤以弹性伸缩Java SDK查询伸缩组内ECS实例列表的方法DescribeScalingInstances为例,介绍编写弹性伸缩Java SDK的通用操作流程。

  1. 通过Credentials工具从环境变量中获取AccessKey信息。
    代码如下所示:
    com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client();
    com.aliyun.teaopenapi.models.Config config = new Config();
    config.setCredential(credentialClient);
    config.setEndpoint("ess.aliyuncs.com");
  2. 生成Client的对象client
    代码如下所示:
    com.aliyun.ess20220222.Client client = new com.aliyun.ess20220222.Client(config);
  3. 创建一个对应方法的Request,使用构造函数生成一个默认的请求类request

    类的命名规则为API方法名加上Request。例如,查询伸缩组内ECS实例列表的API方法名为DescribeScalingInstances,则对应的请求类的名称为DescribeScalingInstancesRequest

    DescribeScalingInstancesRequest request = new DescribeScalingInstancesRequest();
  4. 设置请求类request的参数。
    通过request类的setXxx方法设置必要的信息,即API中必须要设置的参数信息,通过setXxx方法设置参数。示例中:
    • DescribeScalingInstances的API方法RegionId用来指定地域。
    • DescribeScalingInstances的API方法InstanceId用来设置待查询的伸缩组内ECS实例ID。设置setInstanceId的值为i-bp15itgtxemxy7v9****,表示查询的伸缩组内ECS实例ID为i-bp15itgtxemxy7v9****
    request.setInstanceId("i-bp15itgtxemxy7v9****");
  5. 通过client对象获得对应request响应。
    代码如下所示:
    com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
    DescribeScalingInstancesResponse response = client.describeScalingInstancesWithOptions(request,runtime);

执行结果

  • 全部返回信息如下所示:
    {
        "TotalCount": 2,
        "RequestId": "5E65F238-4B45-54B6-BE15-A34956FA0D96",
        "PageSize": 10,
        "PageNumber": 1,
        "ScalingInstances": {
            "ScalingInstance": [
                {
                    "LoadBalancerWeight": 50,
                    "CreatedTime": "2022-04-27T03:24:58Z",
                    "WarmupState": "NoNeedWarmup",
                    "ZoneId": "cn-hangzhou-i",
                    "InstanceId": "i-bp1h3dog530vvnqm****",
                    "ScalingActivityId": "asa-bp16rgo6477ojn3u****",
                    "ScalingGroupId": "asg-bp10uuhy2wbb2tip****",
                    "CreationTime": "2022-04-27T03:24Z",
                    "HealthStatus": "Healthy",
                    "LifecycleState": "Protected",
                    "Entrusted": false,
                    "CreationType": "Attached"
                },
                {
                    "LoadBalancerWeight": 50,
                    "CreatedTime": "2022-04-27T06:38:21Z",
                    "ZoneId": "cn-hangzhou-i",
                    "InstanceId": "i-bp15itgtxemxy7v9****",
                    "ScalingActivityId": "asa-bp1ejteup0bntltl****",
                    "ScalingGroupId": "asg-bp10uuhy2wbb2tip****",
                    "HealthStatus": "Healthy",
                    "LifecycleState": "Stopped",
                    "CreationType": "AutoCreated",
                    "WarmupState": "NoNeedWarmup",
                    "CreationTime": "2022-04-27T06:38Z",
                    "Entrusted": true,
                    "ScalingConfigurationId": "asc-bp1433dp4gktwkmi****"
                }
            ]
        },
        "TotalSpotCount": 0
    }
  • 获取具体返回参数的查询结果,例如InstanceIdScalingGroupId
    i-bp15itgtxemxy7v9****
    asg-bp10uuhy2wbb2tip****

代码示例

以下为本文示例的完整Java SDK代码。

import com.aliyun.ess20220222.models.DescribeScalingInstancesRequest;
import com.aliyun.ess20220222.models.DescribeScalingInstancesResponse;
import com.aliyun.teaopenapi.models.Config;
import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.List;

public class DescribeScalingInstances {
    public static void main(String[] args) throws Exception {
        com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client();
        com.aliyun.teaopenapi.models.Config config = new Config();
        config.setCredential(credentialClient);
        config.setEndpoint("ess.aliyuncs.com");
        com.aliyun.ess20220222.Client client = new com.aliyun.ess20220222.Client(config);
        DescribeScalingInstancesRequest request = new DescribeScalingInstancesRequest();
        request.setRegionId("cn-hangzhou");
        request.setScalingGroupId("asg-XXXXXXXX");
        request.setScalingConfigurationId("asc-XXXXXXXXX");
        request.setPageNumber(1);
        request.setPageSize(10);

        List<String> instanceIdList = new ArrayList<String>();
        instanceIdList.add("i-XXXXXX");
        request.setInstanceIds(instanceIdList);
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        DescribeScalingInstancesResponse response = client.describeScalingInstancesWithOptions(request,runtime);
        System.out.println(new Gson().toJson(response));
    }
}

相关文档

DescribeScalingInstances