

# EC2 フリートまたはスポットフリートのインスタンスタイプを選択するための属性を指定する
<a name="ec2-fleet-attribute-based-instance-type-selection"></a>

EC2 フリートまたはスポットフリートを作成するときは、フリートのオンデマンドインスタンスとスポットインスタンスを設定するために、1 つ以上のインスタンスタイプを指定する必要があります。インスタンスタイプを手動で指定する代わりに、インスタンスが持つ必要がある属性を指定でき、Amazon EC2 は、それらの属性を持つすべてのインスタンスタイプを識別します。これは *属性ベースのインスタンスタイプの選択* と呼ばれます。例えば、インスタンスに必要な vCPU の最小数および最大数を指定できます。フリートは、これらの vCPU 要件を満たす使用可能なインスタンスタイプを使用してインスタンスを起動します。

属性ベースのインスタンスタイプの選択は、コンテナやウェブフリートの実行、ビッグデータの処理、継続的インテグレーションおよびデプロイ (CI/CD) ツールの実装など、使用するインスタンスタイプについて柔軟に使用できるワークロードとフレームワークに最適です。

**利点**

属性ベースのインスタンスタイプを選択すると、次の利点があります。
+ **適切なインスタンスタイプを簡単に使用** - 利用可能なインスタンスタイプの数が多いため、ワークロードに適したインスタンスタイプを見つけるには時間がかかることがあります。インスタンス属性を指定すると、インスタンスタイプにはワークロードに必要な属性が自動的に設定されます。
+ **設定の簡素化** - フリートに複数のインスタンスタイプを手動で指定するには、インスタンスタイプごとに個別の起動テンプレートのオーバーライドを作成する必要があります。ただし、属性ベースのインスタンスタイプを選択すると、複数のインスタンスタイプを提供するには、起動テンプレートまたは起動テンプレートの上書きでインスタンス属性を指定するだけで済みます。
+ **新しいインスタンスタイプを自動的に使用** - インスタンスタイプではなくインスタンス属性を指定すると、フリートではリリース時に新しい世代のインスタンスタイプを使用できます。これにより、フリートの設定の将来の対応性も確保されます。
+ **インスタンスタイプの柔軟性** - インスタンスタイプではなくインスタンス属性を指定すると、フリートはスポットインスタンスを起動するために幅広いインスタンスタイプから選択することができ、[インスタンスタイプの柔軟性というスポットのベストプラクティス](spot-best-practices.md#be-instance-type-flexible)に準拠することができます。

**Topics**
+ [属性ベースのインスタンスタイプ選択の仕組み](#ec2fleet-abs-how-it-works)
+ [料金保護](#ec2fleet-abs-price-protection)
+ [パフォーマンス保護](#ec2fleet-abis-performance-protection)
+ [考慮事項](#ec2fleet-abs-considerations)
+ [属性ベースのインスタンスタイプを選択した EC2 フリートを作成する](#abs-create-ec2-fleet)
+ [属性ベースのインスタンスタイプを選択してスポットフリートを作成する](#abs-create-spot-fleet)
+ [EC2 フリートの有効な設定と無効な設定の例](#ec2fleet-abs-example-configs)
+ [スポットフリートの有効な設定と無効な設定の例](#spotfleet-abs-example-configs)
+ [指定された属性でインスタンスタイプをプレビューする](#ec2fleet-get-instance-types-from-instance-requirements)

## 属性ベースのインスタンスタイプ選択の仕組み
<a name="ec2fleet-abs-how-it-works"></a>

フリート設定で属性ベースのインスタンスタイプの選択を使用するには、インスタンスタイプのリストをインスタンスが必要とするインスタンス属性のリストに置き換えます。EC2 フリートまたはスポットフリートは、指定されたインスタンス属性を持つ使用可能なインスタンスタイプでインスタンスを起動します。

**Topics**
+ [インスタンス属性のタイプ](#ef-abs-instance-attribute-types)
+ [属性ベースのインスタンスタイプの選択を設定する場所](#ef-abs-where-to-configure)
+ [フリートをプロビジョニングするときに、EC2 フリートまたはスポットフリートが属性ベースのインスタンスタイプの選択をどのように使用するか](#how-ef-uses-abs)

### インスタンス属性のタイプ
<a name="ef-abs-instance-attribute-types"></a>

コンピューティング要件を表現するために指定できるインスタンス属性はいくつかあります。
+ **vCPU 数** – インスタンスあたりの vCPU の最小数と最大数。
+ **メモリ** – インスタンスあたりのメモリの最小および最大 GiB。
+ **ローカルストレージ** – EBS ボリュームとインスタンスストアボリュームのどちらをローカルストレージに使用するか。
+ **バースト可能なパフォーマンス** – T4g、T3a、T3、および T2 タイプを含む T インスタンスファミリーを使用するかどうか。

各属性の説明およびデフォルト値については、「*Amazon EC2 API リファレンス*」の「[InstanceRequirements](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_InstanceRequirements.html)」を参照してください。

### 属性ベースのインスタンスタイプの選択を設定する場所
<a name="ef-abs-where-to-configure"></a>

コンソールと AWS CLI のどちらを使用するかによって、属性ベースのインスタンスタイプ選択のインスタンス属性を次のように指定できます。

コンソールでは、次のフリート設定コンポーネントでインスタンス属性を指定できます。
+ 起動テンプレートでフリートリクエストの起動テンプレートを参照する
+ (スポットフリートのみ) フリートリクエスト内

AWS CLI で、以下のフリート設定コンポーネントのいずれかまたはすべてでインスタンスの属性を指定することができます。
+ 起動テンプレートでフリートリクエストの起動テンプレートを参照する
+ 起動テンプレートの上書きで

  異なる AMI を使用するインスタンスを混在させたい場合は、複数の起動テンプレートの上書きでインスタンス属性を指定できます。例えば、異なるインスタンスタイプで x86 および ARM ベースのプロセッサを使用できます。
+ (スポットフリートのみ) 起動仕様内

### フリートをプロビジョニングするときに、EC2 フリートまたはスポットフリートが属性ベースのインスタンスタイプの選択をどのように使用するか
<a name="how-ef-uses-abs"></a>

EC2 フリートまたはスポットフリートは、以下の方法でフリートをプロビジョニングします。
+ これらのフリートは、指定された属性を持つインスタンスタイプを識別します。
+ また、料金保護を使用して、除外するインスタンスタイプを決定します。
+ インスタンスタイプが一致する AWS リージョンまたはアベイラビリティーゾーンに基づいて、インスタンスの起動を検討するキャパシティプールを決定します。
+ 指定された配分戦略を適用して、インスタンスを起動するキャパシティプールを決定します。

  属性ベースのインスタンスタイプの選択では、フリートをプロビジョニングするキャパシティプールは選択されません。これは、[配分戦略](ec2-fleet-allocation-strategy.md)のジョブです。

  配分戦略を指定すると、フリートは指定された配分戦略に従ってインスタンスを起動します。
  + スポットインスタンスの場合、属性ベースのインスタンスタイプの選択では**料金キャパシティ最適化**、**キャパシティ最適化**、**最低料金**の各配分戦略がサポートされます。ただし、**最低料金**スポット配分戦略は、スポットインスタンスの中断リスクが最も高いため、推奨されないことに注意してください。
  + オンデマンドインスタンスの場合、属性ベースのインスタンスタイプの選択では**最低料金**配分戦略がサポートされます。
+ 指定されたインスタンス属性を持つインスタンスタイプの容量がない場合、インスタンスは起動できず、フリートはエラーを返します。

## 料金保護
<a name="ec2fleet-abs-price-protection"></a>

料金保護とは、EC2 フリートまたはスポットフリートが指定した属性に適合した場合でも、コストが高すぎると見なされたインスタンスタイプは利用できないようにする機能です。料金保護を使用するには、料金のしきい値を設定します。Amazon EC2 が属性を持つインスタンスタイプを選択すると、しきい値を超える料金が設定されたインスタンスタイプは除外されます。

Amazon EC2 が料金のしきい値を計算する方法は、次のとおりです。
+ Amazon EC2 はまず、属性に一致するものから最低料金のインスタンスタイプを識別します。
+ Amazon EC2 は、料金保護パラメータに指定した値 (パーセンテージで表される) を受け取り、識別されたインスタンスタイプの料金でそれを乗算します。その結果、料金しきい値として使用される料金になります。

オンデマンドインスタンスとスポットインスタンスには個別の料金しきい値があります。

属性ベースのインスタンスタイプを選択してフリートを作成すると、料金保護がデフォルトで有効になります。デフォルト値のままにすることも、独自の値を指定することもできます。

料金保護をオフにすることもできます。料金保護のしきい値を指定しない場合は、`999999` などの高いパーセンテージ値を指定します。

**Topics**
+ [最低料金のインスタンスタイプを特定する方法](#ec2fleet-abs-price-protection-lowest-priced)
+ [オンデマンドインスタンスの料金保護](#ec2fleet-abs-on-demand-price-protection)
+ [スポットインスタンスの料金保護](#ec2fleet-abs-spot-price-protection)
+ [料金保護のしきい値を指定する](#ec2fleet-abs-specify-price-protection)

### 最低料金のインスタンスタイプを特定する方法
<a name="ec2fleet-abs-price-protection-lowest-priced"></a>

Amazon EC2 は、指定した属性に一致するものから最低料金のインスタンスタイプを特定することで、料金のしきい値に基づく料金を決定します。これは、次の方法で行います。
+ まず、属性に一致する現行世代の C、M、または R インスタンスタイプを調べます。一致するものがある場合は、最低料金のインスタンスタイプを特定します。
+ 一致するものがない場合は、属性に一致する現行世代のインスタンスタイプを調べます。一致するものがある場合は、最低料金のインスタンスタイプを特定します。
+ 一致するものがない場合は、属性に一致する以前の世代のインスタンスタイプを調べ、最低料金のインスタンスタイプを特定します。

### オンデマンドインスタンスの料金保護
<a name="ec2fleet-abs-on-demand-price-protection"></a>

オンデマンドインスタンスタイプの料金保護のしきい値は、特定された最低料金のオンデマンドインスタンスタイプ `OnDemandMaxPricePercentageOverLowestPrice`よりも高いパーセンテージで計算されます。支払い可能なパーセンテージを高く指定します。このパラメータを指定しない場合は、デフォルト値の `20` を使用して、識別された料金よりも 20% 高い料金保護しきい値が計算されます。

例えば、特定されたオンデマンドインスタンスの料金が `0.4271` で、`25` を指定した場合、料金のしきい値は `0.4271` より 25% 高くなります。これは、次のように計算されます: `0.4271 * 1.25 = 0.533875`。計算された料金は、オンデマンドインスタンスに対して支払うことができる最大額であり、この例では、Amazon EC2 は `0.533875` を超えるコストがかかるオンデマンドインスタンスタイプを除外します。

### スポットインスタンスの料金保護
<a name="ec2fleet-abs-spot-price-protection"></a>

デフォルトでは、Amazon EC2 は最適なスポットインスタンス料金保護を自動的に適用し、幅広いインスタンスタイプから一貫して選択してください。料金保護を手動で設定することもできます。ただし、Amazon EC2 に任せることで、スポット容量が満たされる可能性を高めることができます。

料金保護は、次のいずれかのオプションを使用して手動で指定できます。料金保護を手動で設定する場合は、最初のオプションを使用することをお勧めします。
+ **特定された最低料金のオンデマンドインスタンスタイプ `MaxSpotPriceAsPercentageOfOptimalOnDemandPrice`のパーセンテージ**

  例えば、特定されたオンデマンドインスタンスタイプの料金が `0.4271` で、`60` を指定した場合、料金のしきい値は `0.4271` の 60% になります。これは、次のように計算されます: `0.4271 * 0.60 = 0.25626`。計算された料金は、スポットインスタンスに対して支払うことができる最大額であり、この例では、Amazon EC2 は `0.25626` を超えるコストがかかるスポットインスタンスタイプを除外します。
+ **特定された最低料金のスポットインスタンスタイプ `SpotMaxPricePercentageOverLowestPrice`よりも高いパーセンテージ**

  例えば、特定されたスポットインスタンスタイプの料金が `0.1808` で、`25` を指定した場合、料金のしきい値は `0.1808` より 25% 高くなります。これは、次のように計算されます: `0.1808 * 1.25 = 0.226`。計算された料金は、スポットインスタンスに対して支払うことができる最大額であり、この例では、Amazon EC2 は `0.266` を超えるコストがかかるスポットインスタンスタイプを除外します。スポット料金が変動する可能性があり、料金保護のしきい値も変動する可能性があるため、このパラメータの使用はお勧めしません。

### 料金保護のしきい値を指定する
<a name="ec2fleet-abs-specify-price-protection"></a>

**AWS CLI を使用して料金保護のしきい値を指定するには**

AWS CLI を使用して EC2 フリートまたはスポットフリートを作成するときに、属性ベースのインスタンスタイプの選択が使用されるようにフリートを設定してから、次の手順を実行します。
+ オンデマンドインスタンスの料金保護のしきい値を指定するには、JSON 設定ファイルの `InstanceRequirements` 構造の `OnDemandMaxPricePercentageOverLowestPrice` で、料金保護のしきい値をパーセンテージ (%) で入力してください。
+ スポットインスタンスの料金保護のしきい値を指定するには、JSON 設定ファイルの `InstanceRequirements` 構造で、次のいずれかのパラメータを指定します。
  + `MaxSpotPriceAsPercentageOfOptimalOnDemandPrice` で、料金保護のしきい値をパーセンテージ (%) で入力してください。
  + `SpotMaxPricePercentageOverLowestPrice` で、料金保護のしきい値をパーセンテージ (%) で入力してください。

詳細については「[属性ベースのインスタンスタイプを選択した EC2 フリートを作成する](#abs-create-ec2-fleet)」または「[属性ベースのインスタンスタイプを選択してスポットフリートを作成する](#abs-create-spot-fleet)」を参照してください。

**(スポットフリートのみ) コンソールを使用して料金保護のしきい値を指定するには**

コンソールでスポットフリートを作成するときに、属性ベースのインスタンスタイプの選択が使用されるようにフリートを設定してから、次の手順を実行します。
+ オンデマンドインスタンスの料金保護のしきい値を指定するには、**[追加のインスタンス属性]** で、**[オンデマンド料金の保護]**、**[属性を追加]** を選択してから、料金保護のしきい値をパーセンテージで入力してください。
+ スポットインスタンスの料金保護のしきい値を指定するには、**[追加のインスタンス属性]** で、**[スポット料金の保護]**、**[属性を追加]** を選択し、料金のベースとなる基準値を選択してから、料金保護のしきい値をパーセンテージで入力してください。

**注記**  
フリートを作成するときに、`TargetCapacityUnitType` を `vcpu` または `memory-mib` に設定すると、インスタンスごとの料金ではなく、vCPU ごとまたはメモリごとの料金に基づいて料金保護のしきい値が適用されます。

## パフォーマンス保護
<a name="ec2fleet-abis-performance-protection"></a>

*パフォーマンス保護*は、EC2 フリートまたはスポットフリートが指定されたパフォーマンスベースラインと同等以上のインスタンスタイプを使用できるようにする機能です。パフォーマンス保護を使用するには、ベースラインリファレンスとしてインスタンスファミリーを指定します。指定されたインスタンスファミリーの機能は、許容される最低レベルのパフォーマンスを確立します。Amazon EC2 がフリートのインスタンスタイプを選択すると、指定した属性およびパフォーマンスベースラインが考慮されます。パフォーマンスベースラインを下回るインスタンスタイプは、他の指定された属性と一致しても、自動的に選択から除外されます。選択したすべてのインスタンスタイプが、指定されたインスタンスファミリーによって確立されたベースラインと同等以上のパフォーマンスを提供できるようにします。Amazon EC2 はこのベースラインを使用してインスタンスタイプの選択をガイドしますが、選択したインスタンスタイプがすべてのアプリケーションのベースラインを常に上回る保証はありません。

現在、この機能はベースラインパフォーマンス係数として CPU パフォーマンスのみをサポートしています。指定されたインスタンスファミリーの CPU プロセッサの CPU パフォーマンスがパフォーマンスベースラインとして使用され、選択したインスタンスタイプがこのベースラインと同等以上であるようにします。同じ CPU プロセッサを持つインスタンスファミリーは、ネットワークまたはディスクのパフォーマンスが異なっても、同じフィルタリング結果になります。例えば、ベースラインリファレンスとして `c6in` または `c6i` を指定すると、両方のインスタンスファミリーが同じ CPU プロセッサを使用するため、パフォーマンスベースのフィルタリング結果が同じになります。

**サポートされていないインスタンスファミリー**  
次のインスタンスファミリーは、パフォーマンス保護では**サポートされていません**。
+ **汎用:** Mac1 \$1 Mac2 \$1 Mac2-m1ultra \$1 Mac2-m2 \$1 Mac2-m2pro \$1 M1 \$1 M2 \$1 T1
+ **コンピューティングの最適化:** C1
+ **メモリ最適化:** U-3tb1 \$1 U-6tb1 \$1 U-9tb1 \$1 U-12tb1 \$1 U-18tb1 \$1 u-24tb1 \$1 U7i-12tb \$1 U7in-16tb \$1 U7in-24tb \$1 U7in-32tb
+ **高速コンピューティング:** G3 \$1 G3s \$1 P3dn \$1 P4d \$1 P5
+ **ハイパフォーマンスコンピューティング:** Hpc7g

サポートされているインスタンスファミリーを指定してパフォーマンス保護を有効にした場合、返されるインスタンスタイプは上記のサポートされていないインスタンスファミリーを除外します。

サポートされていないインスタンスファミリーをベースラインパフォーマンスの値として指定した場合、API は [GetInstanceTypesFromInstanceRequirements](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements.html) に空のレスポンスを返し、[CreateFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html)、[RequestSpotFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotFleet.html)、[ModifyFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyFleet.html)、[ModifySpotFleetRequest](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifySpotFleetRequest.html) に例外を返します。

**例: CPU パフォーマンスベースラインの設定**  
次の例では、インスタンス要件は、`c6i` インスタンスファミリーと同等のパフォーマンスの CPU コアを持つインスタンスタイプで起動することです。性能が下回る CPU プロセッサーが指定した他のインスタンス要件 (vCPU 数など) を満たしても、その CPU プロセッサーを持つインスタンスタイプを除外します。例えば、指定したインスタンス属性に 4 つの vCPUs および 16 GB のメモリが含まれている場合、これらの属性を持っても `c6i` より CPU パフォーマンスが低いインスタンスタイプは選択から除外されます。

```
"BaselinePerformanceFactors": {
        "Cpu": {
            "References": [
                {
                    "InstanceFamily": "c6i"
                }
            ]
        }
```

## 考慮事項
<a name="ec2fleet-abs-considerations"></a>
+ EC2 フリートまたはスポットフリートでは、インスタンスタイプまたはインスタンス属性のいずれかを指定できますが、両方を同時に指定することはできません。

  CLI を使用する場合、起動テンプレートの上書きによって起動テンプレートが上書きされます。例えば、起動テンプレートにインスタンスタイプが含まれ、起動テンプレートの上書きにインスタンス属性が含まれている場合、インスタンス属性によって識別されるインスタンスは、起動テンプレートのインスタンスタイプを上書きします。
+ CLI を使用していて、インスタンス属性の上書きを指定する場合、重みまたは優先順位も指定できません。
+ リクエスト設定では、最大 4 つの `InstanceRequirements` 構造を指定できます。

## 属性ベースのインスタンスタイプを選択した EC2 フリートを作成する
<a name="abs-create-ec2-fleet"></a>

属性ベースのインスタンスタイプの選択が使用されるように EC2 フリートを設定できます。Amazon EC2 コンソールを使用して EC2 フリートを作成することはできません。

属性に基づくインスタンスタイプ選択のための属性は、`InstanceRequirements` 構造で指定されます。`InstanceRequirements` がフリート設定に含まれる場合、`InstanceType` と `WeightedCapacity` は除外しなければならず、インスタンス属性と同時にフリート設定を決定することはできません。

AWS CLI および PowerShell の例では、次の属性が指定されています。
+ `VCpuCount` – 最小 2 つの vCPU と最大 4 つの vCPU。最大制限が必要ない場合は、最大値を省略できます。
+ `MemoryMiB` – 最小 8 GiB のメモリと最大 16 GiB のメモリ。最大制限が必要ない場合は、最大値を省略できます。

この設定では、2～4 個の vCPU と 8～16 GiB のメモリを持つインスタンスタイプが識別されます。ただし、[EC2 フリートがフリートをプロビジョニングする](#how-ef-uses-abs)場合、価格保護と配分戦略によって一部のインスタンスタイプが除外される場合があります。

------
#### [ AWS CLI ]

**属性ベースのインスタンスタイプ選択を使用する EC2 フリートを作成するには**  
[create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html) コマンドを使用して、EC2 フリートを作成します。JSON ファイルでフリート設定を指定します。

```
aws ec2 create-fleet \
    --region us-east-1 \
    --cli-input-json file://file_name.json
```

次の例の `file_name.json` ファイルには、属性ベースのインスタンスタイプ選択を使用するように EC2 フリートを設定するパラメータが含まれています。

```
{
    "SpotOptions": {
        "AllocationStrategy": "price-capacity-optimized"
    },
    "LaunchTemplateConfigs": [{
        "LaunchTemplateSpecification": {
            "LaunchTemplateName": "my-launch-template",
            "Version": "1"
        },
        "Overrides": [{
            "InstanceRequirements": {
                "VCpuCount": {
                    "Min": 2,
                    "Max": 4
                },
                "MemoryMiB": {
                    "Min": 8192,
                    "Max": 16384
                }
            }
        }]
    }],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 20,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

------
#### [ PowerShell ]

**属性ベースのインスタンスタイプ選択を使用する EC2 フリートを作成するには**  
[New-EC2Fleet](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Fleet.html) コマンドレットを使用します。

```
$vcpuCount = New-Object Amazon.EC2.Model.VCpuCountRangeRequest
$vcpuCount.Min = 2 
$vcpuCount.Max = 4  
$memoryMiB = New-Object Amazon.EC2.Model.MemoryMiBRequest
$memoryMiB.Min = 8192  
$memoryMiB.Max = 16384  
$instanceRequirements = New-Object Amazon.EC2.Model.InstanceRequirementsRequest
$instanceRequirements.VCpuCount = $vcpuCount
$instanceRequirements.MemoryMiB = $memoryMiB

$launchTemplateSpec = New-Object Amazon.EC2.Model.FleetLaunchTemplateSpecificationRequest
$launchTemplateSpec.LaunchTemplateName = "my-launch-template" 
$launchTemplateSpec.Version = "1"
$override = New-Object Amazon.EC2.Model.FleetLaunchTemplateOverridesRequest
$override.InstanceRequirements = $instanceRequirements
$launchTemplateConfig = New-Object Amazon.EC2.Model.FleetLaunchTemplateConfigRequest
$launchTemplateConfig.LaunchTemplateSpecification = $launchTemplateSpec
$launchTemplateConfig.Overrides = @($override)

New-EC2Fleet `
    -SpotOptions_AllocationStrategy "price-capacity-optimized" `
    -LaunchTemplateConfig @($launchTemplateConfig) `
    -TargetCapacitySpecification_DefaultTargetCapacityType "spot" `
    -TargetCapacitySpecification_TotalTargetCapacity 20 `
    -Type "instant"
```

------

## 属性ベースのインスタンスタイプを選択してスポットフリートを作成する
<a name="abs-create-spot-fleet"></a>

属性ベースのインスタンスタイプの選択が使用されるようにフリートを設定できます。

属性に基づくインスタンスタイプ選択のための属性は、`InstanceRequirements` 構造で指定されます。`InstanceRequirements` がフリート設定に含まれる場合、`InstanceType` と `WeightedCapacity` は除外しなければならず、インスタンス属性と同時にフリート設定を決定することはできません。

AWS CLI および PowerShell の例では、次の属性が指定されています。
+ `VCpuCount` – 最小 2 つの vCPU と最大 4 つの vCPU。最大制限が必要ない場合は、最大値を省略できます。
+ `MemoryMiB` – 最小 8 GiB のメモリと最大 16 GiB のメモリ。最大制限が必要ない場合は、最大値を省略できます。

この設定では、2～4 個の vCPU と 8～16 GiB のメモリを持つインスタンスタイプが識別されます。ただし、[スポットフリートがフリートをプロビジョニングする](#how-ef-uses-abs)場合、価格保護と配分戦略によって一部のインスタンスタイプが除外される場合があります。

------
#### [ Console ]

**属性ベースのインスタンスタイプの選択のためにスポットフリートを設定するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで、**[Spot Requests]** (スポットリクエスト) を選択した後、**[Request Spot Instances]** (スポットインスタンスのリクエスト) を選択してください。

1. 手順に従ってスポットフリートを作成します。詳細については、「[定義済みパラメータを使用してスポットフリートリクエストを作成する](create-spot-fleet.md#create-spot-fleet-advanced)」を参照してください。

   スポットフリートを作成するときに、属性ベースのインスタンスタイプ選択にフリートを次のように設定します。

   1. **[Instance type requirements]** (インスタンスタイプの要件) では、**[Specify instance attributes that match your compute requirements]** (コンピューティング要件に一致するインスタンス属性を指定する) を選択してください。

   1. **[vCPUs]** に、希望する vCPU の最小数と最大数を入力してください。制限なしを指定するには、**[No minimum]** (最小値なし)、**[No maximum]** (最大値なし)、または両方を選択してください。

   1. **[Memory (GiB)]** (メモリ (GiB)) に、希望する最小値と最大値を入力してください。制限なしを指定するには、**[No minimum]** (最小値なし)、**[No maximum]** (最大値なし)、または両方を選択してください。

   1. (オプション) **[Additional instance attributes]** (その他のインスタンス属性) では、オプションで 1 つ以上の属性を指定して、コンピューティング要件をより詳細に表現できます。追加の属性は、リクエストにさらに制約を追加します。

   1. (オプション) **[Preview matching instance types]** (一致するインスタンスタイプをプレビューする) を展開して、指定した属性を持つインスタンスタイプを表示します。

------
#### [ AWS CLI ]

**属性ベースのインスタンスタイプの選択のためにスポットフリートを設定するには**  
スポットフリートリクエストを作成するには、 [request-spot-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/request-spot-fleet.html) マンドを使用します。JSON ファイルでフリート設定を指定します。

```
aws ec2 request-spot-fleet \
    --region us-east-1 \
    --spot-fleet-request-config file://file_name.json
```

次の例の `file_name.json` ファイルには、属性ベースのインスタンスタイプ選択を使用するようにスポットフリートを設定するパラメータが含まれています。

```
{
    "AllocationStrategy": "priceCapacityOptimized",
    "TargetCapacity": 20,
    "Type": "request",
    "LaunchTemplateConfigs": [{
        "LaunchTemplateSpecification": {
            "LaunchTemplateName": "my-launch-template",
            "Version": "1"
        },
        "Overrides": [{
            "InstanceRequirements": {
                "VCpuCount": {
                    "Min": 2,
                    "Max": 4
                },
                "MemoryMiB": {
                    "Min": 8192,
                    "Max": 16384
                }
            }
        }]
    }]
}
```

------
#### [ PowerShell ]

**属性ベースのインスタンスタイプの選択のためにスポットフリートを設定するには**  
[Request-EC2SpotFleet](https://docs.aws.amazon.com/powershell/latest/reference/items/Request-EC2SpotFleet.html) コマンドレットを使用します。

```
$vcpuCount = New-Object Amazon.EC2.Model.VCpuCountRange
$vcpuCount.Min = 2 
$vcpuCount.Max = 4  
$memoryMiB = New-Object Amazon.EC2.Model.MemoryMiB
$memoryMiB.Min = 8192  
$memoryMiB.Max = 16384  
$instanceRequirements = New-Object Amazon.EC2.Model.InstanceRequirements
$instanceRequirements.VCpuCount = $vcpuCount
$instanceRequirements.MemoryMiB = $memoryMiB

$launchTemplateSpec = New-Object Amazon.EC2.Model.FleetLaunchTemplateSpecification
$launchTemplateSpec.LaunchTemplateName = "my-launch-template" 
$launchTemplateSpec.Version = "1"
$override = New-Object Amazon.EC2.Model.LaunchTemplateOverrides
$override.InstanceRequirements = $instanceRequirements
$launchTemplateConfig = New-Object Amazon.EC2.Model.LaunchTemplateConfig
$launchTemplateConfig.LaunchTemplateSpecification = $launchTemplateSpec
$launchTemplateConfig.Overrides = @($override)

Request-EC2SpotFleet `
    -SpotFleetRequestConfig_AllocationStrategy "PriceCapacityOptimized" `
    -SpotFleetRequestConfig_TargetCapacity 20 `
    -SpotFleetRequestConfig_Type "Request" `
    -SpotFleetRequestConfig_LaunchTemplateConfig $launchTemplateConfig
```

------

## EC2 フリートの有効な設定と無効な設定の例
<a name="ec2fleet-abs-example-configs"></a>

AWS CLI を使用して EC2 フリートを作成する場合は、フリートの設定が有効であることを確認する必要があります。次の例は、有効な設定と無効な設定を示しています。

次のものが含まれている場合、設定は無効と見なされます。
+ `InstanceRequirements` および `InstanceType` を持つ 1 つの `Overrides` 構造
+ 一つは `InstanceRequirements`、もう一つは `InstanceType` を持つ 2 つの `Overrides` 構造
+ 同じ `LaunchTemplateSpecification` 内で属性値が重複している 2 つの `InstanceRequirements` 構造

**Topics**
+ [有効な設定: 上書きを含む単一の起動テンプレート](#ef-abs-example-config1)
+ [有効な設定: 複数のインスタンス要件を持つ単一の起動テンプレート](#ef-abs-example-config2)
+ [有効な設定: 2 つの起動テンプレート、それぞれに上書きがある](#ef-abs-example-config3)
+ [有効な設定: `InstanceRequirements` のみ指定され、重複する属性値なし](#ef-abs-example-config4)
+ [設定が無効です: `Overrides` が `InstanceRequirements` および `InstanceType` を含んでいる](#ef-abs-example-config5)
+ [設定が無効です: 2 つの `Overrides` に `InstanceRequirements` および `InstanceType` が含まれている](#ef-abs-example-config6)
+ [設定が無効です: 重複する属性値](#ef-abs-example-config7)

### 有効な設定: 上書きを含む単一の起動テンプレート
<a name="ef-abs-example-config1"></a>

以下の設定は有効です。これには、1 つの起動テンプレートと、`InstanceRequirements` 構造を含む 1 つの `Overrides` が含まれています。以下に、構成例をテキストで説明します。

```
{
        "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateName": "My-launch-template",
                "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 2,
                            "Max": 8
                        },
                        "MemoryMib": {
                            "Min": 0,
                            "Max": 10240
                        },
                        "MemoryGiBPerVCpu": {
                            "Max": 10000
                        },
                        "RequireHibernateSupport": true
                    }
                }
            ]
        }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 5000,
        "DefaultTargetCapacityType": "spot",
        "TargetCapacityUnitType": "vcpu"
        }
    }
}
```

****`InstanceRequirements`****  
属性ベースのインスタンス選択を使用するには、フリート設定に `InstanceRequirements` 構造を含め、フリート内のインスタンスに必要な属性を指定する必要があります。

前の例に、以下のインスタンス属性が指定されています。
+ `VCpuCount` - インスタンスタイプには、2 個以上、最大 8 個の vCPU が必要です。
+ `MemoryMiB` - インスタンスタイプには最大 10,240 MiB のメモリが必要です。最小数が 0 の場合、最小制限がないことを示します。
+ `MemoryGiBPerVCpu` - インスタンスタイプには、vCPU あたり最大 10,000 GiB のメモリが必要です。`Min` パラメータはオプションです。省略すると、最小制限がないことを示します。

**`TargetCapacityUnitType`**  
`TargetCapacityUnitType` パラメータは、ターゲット容量の単位を指定します。この例では、ターゲット容量は `5000` であり、ターゲット容量ユニットタイプは `vcpu` で、これを組み合わせて 5,000 vCPU の希望するターゲット容量を指定します。EC2 フリートは、フリート内の vCPU の総数が 5,000 vCPU になるように、十分なインスタンスを起動します。

### 有効な設定: 複数のインスタンス要件を持つ単一の起動テンプレート
<a name="ef-abs-example-config2"></a>

以下の設定は有効です。これには、1 つの起動テンプレートと、`InstanceRequirements` 構造を含む 2 つの `Overrides` が含まれています。`InstanceRequirements` で指定された属性は、値が重複していないため有効です。最初の `InstanceRequirements` 構造は `VCpuCount` の 0～2 vCPU を指定し、2 つ目の `InstanceRequirements` 構造は 4～8 vCPU を指定しています。

```
{
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                },
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 4,
                            "Max": 8
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            }
        ],
        "TargetCapacitySpecification": {
            "TotalTargetCapacity": 1,
            "DefaultTargetCapacityType": "spot"
        }
    }
}
```

### 有効な設定: 2 つの起動テンプレート、それぞれに上書きがある
<a name="ef-abs-example-config3"></a>

以下の設定は有効です。これには 2 つの起動テンプレートが含まれ、各起動テンプレートには 1 つの `InstanceRequirements` 構造を含む `Overrides` 構造が 1 つ含まれています。この設定は、同じフリートで `arm` と `x86` のアーキテクチャをサポートする場合に有効です。

```
{
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "armLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                },
                {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "x86LaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            }
        ],
         "TargetCapacitySpecification": {
            "TotalTargetCapacity": 1,
            "DefaultTargetCapacityType": "spot"
        }
    }
}
```

### 有効な設定: `InstanceRequirements` のみ指定され、重複する属性値なし
<a name="ef-abs-example-config4"></a>

以下の設定は有効です。2 つの `LaunchTemplateSpecification` 構造が含まれ、各構造にぞれぞれ起動テンプレートと、`Overrides` 構造を含む `InstanceRequirements` 構造が含まれています。`InstanceRequirements` で指定された属性は、値が重複していないため有効です。最初の `InstanceRequirements` 構造は `VCpuCount` の 0～2 vCPU を指定し、2 つ目の `InstanceRequirements` 構造は 4～8 vCPU を指定しています。

```
{
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            },
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyOtherLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 4,
                            "Max": 8
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            }
        ],
        "TargetCapacitySpecification": {
            "TotalTargetCapacity": 1,
            "DefaultTargetCapacityType": "spot"
        }
    }
}
```

### 設定が無効です: `Overrides` が `InstanceRequirements` および `InstanceType` を含んでいる
<a name="ef-abs-example-config5"></a>

以下は設定が有効ではありません。`Overrides` 構造体には `InstanceRequirements` および `InstanceType` が両方含まれています。`Overrides` では、`InstanceRequirements` または `InstanceType` のどちらかを指定できますが、両方は指定できません。

```
{
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                },
                {
                    "InstanceType": "m5.large"
                }
              ]
            }
        ],
        "TargetCapacitySpecification": {
            "TotalTargetCapacity": 1,
            "DefaultTargetCapacityType": "spot"
        }
    }
}
```

### 設定が無効です: 2 つの `Overrides` に `InstanceRequirements` および `InstanceType` が含まれている
<a name="ef-abs-example-config6"></a>

以下は設定が有効ではありません。`Overrides` 構造に `InstanceRequirements` および `InstanceType` が両方含まれています。異なる `Overrides` 構造にある場合、`InstanceRequirements` または `InstanceType` を指定できますが、両方を指定することはできません。

```
{
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            },
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyOtherLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceType": "m5.large"
                }
              ]
            }
        ],
         "TargetCapacitySpecification": {
            "TotalTargetCapacity": 1,
            "DefaultTargetCapacityType": "spot"
        }
    }
}
```

### 設定が無効です: 重複する属性値
<a name="ef-abs-example-config7"></a>

以下は設定が有効ではありません。2 つの `InstanceRequirements` 構造がそれぞれ `"VCpuCount": {"Min": 0, "Max": 2}` を含んでいます。これらの属性の値が重複するため、容量プールが重複します。

```
{
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    },
                    {
                      "InstanceRequirements": {
                          "VCpuCount": {
                              "Min": 0,
                              "Max": 2
                          },
                          "MemoryMiB": {
                              "Min": 0
                          }
                      }
                  }
                }
              ]
            }
        ],
         "TargetCapacitySpecification": {
            "TotalTargetCapacity": 1,
            "DefaultTargetCapacityType": "spot"
        }
    }
}
```

## スポットフリートの有効な設定と無効な設定の例
<a name="spotfleet-abs-example-configs"></a>

AWS CLI を使用してスポットフリートを作成する場合は、フリート設定が有効であることを確認する必要があります。次の例は、有効な設定と無効な設定を示しています。

次のものが含まれている場合、設定は無効と見なされます。
+ `InstanceRequirements` および `InstanceType` を持つ 1 つの `Overrides` 構造
+ 一つは `InstanceRequirements`、もう一つは `InstanceType` を持つ 2 つの `Overrides` 構造
+ 同じ `LaunchTemplateSpecification` 内で属性値が重複している 2 つの `InstanceRequirements` 構造

**Topics**
+ [有効な設定: 上書きを含む単一の起動テンプレート](#sf-abs-example-config1)
+ [有効な設定: 複数のインスタンス要件を持つ単一の起動テンプレート](#sf-abs-example-config2)
+ [有効な設定: 2 つの起動テンプレート、それぞれに上書きがある](#sf-abs-example-config3)
+ [有効な設定: `InstanceRequirements` のみ指定され、重複する属性値なし](#sf-abs-example-config4)
+ [設定が無効です: `Overrides` が `InstanceRequirements` および `InstanceType` を含んでいる](#sf-abs-example-config5)
+ [設定が無効です: 2 つの `Overrides` に `InstanceRequirements` および `InstanceType` が含まれている](#sf-abs-example-config6)
+ [設定が無効です: 重複する属性値](#sf-abs-example-config7)

### 有効な設定: 上書きを含む単一の起動テンプレート
<a name="sf-abs-example-config1"></a>

以下の設定は有効です。これには、1 つの起動テンプレートと、`InstanceRequirements` 構造を含む 1 つの `Overrides` が含まれています。以下に、構成例をテキストで説明します。

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "priceCapacityOptimized",
        "ExcessCapacityTerminationPolicy": "default",
        "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateName": "My-launch-template",
                "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 2,
                            "Max": 8
                        },
                        "MemoryMib": {
                            "Min": 0,
                            "Max": 10240
                        },
                        "MemoryGiBPerVCpu": {
                            "Max": 10000
                        },
                        "RequireHibernateSupport": true
                    }
                }
            ]
        }
    ],
        "TargetCapacity": 5000,
            "OnDemandTargetCapacity": 0,
            "TargetCapacityUnitType": "vcpu"
    }
}
```

****`InstanceRequirements`****  
属性ベースのインスタンス選択を使用するには、フリート設定に `InstanceRequirements` 構造を含め、フリート内のインスタンスに必要な属性を指定する必要があります。

前の例に、以下のインスタンス属性が指定されています。
+ `VCpuCount` - インスタンスタイプには、2 個以上、最大 8 個の vCPU が必要です。
+ `MemoryMiB` - インスタンスタイプには最大 10,240 MiB のメモリが必要です。最小数が 0 の場合、最小制限がないことを示します。
+ `MemoryGiBPerVCpu` - インスタンスタイプには、vCPU あたり最大 10,000 GiB のメモリが必要です。`Min` パラメータはオプションです。省略すると、最小制限がないことを示します。

**`TargetCapacityUnitType`**  
`TargetCapacityUnitType` パラメータは、ターゲット容量の単位を指定します。この例では、ターゲット容量は `5000` であり、ターゲット容量ユニットタイプは `vcpu` で、これを組み合わせて 5,000 vCPU の希望するターゲット容量を指定します。スポットフリートは、フリート内の vCPU の総数が 5,000 vCPU になるように、十分なインスタンスを起動します。

### 有効な設定: 複数のインスタンス要件を持つ単一の起動テンプレート
<a name="sf-abs-example-config2"></a>

以下の設定は有効です。これには、1 つの起動テンプレートと、`InstanceRequirements` 構造を含む 2 つの `Overrides` が含まれています。`InstanceRequirements` で指定された属性は、値が重複していないため有効です。最初の `InstanceRequirements` 構造は `VCpuCount` の 0～2 vCPU を指定し、2 つ目の `InstanceRequirements` 構造は 4～8 vCPU を指定しています。

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "priceCapacityOptimized",
        "ExcessCapacityTerminationPolicy": "default",
        "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                },
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 4,
                            "Max": 8
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            }
        ],
        "TargetCapacity": 1,
        "OnDemandTargetCapacity": 0,
        "Type": "maintain"
    }
}
```

### 有効な設定: 2 つの起動テンプレート、それぞれに上書きがある
<a name="sf-abs-example-config3"></a>

以下の設定は有効です。これには 2 つの起動テンプレートが含まれ、各起動テンプレートには 1 つの `InstanceRequirements` 構造を含む `Overrides` 構造が 1 つ含まれています。この設定は、同じフリートで `arm` と `x86` のアーキテクチャをサポートする場合に有効です。

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "priceCapacityOptimized",
        "ExcessCapacityTerminationPolicy": "default",
        "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "armLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                },
                {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "x86LaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            }
        ],
        "TargetCapacity": 1,
        "OnDemandTargetCapacity": 0,
        "Type": "maintain"
    }
}
```

### 有効な設定: `InstanceRequirements` のみ指定され、重複する属性値なし
<a name="sf-abs-example-config4"></a>

以下の設定は有効です。2 つの `LaunchTemplateSpecification` 構造が含まれ、各構造にぞれぞれ起動テンプレートと、`Overrides` 構造を含む `InstanceRequirements` 構造が含まれています。`InstanceRequirements` で指定された属性は、値が重複していないため有効です。最初の `InstanceRequirements` 構造は `VCpuCount` の 0～2 vCPU を指定し、2 つ目の `InstanceRequirements` 構造は 4～8 vCPU を指定しています。

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "priceCapacityOptimized",
        "ExcessCapacityTerminationPolicy": "default",
        "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            },
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyOtherLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 4,
                            "Max": 8
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            }
        ],
        "TargetCapacity": 1,
        "OnDemandTargetCapacity": 0,
        "Type": "maintain"
    }
}
```

### 設定が無効です: `Overrides` が `InstanceRequirements` および `InstanceType` を含んでいる
<a name="sf-abs-example-config5"></a>

以下は設定が有効ではありません。`Overrides` 構造体には `InstanceRequirements` および `InstanceType` が両方含まれています。`Overrides` では、`InstanceRequirements` または `InstanceType` のどちらかを指定できますが、両方は指定できません。

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "priceCapacityOptimized",
        "ExcessCapacityTerminationPolicy": "default",
        "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                },
                {
                    "InstanceType": "m5.large"
                }
              ]
            }
        ],
        "TargetCapacity": 1,
        "OnDemandTargetCapacity": 0,
        "Type": "maintain"
    }
}
```

### 設定が無効です: 2 つの `Overrides` に `InstanceRequirements` および `InstanceType` が含まれている
<a name="sf-abs-example-config6"></a>

以下は設定が有効ではありません。`Overrides` 構造に `InstanceRequirements` および `InstanceType` が両方含まれています。異なる `Overrides` 構造にある場合、`InstanceRequirements` または `InstanceType` を指定できますが、両方を指定することはできません。

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "priceCapacityOptimized",
        "ExcessCapacityTerminationPolicy": "default",
        "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            },
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyOtherLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceType": "m5.large"
                }
              ]
            }
        ],
        "TargetCapacity": 1,
        "OnDemandTargetCapacity": 0,
        "Type": "maintain"
    }
}
```

### 設定が無効です: 重複する属性値
<a name="sf-abs-example-config7"></a>

以下は設定が有効ではありません。2 つの `InstanceRequirements` 構造がそれぞれ `"VCpuCount": {"Min": 0, "Max": 2}` を含んでいます。これらの属性の値が重複するため、容量プールが重複します。

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "priceCapacityOptimized",
        "ExcessCapacityTerminationPolicy": "default",
        "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    },
                    {
                      "InstanceRequirements": {
                          "VCpuCount": {
                              "Min": 0,
                              "Max": 2
                          },
                          "MemoryMiB": {
                              "Min": 0
                          }
                      }
                  }
                }
              ]
            }
        ],
        "TargetCapacity": 1,
        "OnDemandTargetCapacity": 0,
        "Type": "maintain"
    }
}
```

## 指定された属性でインスタンスタイプをプレビューする
<a name="ec2fleet-get-instance-types-from-instance-requirements"></a>

 [get-instance-types-from-instance-requirements](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-types-from-instance-requirements.html) マンドを使用して、指定した属性に一致するインスタンスタイプをプレビューします。これは、インスタンスを起動せずにリクエスト設定で指定する属性を調べる場合に特に便利です。このコマンドでは、使用可能な容量は考慮されません。

**AWS CLI を使用して属性を指定してインスタンスタイプのリストをプレビューするには**

1. (オプション) 指定可能なすべての属性を生成するには、[get-instance-types-from-instance-requirements](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-types-from-instance-requirements.html) コマンドと `--generate-cli-skeleton` パラメータを使用します。オプションで、`input > attributes.json` を使用して出力を保存用ファイルに送ることができます。

   ```
   aws ec2 get-instance-types-from-instance-requirements \
       --region us-east-1 \
       --generate-cli-skeleton input > attributes.json
   ```

   正常な出力

   ```
   {
       "DryRun": true,
       "ArchitectureTypes": [
           "i386"
       ],
       "VirtualizationTypes": [
           "hvm"
       ],
       "InstanceRequirements": {
           "VCpuCount": {
               "Min": 0,
               "Max": 0
           },
           "MemoryMiB": {
               "Min": 0,
               "Max": 0
           },
           "CpuManufacturers": [
               "intel"
           ],
           "MemoryGiBPerVCpu": {
               "Min": 0.0,
               "Max": 0.0
           },
           "ExcludedInstanceTypes": [
               ""
           ],
           "InstanceGenerations": [
               "current"
           ],
           "SpotMaxPricePercentageOverLowestPrice": 0,
           "OnDemandMaxPricePercentageOverLowestPrice": 0,
           "BareMetal": "included",
           "BurstablePerformance": "included",
           "RequireHibernateSupport": true,
           "NetworkInterfaceCount": {
               "Min": 0,
               "Max": 0
           },
           "LocalStorage": "included",
           "LocalStorageTypes": [
               "hdd"
           ],
           "TotalLocalStorageGB": {
               "Min": 0.0,
               "Max": 0.0
           },
           "BaselineEbsBandwidthMbps": {
               "Min": 0,
               "Max": 0
           },
           "AcceleratorTypes": [
               "gpu"
           ],
           "AcceleratorCount": {
               "Min": 0,
               "Max": 0
           },
           "AcceleratorManufacturers": [
               "nvidia"
           ],
           "AcceleratorNames": [
               "a100"
           ],
           "AcceleratorTotalMemoryMiB": {
               "Min": 0,
               "Max": 0
           },
           "NetworkBandwidthGbps": {
               "Min": 0.0,
               "Max": 0.0
           },
           "AllowedInstanceTypes": [
               ""
           ]
       },
       "MaxResults": 0,
       "NextToken": ""
   }
   ```

1. 前のステップの出力を使用して JSON 設定ファイルを作成し、次のように設定します。
**注記**  
`ArchitectureTypes`、`VirtualizationTypes`、`VCpuCount`、および `MemoryMiB` の値を指定する必要があります。その他の属性は省略できます。省略すると、デフォルト値が使用されます。  
各属性およびそのデフォルト値の説明については、「[get-instance-types-from-instance-requirements](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-types-from-instance-requirements.html)」を参照してください。

   1. `ArchitectureTypes` に、1 つ以上のタイプのプロセッサアーキテクチャを指定します。

   1. `VirtualizationTypes` に、1 つまたは複数のタイプの仮想化を指定します。

   1. `VCpuCount` に、vCPU の最小数と最大数を指定します。最小制限を指定しない場合は、`Min` で、`0` を指定します。最大制限を指定しない場合は、`Max` パラメータを省略します。

   1. `MemoryMiB` に、最小値と最大値を MiB 単位で指定します。最小制限を指定しない場合は、`Min` で、`0` を指定します。最大制限を指定しない場合は、`Max` パラメータを省略します。

   1. オプションで、他の属性を 1 つ以上指定して、返されるインスタンスタイプのリストをさらに制約できます。

1. JSON ファイルで指定した属性を持つインスタンスタイプをプレビューするには、[get-instance-types-from-instance-requirements](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-types-from-instance-requirements.html) コマンドを入力し、`--cli-input-json` パラメータを使用して、JSON ファイルの名前とパスを指定します。オプションで、出力が表形式で表示されるようにフォーマットできます。

   ```
   aws ec2 get-instance-types-from-instance-requirements \
       --cli-input-json file://attributes.json \
       --output table
   ```

   例: *attributes.json* ファイル

   この例では、JSON ファイルに必須属性が含まれています。それらは、`ArchitectureTypes`、`VirtualizationTypes`、`VCpuCount`、および `MemoryMiB` です。さらに、オプションで `InstanceGenerations` 属性も含まれます。`MemoryMiB` では、`Max` の値を省略し、制限がないことを示すことができることを注意してください。

   ```
   {
       
       "ArchitectureTypes": [
           "x86_64"
       ],
       "VirtualizationTypes": [
           "hvm"
       ],
       "InstanceRequirements": {
           "VCpuCount": {
               "Min": 4,
               "Max": 6
           },
           "MemoryMiB": {
               "Min": 2048
           },
           "InstanceGenerations": [
               "current"
           ]
       }
   }
   ```

    出力の例

   ```
   ------------------------------------------
   |GetInstanceTypesFromInstanceRequirements|
   +----------------------------------------+
   ||             InstanceTypes            ||
   |+--------------------------------------+|
   ||             InstanceType             ||
   |+--------------------------------------+|
   ||  c4.xlarge                           ||
   ||  c5.xlarge                           ||
   ||  c5a.xlarge                          ||
   ||  c5ad.xlarge                         ||
   ||  c5d.xlarge                          ||
   ||  c5n.xlarge                          ||
   ||  d2.xlarge                           ||
   ...
   ```

1. ニーズに合ったインスタンスタイプを特定したら、フリートリクエストを設定するときにそれらを使用できるように、使用したインスタンスの属性をメモしておきます。