すべてのプロダクト
Search
ドキュメントセンター

Elastic Compute Service:自動プロビジョニンググループ関連のAPI操作を使用してECSインスタンスをバッチ作成する

最終更新日:Aug 20, 2024

多数の従量課金のECS (Elastic Compute Service) インスタンスを作成する場合は、API操作を呼び出して、より効率的な方法でインスタンスをバッチ作成できます。 このトピックでは、JavaコードをコンパイルしてCreateAutoProvisioningGroup操作を呼び出すことにより、従量課金ECSインスタンスを一括作成する方法について説明します。 このトピックでは、RunInstances操作とCreateAutoProvisioningGroup操作の機能、利点、および欠点の違いについても説明します。

背景情報

RunInstances操作は、従量課金ECSインスタンスの作成に一般的に使用されます。 操作を呼び出して、最大100個のECSインスタンスを一括作成できます。 ただし、100を超えるECSインスタンスを一括作成する場合は、RunInstances操作を呼び出すときに技術的なボトルネックが発生する可能性があります。 詳細については、このトピックの「RunInstances操作の使用による可能な問題」をご参照ください。

説明

RunInstances操作を使用して発生する技術的なボトルネックに精通している場合は、前のセクションをスキップしてください。

100を超えるECSインスタンスをバッチ作成できるようにするために、Alibaba Cloudは自動プロビジョニンググループを提供しています。 CreateAutoProvisioningGroup操作を呼び出して、自動プロビジョニンググループを作成し、そのグループを使用して、数回クリックするだけで課金方法、インスタンスファミリー、ゾーン間でインスタンスクラスターをデプロイできます。 多数のECSインスタンスを一括作成する場合は、RunInstances操作よりもCreateAutoProvisioningGroup操作の方が適しています。 2つの操作の違いと利点については、このトピックのRunInstancesとCreateAutoProvisioningGroupの違いおよび自動プロビジョニンググループの利点を参照してください。

RunInstancesとCreateAutoProvisioningGroupの違い

次の表は、ECSインスタンスを作成するための適切な操作を選択するのに役立つ、RunInstances操作とCreateAutoProvisioningGroup操作の機能の違いを示しています。

項目

RunInstances

CreateAutoProvisioningGroup

バッチ作成できるインスタンスの最大数

100 に調整します。

1,000 (最大10,000 vCPU) 。

容量配信方法

特定のインスタンス数

特定のインスタンス数、特定のvCPU数、および異なる重みのインスタンスタイプ。

複数ゾーンのサポート

いいえ。

はい。

複数のインスタンスタイプのサポート

いいえ。

はい。

複数のディスクカテゴリのサポート

いいえ。

はい。

インスタンスの作成に使用できるポリシーのプロビジョニング

いいえ。

はい。 以下のポリシーが提供されます。

  • 従量課金インスタンスの場合

    • コスト最適化ポリシー: 自動プロビジョニンググループは、インスタンスを作成する候補インスタンスタイプから最低コストのインスタンスタイプを選択します。

    • 優先度ベースのポリシー: 自動プロビジョニンググループは、候補インスタンスタイプに設定された優先度に基づいてインスタンスの作成を試みます。

  • プリエンプティブルインスタンスの場合

    • コスト最適化ポリシー: 自動プロビジョニンググループは、インスタンスを作成する候補インスタンスタイプから最低コストのインスタンスタイプを選択します。

    • バランスの取れた配布ポリシー: 自動プロビジョニンググループは、指定されたゾーンにインスタンスを均等に配布します。

    • 容量最適化配布ポリシー: 自動プロビジョニンググループは、リソースの可用性に基づいてインスタンスを作成するためのインスタンスタイプとゾーンの最適な組み合わせを選択します。

配送の安定性

リソースの可用性の影響を受けます。

インスタンスタイプとゾーンの複数の組み合わせにより、リソースの可用性の影響が軽減されます。

応答方法

レスポンスをリアルタイムで返します。

レスポンスをリアルタイムで返します。

次のサンプルシナリオでは、RunInstances操作の代わりにCreateAutoProvisioningGroup操作を使用してECSインスタンスを作成する方法について説明します。

  • RunInstances操作を呼び出して、単一のゾーンに単一のインスタンスタイプのインスタンスをバッチ作成しました。 代わりにCreateAutoProvisioningGroup操作を呼び出してインスタンスをバッチ作成する場合は、インスタンスタイプとゾーンの組み合わせを設定するだけで済みます。

  • RunInstances操作を呼び出してインスタンスをバッチ作成するときに、ビジネス展開プランを構成しました。 代わりに、CreateAutoProvisioningGroup操作を呼び出して、自動プロビジョニングで提供される異なるインスタンスプロビジョニングポリシーに基づいて、複数のインスタンスタイプとゾーンに複数のディスクカテゴリがアタッチされているインスタンスをデプロイできます。

    たとえば、インスタンス作成の成功率を向上させるために、RunInstances操作を呼び出したときに、複数のインスタンスタイプとゾーンを横断してインスタンスを作成するビジネスデプロイプランを手動で構成しました。 代わりにCreateAutoProvisioningGroup操作を呼び出して多数のインスタンスを一括作成する場合は、インスタンスタイプとゾーンの複数の組み合わせを設定し、適切なポリシーを選択するだけで済みます。 作成された自動プロビジョニンググループは、指定された設定とポリシーに基づいてインスタンスを自動的にバッチ作成します。

重要

自動プロビジョニンググループでインスタンスを作成するために使用されるポリシーには、制限が適用されます。 同時に最大1,000個のインスタンスを作成できます。 WeightedCapacityパラメーターを使用して、指定した各インスタンスタイプの重みを指定した場合、毎回作成される最大重み付き容量は10,000です。

RunInstances操作の使用によって発生する可能性のある問題

RunInstances操作の制限により、操作を呼び出してインスタンスを作成するときに次の問題が発生する場合があります。

問題

説明

解決策

限られた数のインスタンスをバッチ作成できます。

RunInstances操作を呼び出して、最大100個のECSインスタンスを一括作成できます。

100を超えるECSインスタンスを作成する場合は、この操作を複数回、周期的または同時に呼び出す必要があります。

バッチ作成インスタンスの成功率は保証されていません。

RunInstances操作を呼び出してインスタンスをバッチ作成するたびに、操作は単一のインスタンスタイプと単一のゾーンのみをサポートします。 インスタンスをバッチ作成する操作を呼び出すと、次の問題が発生する可能性があります。

  • 特定のインスタンスタイプのリソースが不足しているため、インスタンスを作成できません。

  • 特定のインスタンスタイプのインスタンスは、インスタンスタイプの廃止により作成できなくなりました。

  • 特定のゾーンでは特定のインスタンスタイプが使用できないため、インスタンスを作成できません。

  • 特定のインスタンスタイプは特定のディスクカテゴリをサポートしていないため、インスタンスを作成できません。

  • 主にリソース不足により、バッチインスタンスの作成が失敗します。 この問題を解決するには、DescribeAvailableResource操作を呼び出して、ゾーンで使用可能なインスタンスタイプを事前に照会することを推奨します。 インスタンスタイプとゾーンの複数の組み合わせを設定して、ECSインスタンスを一括作成するのに十分なリソースを確保できます。 このインスタンス作成方法は、ビジネス配信の安定性を向上させます。

    インスタンスタイプとゾーンの複数の組み合わせを設定した後、インスタンスをバッチ作成するための適切なポリシーを作成します。 たとえば、設定した複数の組み合わせに基づいて100のECSインスタンスを順番に作成できます。 使用可能なリソースを使用して最大50個のインスタンスを作成できる場合、別の組み合わせを使用してさらに50個のインスタンスを作成できます。

  • インスタンスタイプの制限に注意してください。 DescribeAvailableResourceを呼び出して、インスタンスタイプの制限を照会できます。 次に、使用制限の変更によって引き起こされる影響を防ぐために、制限固有のフォールトトレランスソリューションを開発できます。

    説明

    各インスタンスファミリーのインスタンスタイプの制限を表示できます。 詳細については、「インスタンスファミリーの概要」をご参照ください。

    サンプルシナリオ: ecs.g6e.largeインスタンスタイプは拡張SSD (ESSD) のディスクカテゴリのみをサポートしますが、北京ゾーンX (cn-Beijing-x) はESSDをサポートしていません。

インスタンスの作成に使用される単純なポリシーは、多様なビジネス要件を満たすことができません。

RunInstances操作を使用すると、単一のゾーンに単一のインスタンスタイプのインスタンスのみを作成できます。 ジオディザスタリカバリを実装するために、または最小限のコストでECSインスタンスを作成するために、ゾーン間でインスタンスをデプロイする場合は、インスタンスがデプロイされるようにビジネスデプロイプランを作成する必要があります。 ビジネス展開計画を作成すると、次の問題が発生する可能性があります。

  • 高い開発コスト: 設定したビジネス展開計画を使用する場合、いくつかの問題を解決する必要があります。 たとえば、リソースが不足している場合、ECSインスタンスの作成に失敗する可能性があります。また、サーバーをスケールアップするときに、プリエンプティブルインスタンスの最低コストでコンピューティング能力を確保できません。

  • 安定性が低く、プロ意識が低い: Alibaba Cloudが提供するリソースに対して作成したビジネスデプロイメント計画はテストできず、専門的な方法で作成される可能性も低くなります。 これにより、本番環境にリスクが生じます。

問題を解決するために、Alibaba Cloudに連絡してサポートを受けることができます。

自動プロビジョニンググループの利点

Alibaba Cloudは、RunInstances操作を呼び出してECSインスタンスをバッチ作成するときに発生する可能性のある問題に対処するための自動プロビジョニンググループを提供しています。 自動プロビジョニンググループを使用すると、数回クリックするだけで、課金方法、インスタンスファミリー、ゾーンにまたがるインスタンスクラスターをデプロイできます。 自動プロビジョニンググループは、安定したコンピューティングパワーを提供し、プリエンプティブルインスタンスの再利用メカニズムによって引き起こされる不安定性を軽減し、インスタンスを手動で作成する必要性を排除します。 次の表に、自動プロビジョニンググループの利点を示します。

特典

説明

多数のECSインスタンスの一括作成

自動プロビジョニンググループを使用して、最大1,000個のECSインスタンスを一括作成できます。

インスタンスタイプとゾーン間で複数のディスクカテゴリがアタッチされたインスタンスの作成

自動プロビジョニンググループを使用すると、最大10種類のインスタンスタイプとゾーンの組み合わせを設定し、最大5つのディスクカテゴリを選択できます。

サンプルシナリオ:

自動プロビジョニンググループが提供する分散分散ポリシーに基づいてECSインスタンスを作成する場合、複数のインスタンスタイプとゾーンを設定できます。 ポリシーの要件に応じて、インスタンスはゾーン間で比較的バランスの取れた方法で作成する必要があります。 ただし、ゾーンに必要な数のインスタンスを作成できない場合、自動プロビジョニンググループは他のゾーンに同じ数のインスタンスを作成しようとします。

複数のディスクカテゴリを指定した場合、自動プロビジョニンググループはディスクカテゴリの優先順位に基づいてインスタンスのディスクを作成し、ディスクカテゴリが使用できない場合はディスクカテゴリを変更します。

説明

すべてのディスクカテゴリが使用できない場合、自動プロビジョニンググループは別の作成方法を選択します。

インスタンスを作成するための複数のポリシーのサポート

自動プロビジョニンググループは、インスタンスを作成するために次のポリシーを提供します。

  • 従量課金インスタンスの場合

    • コスト最適化ポリシー: 自動プロビジョニンググループは、インスタンスを作成する候補インスタンスタイプから最低コストのインスタンスタイプを選択します。

    • 優先度ベースのポリシー: 自動プロビジョニンググループは、候補インスタンスタイプに設定された優先度に基づいてインスタンスの作成を試みます。

  • プリエンプティブルインスタンスの場合

    • コスト最適化ポリシー: 自動プロビジョニンググループは、インスタンスを作成する候補インスタンスタイプから最低コストのインスタンスタイプを選択します。

    • バランスの取れた配布ポリシー: 自動プロビジョニンググループは、指定されたゾーンにインスタンスを均等に配布します。

    • 容量最適化配布ポリシー: 自動プロビジョニンググループは、リソースの可用性に基づいてインスタンスを作成するためのインスタンスタイプとゾーンの最適な組み合わせを選択します。

プリエンプティブルインスタンスの可用性の向上

プリエンプティブルインスタンスの価格の利点により、プリエンプティブルインスタンスの需要が増加しています。 ただし、プリエンプティブルインスタンスの価格は変動し、保護期間が経過した後に入札価格が現在の市場価格よりも低くなると、インスタンスは回収されます。 したがって、プリエンプティブルインスタンスの管理は困難です。 自動プロビジョニンググループは、低コストのプリエンプティブルインスタンスの可用性を向上させるのに役立ちます。 以下の項目では、プリエンプティブルインスタンスの可用性を向上させる方法について説明します。

  • デフォルトのコスト最適化ポリシーを使用できます。 デフォルトポリシーを使用する場合、自動プロビジョニンググループは、グループがスケールアウトされるたびにインスタンスタイプの価格の昇順でインスタンスを作成しようとします。

  • プリエンプティブルインスタンスの場合、インスタンスタイプに対応するリソースはゾーンに対応するリソースとは異なります。 プリエンプティブルインスタンスのインスタンスタイプとゾーンの複数の組み合わせを設定して、すべての組み合わせで使用可能なリソースがなくなる確率を減らすことができます。

  • 自動プロビジョニンググループを作成するときに、複数のディスクカテゴリを設定できます。 これにより、システムは適切なディスクカテゴリを選択してインスタンスを作成できます。

  • SpotInstancePoolsToUseCountパラメーターを設定して、インスタンスタイプとゾーンの最低コストの組み合わせを使用してプリエンプティブルインスタンスが作成されるようにすることができます。 これにより、インスタンスタイプのインスタンスがリサイクルされたときにコンピューティングパワーが大幅に低下するという問題を防ぐことができます。

CreateAutoProvisioningGroup操作を呼び出して自動プロビジョニンググループを作成するためのベストプラクティス

このセクションでは、自動プロビジョニンググループ (CreateAutoProvisioningGroup) の作成に使用されるサンプルのJavaコードについて説明します。 このセクションでは、CreateAutoProvisioningGroup操作を呼び出す方法についても説明します。

  1. ECS SDK for JavaとAlibaba Cloud SDKコアライブラリをインストールします。

    詳細については、「ECS SDK For Javaのインストール」をご参照ください。

  2. CreateAutoProvisioningGroup操作を呼び出すために使用されるJavaコードをコンパイルします。

    サンプルコード:

    CreateAutoProvisioningGroupRequest request = new CreateAutoProvisioningGroupRequest();
    request.setRegionId(regionId);
    request.setLaunchConfigurationImageId(RequestHelper.IMAGE_ID);
    request.setLaunchConfigurationSecurityGroupId(securityGroupId);
    
    request.setTotalTargetCapacity(totalTargetCapacity);
    request.setPayAsYouGoTargetCapacity(payAsYouGoTargetCapacity);
    request.setSpotTargetCapacity(spotTargetCapacity);
    request.setLaunchConfigurationSystemDiskCategory("cloud_ssd");
    request.setLaunchConfigurationSystemDiskSize(40);
    request.setAutoProvisioningGroupType("instant");
    // Configure the policy that is used to create preemptible instances.
    request.setSpotAllocationStrategy("lowest-price");
    request.setSpotInstancePoolsToUseCount(spotInstancePoolsToUseCount);
    // Configure the policy that is used to create pay-as-you-go instances.
    request.setPayAsYouGoAllocationStrategy("prioritized");
    request.setMaxSpotPrice(maxSpotPrice);
    // Configure up to 10 combinations of instance types and zones.
    request.setLaunchTemplateConfigs(launchTemplateConfigs);
    request.setClientToken(clientToken);
    CreateAutoProvisioningGroupResponse response = client.getAcsResponse(request);

    JSON形式のサンプル応答:

    {
        "autoProvisioningGroupId":"apg-****",
        "launchResults":[
            {
                "instanceIds":[
                    "i-****"
                ],
                "instanceType":"ecs.c5.large",
                "spotStrategy":"NoSpot",
                "zoneId":"cn-shanghai-b"
            },
           {
                "instanceIds":[],
                "instanceType":"ecs.c5.large",
                "spotStrategy":"NoSpot",
                "zoneId":"cn-shanghai-b",
                "errorCode" : "Invalid.Parameter",
                "errorMsg" : "Specific Parameter 'imageId' is not valid"
            }
        ],
        "requestId":"20DA1E9F-BF7F-4BE7-8204-E4DE58E4FC7B"
    }

    CreateAutoProvisioningGroup操作を呼び出して自動プロビジョニンググループを作成するときは、インスタンスのバッチ作成に使用する項目を設定します。 作成プロセスについて心配する必要はありません。 自動プロビジョニンググループは、ベストエフォート方式でインスタンスを作成します。

    説明

    ベストエフォート方式では、システムは1つの組み合わせを使用してインスタンスをバッチ作成しようとします。その組み合わせを使用して十分なインスタンスを作成できない場合、システムはインスタンスタイプとゾーンの別の組み合わせを使用してインスタンスをバッチ作成します。 ベストエフォート型インスタンスの作成方法には長期間が必要であり、作成結果が設定した作成ポリシーから逸脱する場合があります。