EC2 フリートまたはスポットフリートのインスタンスタイプを選択するための属性を指定する - Amazon Elastic Compute Cloud

EC2 フリートまたはスポットフリートのインスタンスタイプを選択するための属性を指定する

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

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

利点

属性ベースのインスタンスタイプを選択すると、次の利点があります。

  • 適切なインスタンスタイプを簡単に使用 - 利用可能なインスタンスタイプの数が多いため、ワークロードに適したインスタンスタイプを見つけるには時間がかかることがあります。インスタンス属性を指定すると、インスタンスタイプにはワークロードに必要な属性が自動的に設定されます。

  • 設定の簡素化 - フリートに複数のインスタンスタイプを手動で指定するには、インスタンスタイプごとに個別の起動テンプレートのオーバーライドを作成する必要があります。ただし、属性ベースのインスタンスタイプを選択すると、複数のインスタンスタイプを提供するには、起動テンプレートまたは起動テンプレートの上書きでインスタンス属性を指定するだけで済みます。

  • 新しいインスタンスタイプを自動的に使用 - インスタンスタイプではなくインスタンス属性を指定すると、フリートではリリース時に新しい世代のインスタンスタイプを使用できます。これにより、フリートの設定の将来の対応性も確保されます。

  • インスタンスタイプの柔軟性 - インスタンスタイプではなくインスタンス属性を指定すると、フリートはスポットインスタンスを起動するために幅広いインスタンスタイプから選択することができ、インスタンスタイプの柔軟性というスポットのベストプラクティスに準拠することができます。

属性ベースのインスタンスタイプ選択の仕組み

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

インスタンス属性のタイプ

コンピューティング要件を表現するために指定できるインスタンス属性はいくつかあります。

  • vCPU 数 – インスタンスあたりの vCPU の最小数と最大数。

  • メモリ – インスタンスあたりのメモリの最小および最大 GiB。

  • ローカルストレージ – EBS ボリュームとインスタンスストアボリュームのどちらをローカルストレージに使用するか。

  • バースト可能なパフォーマンス – T4g、T3a、T3、および T2 タイプを含む T インスタンスファミリーを使用するかどうか。

各属性の説明およびデフォルト値については、「Amazon EC2 API リファレンス」の「InstanceRequirements」を参照してください。

属性ベースのインスタンスタイプの選択を設定する場所

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

コンソールでは、次のフリート設定コンポーネントでインスタンス属性を指定できます。

  • 起動テンプレートでフリートリクエストの起動テンプレートを参照する

  • (スポットフリートのみ) フリートリクエスト内

AWS CLI で、以下のフリート設定コンポーネントのいずれかまたはすべてでインスタンスの属性を指定することができます。

  • 起動テンプレートでフリートリクエストの起動テンプレートを参照する

  • 起動テンプレートの上書きで

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

  • (スポットフリートのみ) 起動仕様内

フリートをプロビジョニングするときに、EC2 フリートまたはスポットフリートが属性ベースのインスタンスタイプの選択をどのように使用するか

EC2 フリートまたはスポットフリートは、以下の方法でフリートをプロビジョニングします。

  • これらのフリートは、指定された属性を持つインスタンスタイプを識別します。

  • また、料金保護を使用して、除外するインスタンスタイプを決定します。

  • インスタンスタイプが一致する AWS リージョンまたはアベイラビリティーゾーンに基づいて、インスタンスの起動を検討するキャパシティプールを決定します。

  • 指定された配分戦略を適用して、インスタンスを起動するキャパシティプールを決定します。

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

    配分戦略を指定すると、フリートは指定された配分戦略に従ってインスタンスを起動します。

    • スポットインスタンスの場合、属性ベースのインスタンスタイプの選択では料金キャパシティ最適化キャパシティ最適化最低料金の各配分戦略がサポートされます。ただし、最低料金スポット配分戦略は、スポットインスタンスの中断リスクが最も高いため、推奨されないことに注意してください。

    • オンデマンドインスタンスの場合、属性ベースのインスタンスタイプの選択では最低料金配分戦略がサポートされます。

  • 指定されたインスタンス属性を持つインスタンスタイプの容量がない場合、インスタンスは起動できず、フリートはエラーを返します。

料金保護

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

Amazon EC2 が料金のしきい値を計算する方法は、次のとおりです。

  • Amazon EC2 はまず、属性に一致するものから最低料金のインスタンスタイプを識別します。

  • Amazon EC2 は、料金保護パラメータに指定した値 (パーセンテージで表される) を受け取り、識別されたインスタンスタイプの料金でそれを乗算します。その結果、料金しきい値として使用される料金になります。

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

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

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

最低料金のインスタンスタイプを特定する方法

Amazon EC2 は、指定した属性に一致するものから最低料金のインスタンスタイプを特定することで、料金のしきい値に基づく料金を決定します。これは、次の方法で行います。

  • まず、属性に一致する現行世代の C、M、または R インスタンスタイプを調べます。一致するものがある場合は、最低料金のインスタンスタイプを特定します。

  • 一致するものがない場合は、属性に一致する現行世代のインスタンスタイプを調べます。一致するものがある場合は、最低料金のインスタンスタイプを特定します。

  • 一致するものがない場合は、属性に一致する以前の世代のインスタンスタイプを調べ、最低料金のインスタンスタイプを特定します。

オンデマンドインスタンスの料金保護

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

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

スポットインスタンスの料金保護

デフォルトでは、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 を超えるコストがかかるスポットインスタンスタイプを除外します。スポット料金が変動する可能性があり、料金保護のしきい値も変動する可能性があるため、このパラメータの使用はお勧めしません。

料金保護のしきい値を指定する

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

AWS CLI を使用して EC2 フリートまたはスポットフリートを作成するときに、属性ベースのインスタンスタイプの選択が使用されるようにフリートを設定してから、次の手順を実行します。

  • オンデマンドインスタンスの料金保護のしきい値を指定するには、JSON 設定ファイルの InstanceRequirements 構造の OnDemandMaxPricePercentageOverLowestPrice で、料金保護のしきい値をパーセンテージ (%) で入力します。

  • スポットインスタンスの料金保護のしきい値を指定するには、JSON 設定ファイルの InstanceRequirements 構造で、次のいずれかのパラメータを指定します。

    • MaxSpotPriceAsPercentageOfOptimalOnDemandPrice で、料金保護のしきい値をパーセンテージ (%) で入力します。

    • SpotMaxPricePercentageOverLowestPrice で、料金保護のしきい値をパーセンテージ (%) で入力します。

詳細については、「属性ベースのインスタンスタイプを選択した EC2 フリートを作成する」または「属性ベースのインスタンスタイプを選択してスポットフリートを作成する」を参照してください。

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

コンソールでスポットフリートを作成するときに、属性ベースのインスタンスタイプの選択が使用されるようにフリートを設定してから、次の手順を実行します。

  • オンデマンドインスタンスの料金保護のしきい値を指定するには、[追加のインスタンス属性] で、[オンデマンド料金の保護][属性を追加] を選択してから、料金保護のしきい値をパーセンテージで入力します。

  • スポットインスタンスの料金保護のしきい値を指定するには、[追加のインスタンス属性] で、[スポット料金の保護][属性を追加] を選択し、料金のベースとなる基準値を選択してから、料金保護のしきい値をパーセンテージで入力します。

注記

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

考慮事項

  • EC2 フリートまたはスポットフリートでは、インスタンスタイプまたはインスタンス属性のいずれかを指定できますが、両方を同時に指定することはできません。

    CLI を使用する場合、起動テンプレートの上書きによって起動テンプレートが上書きされます。例えば、起動テンプレートにインスタンスタイプが含まれ、起動テンプレートの上書きにインスタンス属性が含まれている場合、インスタンス属性によって識別されるインスタンスは、起動テンプレートのインスタンスタイプを上書きします。

  • CLI を使用していて、インスタンス属性の上書きを指定する場合、重みまたは優先順位も指定できません。

  • リクエスト設定では、最大 4 つの InstanceRequirements 構造を指定できます。

属性ベースのインスタンスタイプを選択した EC2 フリートを作成する

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

属性ベースのインスタンスタイプを選択した EC2 フリートを作成するには (AWS CLI)

create-fleet (AWS CLI) コマンドを使用して、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 }, "MemoryMiB": { "Min": 4 } } }] }], "TargetCapacitySpecification": { "TotalTargetCapacity": 20, "DefaultTargetCapacityType": "spot" }, "Type": "instant" }

属性に基づくインスタンスタイプ選択のための属性は、InstanceRequirements 構造で指定されます。この例では、2 つのタグが指定されています。

  • VCpuCount — 最低 2 つの vCPUs が指定されています。最大値は指定されていないため、上限はありません。

  • MemoryMiB — 4 MiB 以上のメモリが指定されています。最大値は指定されていないため、上限はありません。

2 つ以上の vCPUs と 4 MiB 以上のメモリを持つすべてのインスタンスタイプが識別されます。ただし、EC2 フリートがフリートをプロビジョニングする場合、価格保護と配分戦略によって一部のインスタンスタイプが除外される場合があります。

指定できるすべての属性のリストと説明については、「Amazon EC2 API リファレンス」の「インスタンス要件」を参照してください。

注記

InstanceRequirements がフリート設定に含まれる場合、InstanceTypeWeightedCapacity は除外しなければならず、インスタンス属性と同時にフリート設定を決定することはできません。

JSON には次のフリート設定も含まれています。

  • "AllocationStrategy": "price-capacity-optimized" — フリート内のスポットインスタンスの割り当て戦略。

  • "LaunchTemplateName": "my-launch-template", "Version": "1" — 起動テンプレートにはいくつかのインスタンス設定情報が含まれていますが、インスタンスタイプが指定されている場合は、InstanceRequirements で指定されている属性によってオーバーライドされます。

  • "TotalTargetCapacity": 20 – ターゲット容量は 20 個のインスタンスです。

  • "DefaultTargetCapacityType": "spot" — デフォルトの容量はスポットインスタンスです。

  • "Type": "instant" — フリートのリクエストタイプは instant です。

属性ベースのインスタンスタイプを選択してスポットフリートを作成する

属性ベースのインスタンスタイプ選択を使用するようにフリートを設定するには、Amazon EC2 コンソールまたは AWS CLI を使用します。

コンソールを使用してスポットフリートを作成するには

属性ベースのインスタンスタイプの選択にスポットフリートを設定するには (コンソール)
  1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

  2. ナビゲーションペインで、[Spot Requests] (スポットリクエスト) を選択した後、[Request Spot Instances] (スポットインスタンスのリクエスト) を選択します。

  3. 手順に従ってスポットフリートを作成します。詳細については、「定義済みパラメータを使用してスポットフリートリクエストを作成する (コンソール)」を参照してください。

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

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

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

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

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

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

AWS CLI を使用したスポットフリートの作成

属性ベースのインスタンスタイプの選択にスポットフリートを設定するには (AWS CLI)

スポットフリートリクエストを作成するには、request-spot-fleet (AWS CLI) コマンドを使用します。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 }, "MemoryMiB": { "Min": 4 } } }] }] }

属性に基づくインスタンスタイプ選択のための属性は、InstanceRequirements 構造で指定されます。この例では、2 つのタグが指定されています。

  • VCpuCount — 最低 2 つの vCPUs が指定されています。最大値は指定されていないため、上限はありません。

  • MemoryMiB — 4 MiB 以上のメモリが指定されています。最大値は指定されていないため、上限はありません。

2 つ以上の vCPUs と 4 MiB 以上のメモリを持つすべてのインスタンスタイプが識別されます。ただし、スポットフリートがフリートをプロビジョニングする場合、価格保護と配分戦略によって一部のインスタンスタイプが除外される場合があります。

指定できるすべての属性のリストと説明については、「Amazon EC2 API リファレンス」の「インスタンス要件」を参照してください。

注記

InstanceRequirements がフリート設定に含まれる場合、InstanceTypeWeightedCapacity は除外しなければならず、インスタンス属性と同時にフリート設定を決定することはできません。

JSON には次のフリート設定も含まれています。

  • "AllocationStrategy": "priceCapacityOptimized" — フリート内のスポットインスタンスの割り当て戦略。

  • "LaunchTemplateName": "my-launch-template", "Version": "1" — 起動テンプレートにはいくつかのインスタンス設定情報が含まれていますが、インスタンスタイプが指定されている場合は、InstanceRequirements で指定されている属性によってオーバーライドされます。

  • "TargetCapacity": 20 – ターゲット容量は 20 個のインスタンスです。

  • "Type": "request" — フリートのリクエストタイプは request です。

EC2 フリートの有効な設定と無効な設定の例

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

次のものが含まれている場合、設定は無効と見なされます。

  • InstanceRequirements および InstanceType を持つ 1 つの Overrides 構造

  • 一つは InstanceRequirements、もう一つは InstanceType を持つ 2 つの Overrides 構造

  • 同じ LaunchTemplateSpecification 内で属性値が重複している 2 つの InstanceRequirements 構造

有効な設定: 上書きを含む単一の起動テンプレート

以下の設定は有効です。これには、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 になるように、十分なインスタンスを起動します。

有効な設定: 複数のインスタンス要件を持つ単一の起動テンプレート

以下の設定は有効です。これには、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 つの起動テンプレート、それぞれに上書きがある

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

{ "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 のみ指定され、重複する属性値なし

以下の設定は有効です。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" } } }

設定が無効です: OverridesInstanceRequirements および InstanceType を含んでいる

以下は設定が有効ではありません。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 つの OverridesInstanceRequirements および InstanceType が含まれている

以下は設定が有効ではありません。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" } } }

設定が無効です: 重複する属性値

以下は設定が有効ではありません。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" } } }

スポットフリートの有効な設定と無効な設定の例

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

次のものが含まれている場合、設定は無効と見なされます。

  • InstanceRequirements および InstanceType を持つ 1 つの Overrides 構造

  • 一つは InstanceRequirements、もう一つは InstanceType を持つ 2 つの Overrides 構造

  • 同じ LaunchTemplateSpecification 内で属性値が重複している 2 つの InstanceRequirements 構造

有効な設定: 上書きを含む単一の起動テンプレート

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

{ "SpotFleetRequestConfig": { "AllocationStrategy": "priceCapacityOptimized", "ExcessCapacityTerminationPolicy": "default", "IamFleetRole": "arn:aws:iam::000000000000: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 になるように、十分なインスタンスを起動します。

有効な設定: 複数のインスタンス要件を持つ単一の起動テンプレート

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

{ "SpotFleetRequestConfig": { "AllocationStrategy": "priceCapacityOptimized", "ExcessCapacityTerminationPolicy": "default", "IamFleetRole": "arn:aws:iam::000000000000: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 つの起動テンプレート、それぞれに上書きがある

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

{ "SpotFleetRequestConfig": { "AllocationStrategy": "priceCapacityOptimized", "ExcessCapacityTerminationPolicy": "default", "IamFleetRole": "arn:aws:iam::000000000000: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 のみ指定され、重複する属性値なし

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

{ "SpotFleetRequestConfig": { "AllocationStrategy": "priceCapacityOptimized", "ExcessCapacityTerminationPolicy": "default", "IamFleetRole": "arn:aws:iam::000000000000: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" } }

設定が無効です: OverridesInstanceRequirements および InstanceType を含んでいる

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

{ "SpotFleetRequestConfig": { "AllocationStrategy": "priceCapacityOptimized", "ExcessCapacityTerminationPolicy": "default", "IamFleetRole": "arn:aws:iam::000000000000: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 つの OverridesInstanceRequirements および InstanceType が含まれている

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

{ "SpotFleetRequestConfig": { "AllocationStrategy": "priceCapacityOptimized", "ExcessCapacityTerminationPolicy": "default", "IamFleetRole": "arn:aws:iam::000000000000: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" } }

設定が無効です: 重複する属性値

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

{ "SpotFleetRequestConfig": { "AllocationStrategy": "priceCapacityOptimized", "ExcessCapacityTerminationPolicy": "default", "IamFleetRole": "arn:aws:iam::000000000000: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" } }

指定された属性でインスタンスタイプをプレビューする

get-instance-types-from-instance-requirements AWS CLI コマンドを使用して、指定した属性に一致するインスタンスタイプをプレビューします。これは、インスタンスを起動せずにリクエスト設定で指定する属性を調べる場合に特に便利です。このコマンドでは、使用可能な容量は考慮されません。

AWS CLI を使用して属性を指定してインスタンスタイプのリストをプレビューするには
  1. (オプション) 指定可能なすべての属性を生成するには、get-instance-types-from-instance-requirements コマンドと --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": "" }
  2. 前のステップの出力を使用して JSON 設定ファイルを作成し、次のように設定します。

    注記

    ArchitectureTypesVirtualizationTypesVCpuCount、および MemoryMiB の値を指定する必要があります。その他の属性は省略できます。省略すると、デフォルト値が使用されます。

    各属性およびそのデフォルト値の説明については、「get-instance-types-from-instance-requirements」を参照してください。

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

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

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

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

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

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

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

    例: attributes.json ファイル

    この例では、JSON ファイルに必須属性が含まれています。それらは、ArchitectureTypesVirtualizationTypesVCpuCount、および 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 || ...
  4. ニーズに合ったインスタンスタイプを特定したら、フリートリクエストを設定するときにそれらを使用できるように、使用したインスタンスの属性をメモしておきます。