多数の従量課金 Elastic Compute Service (ECS) インスタンスを効率的に作成するには、CreateAutoProvisioningGroup API 操作を呼び出します。このトピックでは、Java コードを使用してこの API 操作を呼び出し、インスタンスをバッチ作成する方法について説明します。このトピックでは、RunInstances API 操作と CreateAutoProvisioningGroup API 操作の特徴、利点、欠点も比較します。
背景情報
従量課金 ECS インスタンスを必要とするシナリオでは、RunInstances API 操作が最も頻繁に使用されます。RunInstances 操作を 1 回呼び出すと、最大 100 個の ECS インスタンスを作成できます。ただし、本番環境で RunInstances を使用して一度に 100 個を超えるインスタンスを作成すると、技術的なボトルネックが発生する可能性があります。詳細については、「RunInstances を使用したインスタンス作成時の問題」をご参照ください。
RunInstances 操作を使用してインスタンスをバッチ作成する際の技術的なボトルネックに精通している場合は、「RunInstances を使用したインスタンス作成時の問題」セクションをスキップできます。
多数の ECS インスタンスを作成する需要を満たすために、Alibaba Cloud は自動プロビジョニンググループを提供しています。CreateAutoProvisioningGroup API 操作を呼び出して、自動プロビジョニンググループを作成できます。これにより、単一の操作で、複数の課金方法、ゾーン、インスタンスタイプにまたがるインスタンスクラスターをデプロイできます。RunInstances と比較して、CreateAutoProvisioningGroup は多数の ECS インスタンスを作成する必要があるシナリオにより適しています。特徴の比較と利点の分析については、「RunInstances と CreateAutoProvisioningGroup の比較」および「自動プロビジョニンググループの利点」をご参照ください。
RunInstances と CreateAutoProvisioningGroup の比較
このセクションでは、RunInstances API 操作と CreateAutoProvisioningGroup API 操作のいくつかの特徴を比較します。この比較は、それらの違いをすばやく理解し、インスタンスを作成するための適切なメソッドを選択するのに役立ちます。
項目 | RunInstances | CreateAutoProvisioningGroup |
バッチ作成あたりの最大インスタンス数 | 100 | 1,000 (最大 10,000 vCPU) |
キャパシティ提供方法 | インスタンス数 | インスタンス数、vCPU コア数、インスタンスタイプの重みなど。 |
マルチゾーンサポート | いいえ | はい |
複数インスタンスタイプサポート | いいえ | はい |
複数ディスクタイプサポート | いいえ | はい |
インスタンス作成ポリシー | いいえ | はい。次のポリシーが提供されています。
|
配信の安定性 | リソース在庫の影響を強く受けます。 | 複数のゾーンとインスタンスタイプを持つ構成は、リソース在庫の影響を効果的に軽減します。 |
API 応答フォーマット | 作成結果を同期的に返します。 | 作成結果を同期的に返します。 |
以下は、インスタンスを作成するために RunInstances 操作から CreateAutoProvisioningGroup 操作に切り替える場合のサンプルシナリオです。
以前に
RunInstancesを使用して単一ゾーンで単一インスタンスタイプのインスタンスをバッチ作成していた場合、CreateAutoProvisioningGroupに切り替えることができます。切り替え後は、インスタンスタイプとゾーンの組み合わせを構成するだけで、インスタンスをバッチ作成できます。以前に
RunInstancesを使用する際に手動のデプロイメントプランを構成していた場合、CreateAutoProvisioningGroupに切り替えることができます。この操作は、複数のゾーン、インスタンスタイプ、ディスク構成にまたがるワンクリックのデプロイメント機能を提供します。また、選択可能なさまざまなインスタンス作成ポリシーも提供します。たとえば、以前はインスタンス作成の成功率を向上させるために
RunInstancesを呼び出す際に、複数のインスタンスタイプとゾーンを走査するプランを作成していたかもしれません。CreateAutoProvisioningGroupに切り替えた後は、インスタンスタイプとゾーンの複数の組み合わせを構成し、適切な作成ポリシーを選択するだけで済みます。その後、自動プロビジョニンググループがインスタンスを自動的にバッチ作成します。
自動プロビジョニンググループの作成ポリシーには制限があります。一度に最大 1,000 個のインスタンスを作成できます。インスタンスタイプに重み (WeightedCapacity) を指定する場合、各作成の最大合計重み付きキャパシティは 10,000 です。
RunInstances を使用したインスタンス作成時の問題
RunInstances 操作の制限により、多数のインスタンスを作成する際に、次の表で説明する問題が発生する可能性があります。
問題 | 説明 | 解決策 |
バッチ作成機能の制限 | RunInstances 操作を 1 回呼び出すと、最大 100 個の ECS インスタンスを作成できます。 | 100 個を超える ECS インスタンスを作成するには、ビジネス要件を満たすために、この API 操作をループまたは同時に複数回呼び出します。 |
バッチ作成の安定性不足 | RunInstances 操作の呼び出しは、単一のゾーンと単一のインスタンスタイプのみをサポートします。したがって、ECS インスタンスをバッチ作成する際に、在庫不足、販売中止、インスタンスタイプの使用制限などの問題が発生する可能性があります。これにより、次のような状況が発生する可能性があります。
|
|
作成ポリシーが単純すぎる | RunInstances 操作は、単一のゾーンと単一のインスタンスタイプのみをサポートします。ビジネスでディザスタリカバリのためにマルチゾーンデプロイメントが必要な場合や、最低コストで ECS インスタンスを作成する必要がある場合は、インスタンスのデプロイメントを成功させるために独自のデプロイメントプランを構築する必要があります。自作のデプロイメントプランには、次の問題があります。
| 問題を自分で解決するか、Alibaba Cloud に連絡して支援を求めてください。 |
自動プロビジョニンググループの利点
RunInstances API 操作を使用して ECS インスタンスをバッチ作成する際に発生する問題に対処するために、Alibaba Cloud は自動プロビジョニンググループを提供しています。自動プロビジョニンググループは、複数の課金方法、ゾーン、インスタンスタイプにまたがるインスタンスクラスターのワンクリックデプロイメントをサポートします。自動プロビジョニンググループを使用すると、安定した計算能力を提供し、スポットインスタンスの回収メカニズムによって引き起こされる不安定性を緩和し、インスタンスを繰り返し手動で作成する必要がなくなります。このセクションでは、自動プロビジョニンググループの利点について説明します。
利点 | 説明 |
バッチ作成のための ECS インスタンスの最大数の増加 | 自動プロビジョニンググループは、一度に最大 1,000 個の ECS インスタンスの作成をサポートします。 |
複数のゾーン、インスタンスタイプ、ディスクタイプのサポート | 自動プロビジョニンググループでは、最大 10 個のインスタンスタイプまたはゾーンの組み合わせを構成し、最大 5 個のディスクタイプを選択できます。これにより、ECS インスタンスをバッチ作成する際に高可用性を実現できます。 サンプル シナリオ: 自動プロビジョニンググループが提供する分散配置ポリシーを使用して ECS インスタンスを作成する場合、複数のゾーンとインスタンスタイプを構成できます。このポリシーによれば、作成されるインスタンスの数はゾーン間で比較的均等になるはずです。ただし、いずれかのゾーンで作成が失敗した場合、自動プロビジョニンググループは保留中のインスタンスを他の利用可能なゾーンで作成しようとします。 複数のディスクタイプを指定した場合、自動プロビジョニンググループは指定された順序を各ディスクタイプの優先度として使用します。ディスクタイプが利用できない場合、自動プロビジョニンググループは自動的に次のディスクタイプに切り替えます。 説明 指定されたすべてのディスクタイプが利用できない場合、自動プロビジョニンググループは別の作成メソッドに切り替え、現在のメソッドの使用を試行しなくなります。 |
複数のインスタンス作成ポリシーのサポート | 従量課金インスタンスとスポットインスタンスには、次の作成ポリシーが提供されます。
|
スポットインスタンスの可用性の向上 | スポットインスタンスは、その低価格のためにますます使用されています。ただし、価格の不安定性と回収機能により、管理が困難になります。自動プロビジョニンググループを使用すると、コストを低く抑えながらスポットインスタンスの可用性を向上させることができます。これは、次の方法で行うことができます。
|
CreateAutoProvisioningGroup のベストプラクティス
このセクションでは、CreateAutoProvisioningGroup API 操作の Java コードサンプルを提供し、その使用方法をすばやく理解するのに役立てます。
Java 用 ECS SDK と Alibaba Cloud コアライブラリをインストールします。
詳細については、「SDK の概要」をご参照ください。
CreateAutoProvisioningGroup API 操作を呼び出す Java コードを記述します。
以下はコードサンプルです。
import com.aliyun.ecs20140526.Client; import com.aliyun.ecs20140526.models.CreateAutoProvisioningGroupRequest; import com.aliyun.ecs20140526.models.CreateAutoProvisioningGroupResponse; import com.aliyun.teaopenapi.models.Config; import com.aliyun.teautil.models.RuntimeOptions; import com.google.gson.Gson; public class Test { public static void main(String[] args_) throws Exception { Config config = new Config() .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")) .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")) .setEndpoint("ecs.cn-heyuan.aliyuncs.com"); Client client = new Client(config); CreateAutoProvisioningGroupRequest.CreateAutoProvisioningGroupRequestLaunchTemplateConfig launchTemplateConfig = new CreateAutoProvisioningGroupRequest.CreateAutoProvisioningGroupRequestLaunchTemplateConfig() .setVSwitchId("vsw-f8zadqudz*********") .setInstanceType("ecs.s6-c1m1.small") .setWeightedCapacity(1.0); CreateAutoProvisioningGroupRequest.CreateAutoProvisioningGroupRequestLaunchConfiguration launchConfiguration = new CreateAutoProvisioningGroupRequest.CreateAutoProvisioningGroupRequestLaunchConfiguration() .setSecurityGroupId("sg-f8zf6vg51*********") .setImageId("aliyun_3_x64_20G_alibase_20250629.vhd") .setSystemDiskCategory("cloud_ssd") .setSystemDiskSize(40); CreateAutoProvisioningGroupRequest createAutoProvisioningGroupRequest = new CreateAutoProvisioningGroupRequest() .setAutoProvisioningGroupType("instant") .setRegionId("cn-heyuan") // スポットインスタンスの作成ポリシーを設定します。 .setSpotAllocationStrategy("lowest-price") // 従量課金インスタンスの作成ポリシーを設定します。 .setPayAsYouGoAllocationStrategy("prioritized") .setTotalTargetCapacity("5") .setPayAsYouGoTargetCapacity("3") .setSpotTargetCapacity("2") .setLaunchConfiguration(launchConfiguration) .setLaunchTemplateConfig(java.util.Arrays.asList( launchTemplateConfig )) .setClientToken("0c593ea1-3bea******************"); RuntimeOptions runtime = new RuntimeOptions(); CreateAutoProvisioningGroupResponse response = client.createAutoProvisioningGroupWithOptions(createAutoProvisioningGroupRequest, runtime); System.out.println(new Gson().toJson(response.getBody())); } }以下は JSON 応答のサンプルです。
{ "autoProvisioningGroupId": "apg-**************", "launchResults": { "launchResult": [ { "amount": 0, "errorCode": "NoInstanceStock", "errorMsg": "The instanceTypes are out of usage", "instanceType": "ecs.s6-c1m1.small", "spotStrategy": "NoSpot", "zoneId": "cn-heyuan-b" }, { "amount": 2, "instanceIds": { "instanceId": [ "i-f8z8**************icn5", "i-f8z8**************icn6" ] }, "instanceType": "ecs.s6-c1m1.small", "spotStrategy": "SpotAsPriceGo", "zoneId": "cn-heyuan-b" } ] }, "requestId": "CDA21119-7CFD-5B40-A2D0-******8" }CreateAutoProvisioningGroup を呼び出して自動プロビジョニンググループを作成する場合、バッチインスタンス作成の設定項目を設定するだけでよく、作成プロセスを管理する必要はありません。自動プロビジョニンググループは、ベストエフォートベースでインスタンスを作成します。
説明ベストエフォート配信とは、構成したリソースの組み合わせの一部でインスタンスを作成できない場合、自動プロビジョニンググループが自動的に他の利用可能なリソースの組み合わせに切り替えて作成プロセスを続行することを意味します。この作成メソッドには時間がかかり、実際の結果は指定された作成ポリシーからわずかに偏る可能性があります。