CreateAutoProvisioningGroup を呼び出して、ゾーン、インスタンスタイプ、支払い方法をまたいで従量課金の ECS インスタンスを一括作成します。
背景情報
RunInstances は、従量課金の ECS インスタンスを作成する際に最も一般的に使用される API オペレーションです。単一の RunInstances 呼び出しでは最大 100 台のインスタンスを作成できますが、本番環境で 100 台を超えるインスタンスを RunInstances を使用して作成するとボトルネックが発生する可能性があります。RunInstances を使用したインスタンス作成時の問題点をご参照ください。
すでに RunInstances を使用した一括作成におけるボトルネックを理解している場合は、「RunInstances を使用したインスタンス作成時の問題点」セクションをスキップしてください。
Alibaba Cloud では、大規模なインスタンス作成に対応するため、自動プロビジョニンググループを提供しています。単一の操作で、支払い方法、ゾーン、インスタンスタイプをまたいだインスタンスクラスターをデプロイするために、CreateAutoProvisioningGroup を呼び出してください。RunInstances と比較して、CreateAutoProvisioningGroup は多数の ECS インスタンスが必要なシナリオにより適しています。RunInstances と CreateAutoProvisioningGroup の比較および自動プロビジョニンググループのメリットをご参照ください。
RunInstances と CreateAutoProvisioningGroup の比較
以下の表では、RunInstances および CreateAutoProvisioningGroup API オペレーションを比較し、適切な方法を選択できるようにしています。
|
項目 |
RunInstances |
CreateAutoProvisioningGroup |
|
1 回のバッチで作成可能な最大インスタンス数 |
100 |
1,000 (最大 10,000 vCPU) |
|
容量配信方式 |
インスタンス数 |
インスタンス数、vCPU コア数、インスタンスタイプの重みなど。 |
|
マルチゾーン対応 |
いいえ |
はい |
|
複数のインスタンスタイプ対応 |
いいえ |
はい |
|
複数のディスクタイプ対応 |
いいえ |
はい |
|
インスタンス作成ポリシー |
いいえ |
はい。以下のポリシーが提供されています。
|
|
配信安定性 |
リソース在庫の影響を強く受ける |
複数のゾーンおよびインスタンスタイプにより在庫の影響を軽減 |
|
API 応答形式 |
同期 |
同期 |
RunInstances から CreateAutoProvisioningGroup への移行シナリオ例:
-
単一ゾーンで単一のタイプのインスタンスを
RunInstancesを使用して作成していた場合、CreateAutoProvisioningGroupに切り替えて、複数のインスタンスタイプおよびゾーンの組み合わせを設定してください。 -
RunInstancesを使用して手動でデプロイメント計画を構築していた場合、CreateAutoProvisioningGroupに切り替えて、ゾーン、インスタンスタイプ、ディスク構成をまたいだワンクリックデプロイメントを実現してください。内蔵の作成ポリシーを利用できます。たとえば、以前は
RunInstancesを使用して複数のインスタンスタイプおよびゾーンをトラバースすることで作成成功率を向上させていた場合、CreateAutoProvisioningGroupがこの処理を自動的に行います。組み合わせを設定し、ポリシーを選択すれば、グループがインスタンスを作成します。
自動プロビジョニンググループは、一度に最大 1,000 台のインスタンスを作成できます。インスタンスタイプに対して WeightedCapacity を指定した場合、1 回の作成あたりの最大合計加重容量は 10,000 です。
RunInstances を使用した一括作成時の問題点
RunInstances オペレーションには、多数のインスタンスを作成する際に以下の制限があります。
|
問題点 |
説明 |
解決策 |
|
バッチ容量の制限 |
単一の RunInstances 呼び出しでは最大 100 台のインスタンスしか作成できません。 |
ループまたは同時実行で複数回オペレーションを呼び出します。 |
|
バッチ安定性の不足 |
RunInstances は単一ゾーンおよび単一のインスタンスタイプのみをサポートするため、以下の理由でバッチ作成が失敗する可能性があります。
|
|
|
作成ポリシーが過度に単純 |
RunInstances は単一ゾーンおよび単一のインスタンスタイプのみをサポートします。マルチゾーンのディザスタリカバリや最低コストでの作成を実現するには、独自にデプロイメント計画を構築する必要がありますが、これには以下の問題があります。
|
ご自身で問題を解決するか、Alibaba Cloud までお問い合わせください。 |
自動プロビジョニンググループのメリット
自動プロビジョニンググループは、支払い方法、ゾーン、インスタンスタイプをまたいだワンクリックデプロイメントをサポートすることで、RunInstances の制限を解消します。安定したコンピューティング能力を提供し、スポットインスタンスの再取得リスクを軽減し、繰り返しの手動作成を不要にします。
|
メリット |
説明 |
|
より高いバッチ上限 |
1 回のバッチで最大 1,000 台のインスタンスを作成できます。 |
|
複数のゾーン、インスタンスタイプ、ディスクタイプ |
高可用性の一括作成のために、最大 10 種類のインスタンスタイプまたはゾーンの組み合わせと、最大 5 種類のディスクタイプを設定できます。 例: バランス型ディストリビューションポリシーを使用すると、インスタンスがゾーン間で均等に分散されます。あるゾーンで作成が失敗した場合、グループは他の利用可能なゾーンで保留中のインスタンスを作成します。 複数のディスクタイプを指定すると、グループはそれらを優先順位に従って使用します。いずれかのタイプが利用できない場合、自動的に次のタイプに切り替えます。 説明
指定されたすべてのディスクタイプが利用できない場合、グループは別の作成方法に切り替えます。 |
|
複数の作成ポリシー |
利用可能な作成ポリシー:
|
|
スポットインスタンスの可用性向上 |
スポットインスタンスは低価格ですが、価格変動や再取得の影響を受けます。自動プロビジョニンググループはコストを抑えながらスポットインスタンスの可用性を向上させます。
|
CreateAutoProvisioningGroup のベストプラクティス
以下の Java コードサンプルは、CreateAutoProvisioningGroup を呼び出す方法を示しています。
-
ECS SDK for Java および Alibaba Cloud コアライブラリをインストールします。
SDK 概要をご参照ください。
-
Java で CreateAutoProvisioningGroup を呼び出します。
コードサンプル:
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 を使用すると、バッチ作成パラメーターを設定するだけで、グループがベストエフォートで作成プロセスを処理します。
説明ベストエフォート配信とは、一部のリソース組み合わせでインスタンスを作成できない場合、グループが自動的に他の利用可能な組み合わせに切り替えることを意味します。このプロセスには時間がかかり、実際の結果が指定されたポリシーとわずかに異なる可能性があります。