

# 配分戦略を使用して、EC2 フリートまたはスポットフリートがどのようにスポットキャパシティとオンデマンドキャパシティを満たすかを決定します。
<a name="ec2-fleet-allocation-strategy"></a>

EC2 フリートまたはスポットフリート内で複数のキャパシティプール (それぞれインスタンスタイプとアベイラビリティーゾーンで構成) を使用する場合は、配分戦略を使用して、そうしたキャパシティプールから Amazon EC2 がどのようにスポットキャパシティとオンデマンドキャパシティを満たすかを管理できます。配分戦略を使用すると、使用可能なキャパシティ、料金、インスタンスタイプを最適化できます。スポットインスタンスとオンデマンドインスタンスには、さまざまな配分戦略があります。

**Topics**
+ [スポットインスタンスの配分戦略](#ec2-fleet-allocation-strategies-for-spot-instances)
+ [オンデマンドインスタンスの配分戦略](#ec2-fleet-allocation-strategies-for-on-demand-instances)
+ [適切なスポット配分戦略を選択する](#ec2-fleet-allocation-use-cases)
+ [スポットインスタンスのターゲットキャパシティを維持する](#ec2-fleet-maintain-fleet-capacity)
+ [オンデマンド容量に基づくインスタンスタイプの優先順位付け](#ec2-fleet-on-demand-priority)

## スポットインスタンスの配分戦略
<a name="ec2-fleet-allocation-strategies-for-spot-instances"></a>

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

**注記**  
(Linux インスタンスのみ) [AMD SEV-SNP](sev-snp.md) を有効にして起動するようにスポットインスタンスを設定すると、選択したインスタンスタイプの[オンデマンド時間料金](https://aws.amazon.com/ec2/pricing/on-demand/)の 10% に相当する追加の時間単位使用料が請求されます。配分戦略で料金を入力として使用する場合、フリートにはこの追加料金は含まれず、スポット料金のみが使用されます。

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

**料金キャパシティ最適化** (推奨)  
フリートは、起動中のインスタンスの数に最適なキャパシティを使用できるプールを特定します。つまり、短期的に中断の可能性が最も低いと思われるプールからスポットインスタンスをリクエストすることになります。次に、そうしたプールのうち料金が最も安いスポットインスタンスをリクエストします。  
**料金キャパシティ最適化**配分戦略は、ステートレスコンテナ化アプリケーション、マイクロサービス、ウェブアプリケーション、データおよび分析ジョブ、バッチ処理など、ほとんどのスポットワークロードに最適です。  
AWS CLI を使用している場合、パラメータ名は EC2 フリートでは `price-capacity-optimized`、スポットフリートでは `priceCapacityOptimized` となります。

**キャパシティ最適化**  
フリートは、起動中のインスタンスの数に最適なキャパシティを使用できるプールを特定します。つまり、短期的に中断の可能性が最も低いと思われるプールからスポットインスタンスをリクエストすることになります。  
スポットインスタンス では、価格は需要と供給の長期的な傾向に基づいて時間の経過とともに緩やかに変動しますが、容量はリアルタイムで変動します。**キャパシティ最適化**戦略では、リアルタイムのキャパシティデータを調べ、可用性の最も高いプールを予測することで、そのプールからスポットインスタンスを自動的に起動します。この戦略は、作業の再開に関連する中断のコストが高くなる可能性のあるワークロード (長時間の継続的インテグレーション (CI)、画像とメディアのレンダリング、深層学習およびハイパフォーマンスコンピューティング (HPC) など) に対応します。中断の可能性を低くすることにより、**キャパシティ最適化**戦略ではワークロードの全体的なコストを削減できます。  
また、**優先順位付きキャパシティ最適化**と共に優先パラメータを使用して、インスタンスタイプを優先順位の高い順から低い順に並べることができます。異なるインスタンスタイプに対し同じ優先順位を設定できます。フリートはまずキャパシティを最適化しますが、ベストエフォートに基づいてインスタンスタイプの優先順位を考慮します (例えば、優先順位を考慮しても、フリートの最適なキャパシティをプロビジョニングする能力に大きな影響を与えない場合など)。これは、中断の可能性を最小限に抑える必要があり、特定のインスタンスタイプを優先することが重要なワークロードに適したオプションです。なお、スポットキャパシティのインスタンスタイプの優先順位を設定する場合、オンデマンド配分戦略が**優先順位付き**に設定されていると、同じ優先順位がオンデマンドインスタンスにも適用されます。スポットフリートの場合、優先順位を使用できるのはフリートが起動テンプレートを使用している場合に限られます。  
AWS CLI を使用している場合、パラメータ名は EC2 フリートでは `capacity-optimized` と `capacity-optimized-prioritized`、スポットフリートでは `capacityOptimized` と `capacityOptimizedPrioritized` となります。

**分散**  
スポットインスタンス は、すべてのスポットキャパシティープールに分散されます。AWS CLI を使用している場合、パラメータ名は EC2 フリートでもスポットフリートでも `diversified` となります。

**最低料金** (非推奨)  
スポットインスタンスの中断リスクが非常に高いため、**最低料金**配分戦略はお勧めしません。
スポットインスタンスは、使用可能な容量を持つ最低価格のプールから取得されます。AWS CLI を使用する場合は、これがデフォルトの戦略です。ただし、**料金キャパシティ最適化**配分戦略を指定して、このデフォルトをオーバーライドすることをお勧めします。  
最低料金戦略では、料金が最も安いプールに使用可能なキャパシティがない場合、その次に料金が安く、かつ使用可能なキャパシティがあるプールからスポットインスタンスを取得します。目的のキャパシティを満たす前にプールのキャパシティが不足した場合、フリートはその次に料金が安いプールからキャパシティを引き出して、継続してリクエストを満たします。希望する容量を確実に満たすために、複数のプールからスポットインスタンスを受け取る場合があります。  
この戦略では、インスタンスの価格のみが考慮され、容量の可用性は考慮されないため、中断率が高くなる可能性があります。  
最低料金配分戦略は、AWS CLI を使用しているときにのみ利用できます。パラメータ名は EC2 フリートでは `lowest-price`、スポットフリートでは `lowestPrice` となります。

**使用するプールの数**  
ターゲットスポット容量を割り当てる先のスポットプールの数。配分戦略が**最低料金**に設定されている場合にのみ有効です。フリートは、最低料金のスポットプールを選択し、指定した数のスポットプールにターゲットスポットキャパシティを均等に割り当てます。  
その際、ベストエフォートに基づいて、指定したプール数からスポットインスタンスを引き出そうとします。ターゲットキャパシティを満たす前にプールのスポットキャパシティが不足した場合は、その次に料金が安いプールのキャパシティを利用して継続的にリクエストを満たします。ターゲット容量を確実に満たすために、スポットインスタンスが、指定した数を超えるプールから割り当てられることがあります。また、ほとんどのプールにスポット容量がない場合には、指定した数より少ないプールからターゲット容量のすべてが割り当てられることがあります。  
このパラメータは、**最低料金**配分戦略を指定し、AWS CLI を使用しているときにのみ利用できます。パラメータ名は、EC2 フリートでもスポットフリートでも `InstancePoolsToUseCount` となります。

## オンデマンドインスタンスの配分戦略
<a name="ec2-fleet-allocation-strategies-for-on-demand-instances"></a>

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

オンデマンドインスタンスには、以下のいずれかの配分戦略を指定できます。

**最低料金**  
オンデマンドインスタンスは、使用可能なキャパシティがある最低料金のプールから取得されます。これはデフォルトの戦略です。  
最低料金のプールに使用可能なキャパシティがない場合、その次に料金が安く、かつ使用可能なキャパシティがあるプールからオンデマンドインスタンスが取得されます。  
目的のキャパシティを満たす前にプールのキャパシティが不足した場合、フリートはその次に料金が安いプールからキャパシティを引き出して、継続してリクエストを満たします。目的のキャパシティを確実に満たすために、複数のプールからスポットインスタンスが取得される場合があります。

**優先順位付き**  
フリートは、各起動テンプレートのオーバーライドに割り当てられた優先順位に従って、まず優先順位が最も高いインスタンスタイプを起動します。この戦略は、属性ベースのインスタンスタイプの選択では使用できません。この配分戦略の使用方法の例については、「[オンデマンド容量に基づくインスタンスタイプの優先順位付け](#ec2-fleet-on-demand-priority)」を参照してください。

## 適切なスポット配分戦略を選択する
<a name="ec2-fleet-allocation-use-cases"></a>

適切なスポット割り当て戦略を選択することで、ユースケースに合わせてフリートを最適化できます。

### 最低価格と容量可用性のバランスをとる
<a name="ec2-fleet-strategy-balance-price-and-capacity-availability"></a>

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

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

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

**料金キャパシティ最適化**配分戦略を使用する JSON 設定の例については、以下を参照してください。
+ EC2 フリート - [例 10: price-capaity-optimized フリートでスポットインスタンスを起動する](ec2-fleet-examples.md#ec2-fleet-config11)
+ スポットフリート - [例 11: priceCapacityOptimized フリートでスポットインスタンスを起動する](spot-fleet-examples.md#fleet-config11)

### ワークロードの中断コストが高い場合
<a name="ec2-fleet-strategy-capacity-optimized"></a>

同様の料金のインスタンスタイプを使用するワークロードを実行する場合や、中断のコストが非常に高いために中断のわずかな増加に比べてコスト削減が不十分である場合は、必要に応じてこの**キャパシティ最適化**戦略を使用できます。この戦略では、中断の可能性がより低く、最も可用性の高いスポットキャパシティプールから容量を割り当てることで、ワークロードの総コストを削減することができます。

中断の可能性を最小限に抑える必要があるものの、特定のインスタンスタイプの優先順位が重要である場合は、**優先順位付きキャパシティ最適化**配分戦略を使用し、インスタンスタイプを優先順位の高い順に並べることでプールの優先順位を設定できます。

なお、**優先順位付きキャパシティ最適化**の優先順位を設定するとき、オンデマンド配分戦略が**優先順位付き**に設定されていると、同じ優先順位がオンデマンドインスタンスにも適用されます。また、スポットフリートの場合、優先順位を使用できるのはフリートが起動テンプレートを使用している場合に限られます。

**キャパシティ最適化**配分戦略を使用する JSON 設定の例については、以下を参照してください。
+ EC2 フリート - [例 8: 容量最適化フリートでスポットインスタンスを起動する](ec2-fleet-examples.md#ec2-fleet-config9)
+ スポットフリート - [例 9: 容量最適化フリートでスポットインスタンスを起動する](spot-fleet-examples.md#fleet-config9)

**優先順位付きキャパシティ最適化**配分戦略を使用する JSON 設定の例については、以下を参照してください。
+ EC2 フリート - [例 9: 優先順位のある容量最適化フリートでスポットインスタンスを起動する](ec2-fleet-examples.md#ec2-fleet-config10)
+ スポットフリート - [例 10: 優先順位のある容量最適化フリートでスポットインスタンスを起動する](spot-fleet-examples.md#fleet-config10)

### ワークロードに時間的な柔軟性があり、キャパシティの可用性が問題にならない場合
<a name="ec2-fleet-strategy-time-flexible-workload"></a>

フリートが小さい場合や実行時間が短い場合は、キャパシティの可用性を考慮しつつ、**料金キャパシティ最適化**を使用してコスト削減を最大化できます。

### フリートが大きい場合や長時間稼働している場合
<a name="ec2-fleet-strategy-large-workload-long-time"></a>

フリートが大きい場合や実行時間が長い場合は、**分散**戦略を使用して複数のプールにスポットインスタンスを分散させることで、フリートの可用性を改善できます。例えば、プール数を 10、ターゲットキャパシティを 100 インスタンスに指定した場合、フリートはプールごとに 10 個のスポットインスタンスを起動します。1 つのプールのスポット料金がこのプールの上限料金を超える場合、フリートの 10% のみに影響がおよびます。この戦略を使用すると、いずれのプールにおいても経時的にフリートが受けるスポット料金の上昇の影響を減少させます。**分散**戦略では、スポットフリートはスポット料金が[オンデマンド料金](https://aws.amazon.com/ec2/pricing/)以上のプールにあるスポットインスタンスを起動しません。

## スポットインスタンスのターゲットキャパシティを維持する
<a name="ec2-fleet-maintain-fleet-capacity"></a>

スポット料金やスポットキャパシティプールで使用可能なキャパシティが変動したためにスポットインスタンスが終了すると、タイプ `maintain` のフリートが代替スポットインスタンスを起動します。配分戦略によって、次のように置換先インスタンスを起動するプールが決まります。
+ 配分戦略が**料金キャパシティ最適化**の場合、フリートはスポットインスタンスキャパシティの可用性が最も高いプールで代替インスタンスを起動します。同時に料金も考慮し、料金が安くかつキャパシティの可用性が高いプールを特定します。
+ 配分戦略が**キャパシティ最適化**の場合、フリートはスポットインスタンスキャパシティの可用性が最も高いプールで代替インスタンスを起動します。
+ 配分戦略が**分散**の場合、フリートは残っているプール全体に代替スポットインスタンスを分散させます。

## オンデマンド容量に基づくインスタンスタイプの優先順位付け
<a name="ec2-fleet-on-demand-priority"></a>

EC2 フリートまたはスポットフリートがオンデマンドキャパシティを満たそうとする場合、デフォルトではまず料金が最も安いインスタンスタイプを起動します。オンデマンド配分戦略が**優先順位付き**の場合、フリートは優先順位に従って、オンデマンドキャパシティを満たす際に最初にどのインスタンスタイプを使用するかを決定します。優先度は起動テンプレートの上書きに割り当てられ、最も高い優先度が最初に起動されます。

**例: インスタンスタイプの優先付け**

例えば、3 つの起動テンプレートの上書きに、それぞれ異なるインスタンスタイプを設定したとします。

インスタンスタイプのオンデマンド料金は、幅があります。以下は、この例で使用しているインスタンスタイプで、料金の安いものから順に並んでいます。
+ `m4.large` — 最も安価
+ `m5.large`
+ `m5a.large`

優先度を使って順番を決めない場合、フリートは、最も価格が低いインスタンスタイプから始めてオンデマンドの容量を満たします。

ただし、最初に使用する `m5.large` リザーブドインスタンスが未使用である場合、次のように、インスタンスタイプが優先度順に使われるように、起動テンプレートの、上書きの優先度を設定できます。
+ `m5.large` – 優先度 1
+ `m4.large` – 優先度 2
+ `m5a.large` – 優先度 3