本文介紹如何通過阿里雲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&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****"
]
}
}