文档

如何调用RunInstances创建多台ECS实例

更新时间:

本文介绍如何通过阿里云ECS Java SDK (V2.0 SDK)调用RunInstances创建一台或多台ECS实例。

准备工作

创建ECS实例前,您必须提前准备以下工作:

  • 调用DescribeRegions - 查询可以使用的阿里云地域,假设为cn-hangzhou

  • 调用DescribeImages - 查询可以使用的镜像资源,假设为aliyun_3_9_x64_20G_uefi_alibase_20231219.vhd

  • 调用DescribeInstanceTypes - 查询云服务器ECS提供的实例规格资源,假设为ecs.g7.large。详情请参见实例规格族

  • 调用DescribeSecurityGroups - 查询安全组的基本信息,假设为sg-bp17pzrru69okvgh****。安全组的网络类型将决定ECS实例的网络类型,例如,如果您选择的是一个专有网络VPC类型的安全组,则新建的ECS实例会自动加入安全组所属的专有网络VPC。

  • 调用VPC API DescribeVSwitches查询安全组所属专有网络VPC中的虚拟交换机ID,假设为vsw-bp1tunmso12kpu7vz****

  • 开通按量付费ECS资源时,您的阿里云账户余额(即现金余额)和代金券的总值不得小于100.00元人民币。

  • 准备阿里云账号以及对应的访问密钥(AccessKey)。

    使用Alibaba Cloud SDK for Java时需要设置阿里云账号的AccessKey信息。AccessKey的获取方式,请参见创建AccessKey

  • 已配置环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。具体操作,请参见配置环境变量

  • 在开发环境中安装ECS Java SDK 2.0。具体操作,请参见安装和使用ECS SDK

    您需要在Maven项目中添加以下依赖。

    <dependencies>
        <dependency>
          <groupId>com.aliyun</groupId>
          <artifactId>ecs20140526</artifactId>
          <version>5.1.8</version>
        </dependency>
        <dependency>
          <groupId>com.aliyun</groupId>
          <artifactId>tea-openapi</artifactId>
          <version>0.3.2</version>
        </dependency>
        <dependency>
          <groupId>com.aliyun</groupId>
          <artifactId>tea-console</artifactId>
          <version>0.0.1</version>
        </dependency>
        <dependency>
          <groupId>com.aliyun</groupId>
          <artifactId>tea-util</artifactId>
          <version>0.2.21</version>
        </dependency>
    </dependencies>

背景信息

本文调用RunInstances接口创建并自动启动多台ECS实例。详情请参见RunInstances

说明

调用RunInstances会创建ECS实例等计费资源,会产生实际费用。如果您只需测试示例代码,可以在代码中设置DryRun方法,只发送检查请求,不会创建实例。检查项包括是否填写了必需参数、请求格式、业务限制和ECS库存等。

代码示例

以下代码适用于公网带宽采用按流量计费、实例计费方式采用按量付费、网络类型采用专有网络VPC的新建ECS实例:

// This file is auto-generated, don't edit it. Thanks.
package com.aliyun.sample;

import com.aliyun.tea.*;

public class Sample {

    /**
     * <b>description</b> :
     * <p>使用AK&amp;SK初始化账号Client</p>
     * @return Client
     *
     * @throws Exception
     */
    public static com.aliyun.ecs20140526.Client createClient() throws Exception {
        // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.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"));
        // Endpoint 请参考 https://api.aliyun.com/product/Ecs
        config.endpoint = "ecs-cn-hangzhou.aliyuncs.com";
        return new com.aliyun.ecs20140526.Client(config);
    }

    public static void main(String[] args_) throws Exception {
        java.util.List<String> args = java.util.Arrays.asList(args_);
        com.aliyun.ecs20140526.Client client = Sample.createClient();
        com.aliyun.ecs20140526.models.RunInstancesRequest.RunInstancesRequestSystemDisk systemDisk = new com.aliyun.ecs20140526.models.RunInstancesRequest.RunInstancesRequestSystemDisk()
                .setSize("40")
                .setCategory("cloud_essd");
        com.aliyun.ecs20140526.models.RunInstancesRequest runInstancesRequest = new com.aliyun.ecs20140526.models.RunInstancesRequest()
                .setRegionId("cn-hangzhou")
                .setImageId("aliyun_3_9_x64_20G_uefi_alibase_20231219.vhd")
                .setInstanceType("ecs.g7.large")
                .setSecurityGroupId("sg-bp17pzrru69okvgh****")
                .setVSwitchId("vsw-bp1tunmso12kpu7vz****")
                .setInstanceName("s****")
                .setInstanceChargeType("PostPaid")
                .setSystemDisk(systemDisk)
                .setHostName("root")
                .setPassword("****999!!@@##")
                .setAmount(3);
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        try {
            // 复制代码运行请自行打印 API 的返回值
            client.runInstancesWithOptions(runInstancesRequest, runtime);
        } catch (TeaException error) {
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }
    }
}

执行结果

实际返回结果为:

{
  "RequestId": "7F53B06E-3C1B-5C34-A97D-0CC78C609265",
  "InstanceIdSets": {
    "InstanceIdSet": [
      "i-bp1aalc7vopzddjt****",
      "i-bp1aalc7vopzddjt****",
      "i-bp1aalc7vopzddjt****"
    ]
  }
}