全部產品
Search
文件中心

Elastic Compute Service:如何調用RunInstances建立多台ECS執行個體

更新時間:Jul 13, 2024

本文介紹如何通過阿里雲ECS Java SDK (V2.0 SDK)調用RunInstances建立一台或多台ECS執行個體。

準備工作

建立ECS執行個體前,您必須提前準備以下工作:

  • 調用DescribeRegions - 查詢可以使用的阿里雲地區,假設為cn-hangzhou

  • 調用DescribeImages - 查詢可以使用的鏡像資源,假設為aliyun_3_9_x64_20G_uefi_alibase_20231219.vhd

  • 調用DescribeInstanceTypes - 查詢Elastic Compute Service提供的執行個體規格資源,假設為ecs.g7.large。詳情請參見執行個體規格類型系列

  • 調用DescribeSecurityGroups - 查詢安全性群組的基本資料,假設為sg-bp17pzrru69okvgh****。安全性群組的網路類型將決定ECS執行個體的網路類型,例如,如果您選擇的是一個Virtual Private Cloud類型的安全性群組,則建立的ECS執行個體會自動加入安全性群組所屬的Virtual Private Cloud。

  • 調用VPC API DescribeVSwitches查詢安全性群組所屬Virtual Private Cloud中的虛擬交換器ID,假設為vsw-bp1tunmso12kpu7vz****

  • 準備阿里雲帳號以及對應的存取金鑰(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庫存等。

程式碼範例

以下代碼適用於公網頻寬採用按流量計費、執行個體計費方式採用隨用隨付、網路類型採用Virtual Private Cloud的建立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****"
    ]
  }
}