スポットインスタンスの配分戦略 - Amazon Elastic Compute Cloud

スポットインスタンスの配分戦略

起動設定によって、スポットフリートがスポットインスタンスを起動できるすべてのスポットキャパシティプール (インスタンスタイプおよびアベイラビリティーゾーン) が決定されます。ただし、インスタンスを起動する際、スポットフリートは指定された配分戦略を使用して、使用可能なすべてのプールから特定のプールを選択します。

配分戦略

スポットインスタンスには次のいずれかの配分戦略を指定できます。

priceCapacityOptimized (推奨)

スポットフリートは、起動中のインスタンスの数に容量の可用性が最も高いプールを識別します。つまり、短期的に中断の可能性が最も低いと思われるプールからスポットインスタンスをリクエストすることになります。次にスポットフリートは、これらのプールのうち最も価格の低いスポットインスタンスをリクエストします。

priceCapacityOptimized 配分戦略は、ステートレスコンテナ化アプリケーション、マイクロサービス、ウェブアプリケーション、データおよび分析ジョブ、バッチ処理など、ほとんどのスポットワークロードに最適です。

capacityOptimized

スポットフリートは、起動中のインスタンスの数に容量の可用性が最も高いプールを識別します。つまり、短期的に中断の可能性が最も低いと思われるプールからスポットインスタンスをリクエストすることになります。オプションで capacityOptimizedPrioritized により、フリート内の各インスタンスタイプに優先順位を設定できます。スポットフリートは、最初に容量を最適化しますが、ベストエフォートベースでインスタンスタイプの優先順位を重視します。

スポットインスタンス では、価格は需要と供給の長期的な傾向に基づいて時間の経過とともに緩やかに変動しますが、容量はリアルタイムで変動します。capacityOptimized 戦略では、リアルタイムの容量データを調べ、可用性の最も高いプールを予測することで、そのプールから スポットインスタンス を自動的に起動します。この戦略は、作業の再開に関連する中断のコストが高くなる可能性のあるワークロード (長時間の継続的インテグレーション (CI)、画像とメディアのレンダリング、深層学習およびハイパフォーマンスコンピューティング (HPC) など) に対応します。中断の可能性を低くすることにより、capacityOptimized 戦略ではワークロードの全体的なコストを削減できます。

または、優先パラメータで capacityOptimizedPrioritized 配分戦略を使用して、インスタンスタイプを優先順位の高い順から低い順へ指定できます。異なるインスタンスタイプに対し同じ優先順位を設定できます。スポットフリートは最初に容量を最適化しますが、インスタンスタイプの優先順位をベストエフォートベースで決定します (例えば、優先順位を尊重しても、EC2 フリートの最適な容量をプロビジョニングする能力に大きな影響を与えない場合など) 。これは、中断の可能性を最小限に抑える必要があり、特定のインスタンスタイプを優先することが重要なワークロードに適したオプションです。優先順位の使用は、フリートが起動テンプレートを使用する場合にのみサポートされます。capacityOptimizedPrioritized の優先順位を設定するとき、オンデマンド AllocationStrategyprioritized に設定されていると、同じ優先順位がオンデマンドインスタンスにも適用されますのでご注意ください。

diversified

スポットインスタンス はすべてのプールに分散されます。

lowestPrice

スポットインスタンスは、使用可能な容量を持つ最低価格のプールから取得されます。これはデフォルトの戦略です。ただし、priceCapacityOptimized 配分戦略を指定してデフォルトを上書きすることをお勧めします。

最低価格のプールに使用可能な容量がない場合、スポットインスタンスは使用可能な容量のある 2 番目に低価格のプールから取得されます。

希望する容量を満たす前にプールの容量が不足した場合、スポットフリートは 2 番目に低い価格のプールから容量を引き出し、引き続きリクエストを満たします。希望する容量を確実に満たすために、複数のプールからスポットインスタンスを受け取る場合があります。

この戦略では、インスタンスの価格のみが考慮され、容量の可用性は考慮されないため、中断率が高くなる可能性があります。

InstancePoolsToUseCount

ターゲットスポット容量を割り当てる先のスポットプールの数。配分戦略が lowestPrice に設定されている場合にのみ有効です。スポットフリートでは最低価格のスポットプールを選択し、指定した数のスポットプールにターゲットスポット容量を均等に割り当てます。

スポットフリートは、指定したプール数内のスポットインスタンスを、ベストエフォート方式で利用しようとすることにご注意ください。ターゲット容量を満たす前にプールにスポットキャパシティーの残量がなくなった場合、スポットフリートは次に低い価格のプールの容量を利用してリクエストを満たします。ターゲット容量を確実に満たすために、スポットインスタンスが、指定した数を超えるプールから割り当てられることがあります。また、ほとんどのプールにスポット容量がない場合には、指定した数より少ないプールからターゲット容量のすべてが割り当てられることがあります。

適切な配分戦略の選択

適切なスポット割り当て戦略を選択することで、ユースケースに合わせてフリートを最適化できます。オンデマンドインスタンスのターゲット容量では、スポットフリートはスポットインスタンス の配分戦略 (priceCapacityOptimizedcapacityOptimized diversified または lowestPrice) を採用しながら、パブリックオンデマンド料金に基づいて、最低価格のインスタンスタイプを常に選択します。

最低価格と容量可用性のバランスをとる

最低価格のスポット容量プールと容量の可用性が最も高いスポットキャパシティプールとのトレードオフのバランスをとるには、priceCapacityOptimized 配分戦略を使用することをお勧めします。この戦略では、プールの価格とプール内のスポットインスタンスの空き容量の両方に基づいて、どのプールからスポットインスタンスをリクエストするかを決定します。つまり、価格を考慮しながらも短期的に中断の可能性が最も低いと思われるプールからスポットインスタンスをリクエストすることになります。

コンテナ化されたアプリケーション、マイクロサービス、ウェブアプリケーション、データおよび分析ジョブ、バッチ処理など、レジリエントでステートレスなワークロードをフリートが実行している場合は、最適なコスト削減とキャパシティアベイラビリティを実現する priceCapacityOptimized 配分戦略を使用してください。

作業の再開に関連する中断に伴うコストが高くなる可能性があるワークロードをフリートで実行している場合は、中断があった場合にアプリケーションがそのポイントから再起動できるようにチェックポイントの設定を実装する必要があります。チェックポイントを使用すると、スポットインスタンスの中断率も低い最低価格のプールから容量が割り当てられるため、priceCapacityOptimized 配分戦略がこれらのワークロードに適したものになります。

priceCapacityOptimized 配分戦略を使用する設定例については、「例 10: 優先順位のある容量最適化フリートでスポットインスタンスを起動する」を参照してください。

ワークロードの中断コストが高い場合

同様の価格のインスタンスタイプを使用するワークロードを実行する場合や、中断のコストが非常に高いため、中断のわずかな増加に比べてコスト削減が不十分な場合、オプションでこの capacityOptimized 戦略を使用できます。この戦略では、中断の可能性がより低く、最も可用性の高いスポットキャパシティプールから容量を割り当てることで、ワークロードの総コストを削減することができます。capacityOptimized 配分戦略を使用する設定例については、「例 8: 容量の再調整を設定して代替スポットインスタンスを起動する」を参照してください。

中断の可能性を最小限に抑える必要があるが、特定のインスタンスタイプの優先順位が重要な場合は、capacityOptimizedPrioritized の配分戦略を使用し、インスタンスタイプの順序を優先順位の高い順に表現することでプールの優先順位を設定することができます。設定の例については、「例 9: 容量最適化フリートでスポットインスタンスを起動する」を参照してください。

優先順位の使用は、フリートが起動テンプレートを使用する場合にのみサポートされることに注意してください。capacityOptimizedPrioritized の優先順位を設定する際に、オンデマンド AllocationStrategyprioritized に設定されていると、同じ優先順位がオンデマンドインスタンスにも適用されるので注意してください。

ワークロードに時間的な柔軟性があり、キャパシティの可用性が問題にならない場合

フリートが小さい場合、または短時間の実行である場合、容量の可用性を考慮しながら、priceCapacityOptimized を使用してコスト削減を最大化できます。

ワークロードに時間的な柔軟性があり、キャパシティの可用性が問題にならない場合は、オプションで lowestPrice 配分戦略を使用してコスト削減を最大化できます。この lowestPrice 配分戦略では、インスタンスの価格のみが考慮され、容量の可用性は考慮されないため、スポットインスタンス中断率が高くなる可能性があることをご注意ください。

フリートが大きい場合や長時間稼働している場合

フリートが大規模、または長期間実行される場合には、diversified 戦略を使用して複数のプールに スポットインスタンス を分散することで、フリートの可用性を改善できます。例えば、スポットフリートが 10 プールとして、ターゲット容量が 100 インスタンスと指定すると、フリートはプールごとに 10 個の スポットインスタンス を起動します。1 つのプールのスポット料金がこのプールの上限料金を超える場合、フリートの 10% のみに影響がおよびます。この戦略を使用すると、いずれのプールにおいても経時的にフリートが受けるスポット料金の上昇の影響を減少させます。diversified 戦略では、スポットフリートは、オンデマンド価格 以上のスポット料金のいずれのプールにもスポットインスタンスを起動しません。

安価で分散型のフリートを作成するには、lowestPrice 戦略を InstancePoolsToUseCount と組み合わせて使用します。例えば、ターゲットのキャパシティが 10 のスポットインスタンスで、2 つのスポットキャパシティプールを (InstancePoolsToUseCount により) 指定した場合、スポットフリートはスポットキャパシティを満たすために最も安価プールを 2 つ利用します。

スポットインスタンス を配分するために、少数または多数のスポットキャパシティープールを選択して使用することができます。たとえば、バッチ処理を実行する場合は、少数のスポットキャパシティープール ( など) を指定することをお勧めします。これにより、キューのコンピューティング性能を常に確保しながら、コストを最大限削減できます。InstancePoolsToUseCount=2ウェブサービスを実行する場合は、スポットキャパシティプールが一時的に使用不可になった場合の影響を最小限に抑えるために、多数のスポットキャパシティプール (InstancePoolsToUseCount=10 など) を指定することをお勧めします。

スポットフリートは、指定したプール数内のスポットインスタンスを、ベストエフォート方式で利用しようとすることにご注意ください。ターゲット容量を満たす前にプールにスポットキャパシティーの残量がなくなった場合、スポットフリートは次に低い価格のプールの容量を利用してリクエストを満たします。ターゲット容量を確実に満たすために、スポットインスタンスが、指定した数を超えるプールから割り当てられることがあります。また、ほとんどのプールにスポット容量がない場合には、指定した数より少ないプールからターゲット容量のすべてが割り当てられることがあります。

ターゲット容量の維持

スポット料金やスポットキャパシティプールで使用可能な容量の変動に伴ってスポットインスタンスが終了すると、タイプ maintain のスポットフリートは代替スポットインスタンスを起動します。配分戦略によって、次のように置換先インスタンスを起動するプールが決まります。

  • 割当戦略が priceCapacityOptimized の場合、フリートは最もスポットインスタンスの容量が利用可能なプールで置換先インスタンスを起動します。また、価格も考慮し、容量利用率の高い価格の低いプールを特定します。

  • 配分戦略が capacityOptimized の場合、フリートは、利用可能なスポットインスタンス容量が最大のプールで置換先インスタンスを起動します。

  • 配分戦略が diversified である場合には、フリートは残りのプールに代替 スポットインスタンス を分散します。

  • 配分戦略が lowestPrice である場合、スポット群は、スポット料金が現在最低値のプールに代替インスタンスを起動します。

  • 割り当て戦略が lowestPriceInstancePoolsToUseCount の組み合わせである場合、フリートは最低価格のスポット容量プールを選択し、指定した数のスポット容量プールにわたってスポットインスタンスを起動します。