スポットフリートの設定例 - Amazon Elastic Compute Cloud

スポットフリートの設定例

以下の例で示しているのは、スポットフリートリクエストを作成するための request-spot-fleet コマンドで使用できる起動設定です。https://docs.aws.amazon.com/cli/latest/reference/ec2/request-spot-fleet.html詳細については、「スポットフリートリクエストを作成します。」を参照してください。

注記

スポットフリートでは、ネットワークインターフェイス ID を起動テンプレートか起動仕様に指定できません。起動テンプレートまたは起動仕様から NetworkInterfaceID パラメータを必ず省略してください。

例 1: リージョンの最低価格のアベイラビリティーゾーンあるいはサブネットを使用してスポットインスタンスを起動する

以下の例では、アベイラビリティーゾーンまたはサブネットを使用しない 1 つの起動仕様を指定しています。スポットフリートはデフォルトのサブネットを持つ最低価格のアベイラビリティーゾーンでインスタンスを起動します。お支払いいただく料金はオンデマンド価格を上回りません。

{ "TargetCapacity": 20, "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role", "LaunchSpecifications": [ { "ImageId": "ami-1a2b3c4d", "KeyName": "my-key-pair", "SecurityGroups": [ { "GroupId": "sg-1a2b3c4d" } ], "InstanceType": "m3.medium", "IamInstanceProfile": { "Arn": "arn:aws:iam::123456789012:instance-profile/my-iam-role" } } ] }

例 2: 指定したリスト内で最低価格のアベイラビリティーゾーンまたはサブネットを使用してスポットインスタンスを起動する

以下の例では、アベイラビリティーゾーン/サブネットは異なるがインスタンスタイプおよび AMI が同じである、2 つの起動仕様を指定しています。

アベイラビリティーゾーン

スポットフリートは、指定した最低価格のアベイラビリティーゾーンのデフォルトサブネットでインスタンスを起動します。

{ "TargetCapacity": 20, "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role", "LaunchSpecifications": [ { "ImageId": "ami-1a2b3c4d", "KeyName": "my-key-pair", "SecurityGroups": [ { "GroupId": "sg-1a2b3c4d" } ], "InstanceType": "m3.medium", "Placement": { "AvailabilityZone": "us-west-2a, us-west-2b" }, "IamInstanceProfile": { "Arn": "arn:aws:iam::123456789012:instance-profile/my-iam-role" } } ] }

Subnets

デフォルトのサブネットまたはデフォルト以外のサブネットを指定できますが、デフォルト以外のサブネットは、デフォルトの VPC またはデフォルト以外の VPC 内から選択できます。スポットサービスは、最低価格のアベイラビリティーゾーンにあるいずれかのサブネットでインスタンスを起動します。

スポットフリートリクエストで、同じアベイラビリティーゾーンから異なるサブネットを指定することはできません。

{ "TargetCapacity": 20, "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role", "LaunchSpecifications": [ { "ImageId": "ami-1a2b3c4d", "KeyName": "my-key-pair", "SecurityGroups": [ { "GroupId": "sg-1a2b3c4d" } ], "InstanceType": "m3.medium", "SubnetId": "subnet-a61dafcf, subnet-65ea5f08", "IamInstanceProfile": { "Arn": "arn:aws:iam::123456789012:instance-profile/my-iam-role" } } ] }

インスタンスがデフォルトの VPC で起動される場合は、デフォルトでパブリック IPv4 アドレスが割り当てられます。インスタンスがデフォルト以外の VPC で起動される場合は、デフォルトでパブリック IPv4 アドレスは割り当てられません。起動仕様でネットワークインターフェイスを使用して、デフォルト以外の VPC で起動されるインスタンスにパブリック IPv4 アドレスを割り当てます。ネットワークインターフェイスの指定時、ネットワークインターフェイスを使用してサブネット ID とセキュリティグループ ID を含める必要があります。

... { "ImageId": "ami-1a2b3c4d", "KeyName": "my-key-pair", "InstanceType": "m3.medium", "NetworkInterfaces": [ { "DeviceIndex": 0, "SubnetId": "subnet-1a2b3c4d", "Groups": [ "sg-1a2b3c4d" ], "AssociatePublicIpAddress": true } ], "IamInstanceProfile": { "Arn": "arn:aws:iam::880185128111:instance-profile/my-iam-role" } } ...

例 3: 指定したリスト内で最低価格のインスタンスタイプを使用してスポットインスタンスを起動する

次の例では、同じ AMI と アベイラビリティーゾーンまたはサブネットで、複数の異なるインスタンスタイプを使用する 2 つの起動設定を指定します。スポットフリートは、指定された最低価格のインスタンスタイプを使用してインスタンスを起動します。

アベイラビリティーゾーン

{ "TargetCapacity": 20, "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role", "LaunchSpecifications": [ { "ImageId": "ami-1a2b3c4d", "SecurityGroups": [ { "GroupId": "sg-1a2b3c4d" } ], "InstanceType": "c5.4xlarge", "Placement": { "AvailabilityZone": "us-west-2b" } }, { "ImageId": "ami-1a2b3c4d", "SecurityGroups": [ { "GroupId": "sg-1a2b3c4d" } ], "InstanceType": "r3.8xlarge", "Placement": { "AvailabilityZone": "us-west-2b" } } ] }

サブネット

{ "TargetCapacity": 20, "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role", "LaunchSpecifications": [ { "ImageId": "ami-1a2b3c4d", "SecurityGroups": [ { "GroupId": "sg-1a2b3c4d" } ], "InstanceType": "c5.4xlarge", "SubnetId": "subnet-1a2b3c4d" }, { "ImageId": "ami-1a2b3c4d", "SecurityGroups": [ { "GroupId": "sg-1a2b3c4d" } ], "InstanceType": "r3.8xlarge", "SubnetId": "subnet-1a2b3c4d" } ] }

例 4。リクエストの料金を上書きする

オンデマンド価格であるデフォルトの上限料金を使用することをお勧めします。必要に応じて、フリートリクエストの上限料金と個々の起動条件の上限料金を指定することができます。

以下の例は、フリートリクエストの上限料金と、3 つの起動条件のうちの 2 つの上限料金を指定しています。フリートリクエストの上限料金は、上限料金を指定しないすべての起動条件に適用されます。スポットフリートは、最低価格のインスタンスタイプを使用してインスタンスを起動します。

アベイラビリティーゾーン

{ "SpotPrice": "1.00", "TargetCapacity": 30, "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role", "LaunchSpecifications": [ { "ImageId": "ami-1a2b3c4d", "InstanceType": "c3.2xlarge", "Placement": { "AvailabilityZone": "us-west-2b" }, "SpotPrice": "0.10" }, { "ImageId": "ami-1a2b3c4d", "InstanceType": "c3.4xlarge", "Placement": { "AvailabilityZone": "us-west-2b" }, "SpotPrice": "0.20" }, { "ImageId": "ami-1a2b3c4d", "InstanceType": "c3.8xlarge", "Placement": { "AvailabilityZone": "us-west-2b" } } ] }

サブネット

{ "SpotPrice": "1.00", "TargetCapacity": 30, "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role", "LaunchSpecifications": [ { "ImageId": "ami-1a2b3c4d", "InstanceType": "c3.2xlarge", "SubnetId": "subnet-1a2b3c4d", "SpotPrice": "0.10" }, { "ImageId": "ami-1a2b3c4d", "InstanceType": "c3.4xlarge", "SubnetId": "subnet-1a2b3c4d", "SpotPrice": "0.20" }, { "ImageId": "ami-1a2b3c4d", "InstanceType": "c3.8xlarge", "SubnetId": "subnet-1a2b3c4d" } ] }

例 5: 分散配分戦略を使用して、スポットフリートを起動する

次の例では、diversified の配分戦略を使用します。これらの起動仕様では、インスタンスタイプは異なりますが、AMI およびアベイラビリティーゾーン/サブネットは同じです。スポットフリートは、各タイプのインスタンスが 10 個になるように、3 個の起動仕様全体に 30 個のインスタンスを分散します。詳細については、「スポットインスタンスの配分戦略」を参照してください。

アベイラビリティーゾーン

{ "SpotPrice": "0.70", "TargetCapacity": 30, "AllocationStrategy": "diversified", "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role", "LaunchSpecifications": [ { "ImageId": "ami-1a2b3c4d", "InstanceType": "c4.2xlarge", "Placement": { "AvailabilityZone": "us-west-2b" } }, { "ImageId": "ami-1a2b3c4d", "InstanceType": "m3.2xlarge", "Placement": { "AvailabilityZone": "us-west-2b" } }, { "ImageId": "ami-1a2b3c4d", "InstanceType": "r3.2xlarge", "Placement": { "AvailabilityZone": "us-west-2b" } } ] }

サブネット

{ "SpotPrice": "0.70", "TargetCapacity": 30, "AllocationStrategy": "diversified", "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role", "LaunchSpecifications": [ { "ImageId": "ami-1a2b3c4d", "InstanceType": "c4.2xlarge", "SubnetId": "subnet-1a2b3c4d" }, { "ImageId": "ami-1a2b3c4d", "InstanceType": "m3.2xlarge", "SubnetId": "subnet-1a2b3c4d" }, { "ImageId": "ami-1a2b3c4d", "InstanceType": "r3.2xlarge", "SubnetId": "subnet-1a2b3c4d" } ] }

アベイラビリティーゾーンの 1 つで機能停止が発生した場合にスポットリクエストが EC2 のキャパシティーによって満たされる可能性を高めるためのベストプラクティスは、ゾーン間で多様化することです。このシナリオでは、使用可能な各アベイラビリティーゾーンを起動仕様に含めます。また、毎回同じサブネットを使用するのではなく、3 つの固有のサブネット (それぞれ異なるゾーンへのマッピング) を使用してください。

アベイラビリティーゾーン

{ "SpotPrice": "0.70", "TargetCapacity": 30, "AllocationStrategy": "diversified", "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role", "LaunchSpecifications": [ { "ImageId": "ami-1a2b3c4d", "InstanceType": "c4.2xlarge", "Placement": { "AvailabilityZone": "us-west-2a" } }, { "ImageId": "ami-1a2b3c4d", "InstanceType": "m3.2xlarge", "Placement": { "AvailabilityZone": "us-west-2b" } }, { "ImageId": "ami-1a2b3c4d", "InstanceType": "r3.2xlarge", "Placement": { "AvailabilityZone": "us-west-2c" } } ] }

サブネット

{ "SpotPrice": "0.70", "TargetCapacity": 30, "AllocationStrategy": "diversified", "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role", "LaunchSpecifications": [ { "ImageId": "ami-1a2b3c4d", "InstanceType": "c4.2xlarge", "SubnetId": "subnet-1a2b3c4d" }, { "ImageId": "ami-1a2b3c4d", "InstanceType": "m3.2xlarge", "SubnetId": "subnet-2a2b3c4d" }, { "ImageId": "ami-1a2b3c4d", "InstanceType": "r3.2xlarge", "SubnetId": "subnet-3a2b3c4d" } ] }

例 6: インスタンスの分量指定を使用して、スポットフリートを起動する

次の例では、インスタンス分量指定を使っています。これは、料金が 1 インスタンス時間当たりではなく、1 ユニット時間当たりであることを意味します。それぞれの起動設定には、異なるインスタンスタイプおよび異なる分量がリストされます。スポットフリートはユニット時間の最低価格のインスタンスタイプを選択します。スポットフリートは、ターゲット容量をインスタンス分量で割ることで起動するスポットインスタンス数を計算します。結果が整数でない場合、スポットフリートはその数を次の整数に切り上げ、そのためフリートのサイズがターゲット容量以上になります。

r3.2xlarge のリクエストが成功すると、スポットはこれらのインスタンスのうち、4 つをプロビジョニングします。 3.33 インスタンスまで 20 を 6 で割り、そして残りの 4 つのインスタンスを切り上げます。

c3.xlarge のリクエストが成功すると、スポットはこれらのインスタンスのうち、7 つをプロビジョニングします。 6.66 インスタンスまで 20 を 3 で割り、そして残りの 7 つのインスタンスを切り上げます。

詳細については、「スポットフリートインスタンスの分量指定」を参照してください。

アベイラビリティーゾーン

{ "SpotPrice": "0.70", "TargetCapacity": 20, "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role", "LaunchSpecifications": [ { "ImageId": "ami-1a2b3c4d", "InstanceType": "r3.2xlarge", "Placement": { "AvailabilityZone": "us-west-2b" }, "WeightedCapacity": 6 }, { "ImageId": "ami-1a2b3c4d", "InstanceType": "c3.xlarge", "Placement": { "AvailabilityZone": "us-west-2b" }, "WeightedCapacity": 3 } ] }

サブネット

{ "SpotPrice": "0.70", "TargetCapacity": 20, "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role", "LaunchSpecifications": [ { "ImageId": "ami-1a2b3c4d", "InstanceType": "r3.2xlarge", "SubnetId": "subnet-1a2b3c4d", "WeightedCapacity": 6 }, { "ImageId": "ami-1a2b3c4d", "InstanceType": "c3.xlarge", "SubnetId": "subnet-1a2b3c4d", "WeightedCapacity": 3 } ] }

例 7: オンデマンド容量でスポットフリートを起動する

インスタンス容量を常に確保するには、オンデマンド容量のリクエストをスポットフリートリクエストに含めることができます。オンデマンドリクエストは、容量がある限り、常に実行されます。ターゲット容量は、キャパシティーと可用性がある場合にスポットとして実行されます。

次の例では、希望するターゲット容量を 10 とし、そのうち 5 をオンデマンドキャパシティーとして指定する必要があります。スポットキャパシティーは指定しません。これは、ターゲット容量からオンデマンド容量を引いたバランスを意味します。Amazon EC2 は、利用可能な Amazon EC2 容量および可用性がある場合、オンデマンドとして 5 容量単位を、スポットとして 5 容量単位 (10-5=5) をスポットとして起動します。

詳細については、「スポットフリートでのオンデマンド」を参照してください。

{ "IamFleetRole": "arn:aws:iam::781603563322:role/aws-ec2-spot-fleet-tagging-role", "AllocationStrategy": "lowestPrice", "TargetCapacity": 10, "SpotPrice": null, "ValidFrom": "2018-04-04T15:58:13Z", "ValidUntil": "2019-04-04T15:58:13Z", "TerminateInstancesWithExpiration": true, "LaunchSpecifications": [], "Type": "maintain", "OnDemandTargetCapacity": 5, "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateId": "lt-0dbb04d4a6cca5ad1", "Version": "2" }, "Overrides": [ { "InstanceType": "t2.medium", "WeightedCapacity": 1, "SubnetId": "subnet-d0dc51fb" } ] } ] }

例 8: 容量の再調整を設定して代替 スポットインスタンス を開始する

次の例では、Amazon EC2 がフリートのスポットインスタンスに再調整の推奨を発したときに、スポットフリートが代替スポットインスタンスを起動するように設定します。スポットインスタンスの自動代替を設定するには、ReplacementStrategy で、launch-before-terminate を指定します。新しい交換用スポットインスタンスが起動してから古いスポットインスタンスが自動削除されるまでの時間を設定するには、termination-delay に秒単位で値を指定します。詳細については、「設定オプション」を参照してください。

注記

launch-before-terminate は、インスタンスのシャットダウン手順が完了するまでの時間が予測できる場合にのみ使用することをお勧めします。これにより、古いインスタンスは、シャットダウン手順が完了した後にのみ終了されます。実行中は、すべてのインスタンスに対して課金されます。

容量の再調整戦略の有効性は、スポットフリートリクエストで指定されたスポットキャパシティプールの数に左右されます。インスタンスタイプとアベイラビリティーゾーンの多様なセットを使ってフリートを設定し、AllocationStrategy では capacityOptimized を指定することをお勧めします。スポットフリートの容量の再調整を行うときに考慮すべき事項の詳細については、「容量の再調整」を参照してください。

{ "SpotFleetRequestConfig": { "AllocationStrategy": "capacityOptimized", "IamFleetRole": "arn:aws:iam::000000000000:role/aws-ec2-spot-fleet-tagging-role", "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "LaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceType": "c3.large", "WeightedCapacity": 1, "Placement": { "AvailabilityZone": "us-east-1a" } }, { "InstanceType": "c4.large", "WeightedCapacity": 1, "Placement": { "AvailabilityZone": "us-east-1a" } }, { "InstanceType": "c5.large", "WeightedCapacity": 1, "Placement": { "AvailabilityZone": "us-east-1a" } } ] } ], "TargetCapacity": 5, "SpotMaintenanceStrategies": { "CapacityRebalance": { "ReplacementStrategy": "launch-before-terminate", "TerminationDelay": "720" } } } }

例 9: 容量最適化フリートでスポットインスタンスを起動する

以下の例は、容量を最適化するスポット配分戦略で、スポットフリートを設定する方法を示しています。容量を最適化するには、AllocationStrategycapacityOptimized に設定する必要があります。

次の例では、3 つの起動仕様で 3 つのスポットキャパシティプールが指定されています。ターゲット容量は 50 個のスポットインスタンスです。スポットインスタンスは、起動中のインスタンス数に最適な容量のスポットキャパシティプールに、50 個のスポットインスタンスを起動しようとします。

{ "TargetCapacity": "50", "SpotFleetRequestConfig": { "AllocationStrategy": "capacityOptimized", }, "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "my-launch-template", "Version": "1" }, "Overrides": [ { "InstanceType": "r4.2xlarge", "AvailabilityZone": "us-west-2a" }, { "InstanceType": "m4.2xlarge", "AvailabilityZone": "us-west-2b" }, { "InstanceType": "c5.2xlarge", "AvailabilityZone": "us-west-2b" } ] } ] }

例 10: 優先順位のある容量最適化フリートでスポットインスタンスを起動する

次の例は、ベストエフォートベースで優先順位を使用しながら、容量を最適化するスポット配分戦略を使用して、スポットフリートを設定する方法を示しています。

capacityOptimizedPrioritized 配分戦略を使用する場合は、Priority パラメータを使用して、スポットキャパシティプールの優先順位を指定します。数値が小さいほど優先順位が高くなります。また、優先度が同じならば、複数のスポットキャパシティープールに同じ優先順位を設定することもできます。プールに優先順位を設定しない場合、そのプールは優先順位が最も低いとみなされます。

スポットキャパシティプールに優先順位を付けるには、AllocationStrategycapacityOptimizedPrioritized に設定する必要があります。スポットフリートは最初に容量を最適化しますが、優先順位をベストエフォートベースで決定します (例えば、優先順位を尊重しても、スポットフリートの最適な容量をプロビジョニングする能力に大きな影響を与えない場合など)。これは、中断の可能性を最小限に抑える必要があり、特定のインスタンスタイプを優先することが重要なワークロードに適したオプションです。

次の例では、3 つの起動仕様で 3 つのスポットキャパシティープールが指定されています。各プールには優先順位が設定されています。数値が小さいほど優先順位が高くなります。ターゲット容量は 50 個のスポットインスタンスです。スポットフリートは、ベストエフォートベースで優先順位が最も高いスポットキャパシティープールに 50 個のスポットインスタンスを起動しようとしますが、最初に容量を最適化します。

{ "TargetCapacity": "50", "SpotFleetRequestConfig": { "AllocationStrategy": "capacityOptimizedPrioritized" }, "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "my-launch-template", "Version": "1" }, "Overrides": [ { "InstanceType": "r4.2xlarge", "Priority": 1, "AvailabilityZone": "us-west-2a" }, { "InstanceType": "m4.2xlarge", "Priority": 2, "AvailabilityZone": "us-west-2b" }, { "InstanceType": "c5.2xlarge", "Priority": 3, "AvailabilityZone": "us-west-2b" } ] } ] }

例 11: priceCapacityOptimized フリートでスポットインスタンスを起動する

次の例は、容量と最低価格の両方を最適化するスポット配分戦略を使用するスポットフリートを設定する方法を示しています。価格を考慮しながら容量を最適化するには、スポット AllocationStrategypriceCapacityOptimized に設定する必要があります。

次の例では、3 つの起動仕様で 3 つのスポットキャパシティプールが指定されています。ターゲット容量は 50 個のスポットインスタンスです。スポットフリートは、起動するインスタンス数に最適な容量を持つスポットキャパシティプールに 50 個のスポットインスタンスを起動し、同時に価格が最も低いプールを選択することを試みます。

{ "SpotFleetRequestConfig": { "AllocationStrategy": "priceCapacityOptimized", "OnDemandAllocationStrategy": "lowestPrice", "ExcessCapacityTerminationPolicy": "default", "IamFleetRole": "arn:aws:iam::111111111111:role/aws-ec2-spot-fleet-tagging-role", "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateId": "lt-0123456789example", "Version": "1" }, "Overrides": [ { "InstanceType": "r4.2xlarge", "AvailabilityZone": "us-west-2a" }, { "InstanceType": "m4.2xlarge", "AvailabilityZone": "us-west-2b" }, { "InstanceType": "c5.2xlarge", "AvailabilityZone": "us-west-2b" } ] } ], "TargetCapacity": 50, "Type": "request" } }

例 12: 属性ベースのインスタンスタイプの選択を設定する

次の例は、インスタンスタイプの識別に属性ベースのインスタンスタイプ選択を使用するようにスポットフリートを設定する方法を示しています。必要なインスタンス属性を指定するには、InstanceRequirements 構造に属性を指定します。

次の例では、2 つのインスタンス属性が指定されています。

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

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

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

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

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