メニュー
Amazon Elastic Compute Cloud
Linux インスタンス用ユーザーガイド

スポットフリートの仕組み

スポット群は、スポットインスタンスの集合です。スポットフリートは、スポットフリートのリクエストで指定したターゲット容量を満たすために必要なスポットインスタンス数の起動を試みます。 また、スポットフリートは、スポット料金や可能な容量に変化が生じたことによってスポットインスタンスが中断した場合にフリートのターゲット容量を維持するよう試みます。

スポットインスタンスプールは、同様のインスタンスタイプ、オペレーティングシステム、アベイラビリティーゾーン、ネットワークプラットフォーム (EC2-Classic あるいは EC2-VPC) の一連の使われていない EC2 インスタンスです。スポットフリートのリクエストを行う場合に複数の起動条件を含めることができ、これにはインスタンスタイプ、AMI、アベイラビリティーゾーン、またはサブネットがあります。 スポットフリートは、スポットフリートのリクエストとそのスポットフリートリクエストの設定を含む起動条件に基づいてリクエストを満たすために使用されるスポットインスタンスプールを選択します。スポットインスタンスは選択されたプールから取得されます。

スポットのフリートの配分戦略

スポットフリートの配分戦略は、起動条件によるスポットインスタンスプールからどのようにスポットフリートリクエストを満たすかについて決定します。以下に、スポットフリートリクエストで指定できる配分戦略を示します。

lowestPrice

スポットインスタンスは、最低価格のプールから取得されます。これはデフォルトの戦略です。

diversified

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

配分戦略を選択する

ユースケースに基づいてスポットフリートを最適化できます。

フリートが小サイズであったりまたは短時間の実行である場合、すべてのインスタンスが単一のスポットインスタンスプールにあるとしても、スポットインスタンスが中断される可能性は低くなります。これより、lowestPrice 戦略は、低コストを提供している期間に条件に合いやすくなります。

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

diversified 戦略では、スポットフリートは、On-Demand price を上回るスポット料金のいずれのプールにもスポットインスタンスを起動しないことにご注意ください。

ターゲット容量を維持する

スポット料金またはスポットインスタンスプール容量の変動によりスポットインスタンスが終了された後、スポット群の代替スポットインスタンスが起動されます。配分戦略が lowestPrice である場合、スポットフリートは、スポット料金が現在最低値のプールに代替インスタンスを起動します。 配分戦略が diversified である場合には、スポットフリートは残りのプールに代替スポットインスタンスを分散します。

スポット料金の優先

各スポットフリートのリクエストには全体のスポット料金を含める必要があります。 デフォルトでは、スポットフリートは起動条件のそれぞれの入札価格としてこの価格を使用します。

任意で 1 つまたは複数の起動条件にスポット料金を指定することができます。 これは、起動条件に指定された入札価格です。 起動条件に指定スポット料金が含まれる場合、スポットフリートは起動条件の入札価格としてこの価格を使用し、全体のスポット料金に優先することになります。 スポット料金を含まないそのほかの起動条件は、全体スポット料金を引き続き当てられていることにご注意ください。

スポット群インスタンスの重み付け

スポットインスタンスのフリートをリクエストするとき、それぞれのインスタンスタイプがアプリケーションのパフォーマンスに応じるように容量ユニットを定義し、また、instance weighting を利用して各スポットインスタンスプールごとに入札価格を調整できます。

デフォルトでは、指定したスポット料金は 1 インスタンス時間当たりの入札価格を表します。 インスタンス分量機能を使用すると、指定したスポット料金は ユニット時間ごとの入札価格を表します。 ユニット時間あたりの入札価格は、インスタンスタイプの入札価格をそのユニットの数で割って計算できます。 スポットフリートでは、ターゲット容量をインスタンス分量で割ることで起動するスポットインスタンスの数を計算します。 その結果が整数でなければ、スポットフリートはその数を次の整数に切り上げ、これによりフリートのサイズがターゲット容量以上になります。起動されたインスタンスの容量がリクエストされたターゲット容量を超えた場合でも、スポットフリートは起動仕様で指定したどのプールでも選択できる点に注意してください。

次の表には、10 のターゲット容量のスポットフリートリクエストのユニット当たり入札価格を特定するために計算の例が含まれています。

インスタンスタイプ インスタンスの分量 インスタンス時間あたりのスポット料金 ユニット時間あたりのスポット料金 起動されたインスタンスの数

r3.xlarge

2

0.05 USD

.025

(.05 ÷ 2)

5

(10 ÷ 2)

r3.8xlarge

8

0.10 USD

.0125

(.10 ÷ 8)

2

(10 ÷ 8、結果切り上げ)

次に示すように、スポットフリートインスタンスを使用して、受理時のユニットごとの最低価格のプールに指定するターゲット容量をプロビジョニングします。

  1. Set the target capacity for your Spot fleet either in instances (the default) or in the units of your choice, such as virtual CPUs, memory, storage, or throughput.

  2. Set the bid price per unit.

  3. For each launch configuration, specify the weight, which is the number of units that the instance type represents toward the target capacity.

インスタンスの分量指定例

次の設定のスポットフリートを検討します。

  • ターゲット容量 24

  • r3.2xlarge のインスタンスタイプの起動条件と分量 6

  • c3.xlarge のインスタンスタイプの起動条件と分量 5

分量とは、インスタンスタイプがターゲット容量に対して必要なユニット数を表します。 最初の起動条件がユニットあたりのスポット料金を最低値で提供する場合 (インスタンス時間あたりの r3.2xlarge のスポット料金を 6 で割ったもの)、スポットフリートはこれらのインスタンスから 4 つを起動します (24 を 6 で割ったもの)。

2 番目の起動条件がユニットあたりのスポット料金を最低値で提供する場合 (インスタンス時間あたりの c3.xlarge のスポット料金を 5 で割ったもの)、スポットフリートはこれらのインスタンスから 5 つを起動します (24 を 5 で割ったもの、結果が切り上げられる)。

インスタンスの分量指定と配分戦略

次の設定のスポットフリートを検討します。

  • ターゲット容量 30

  • c3.2xlarge のインスタンスタイプの起動条件と分量 8

  • m3.xlarge のインスタンスタイプの起動条件と分量 8

  • r3.xlarge のインスタンスタイプの起動条件と分量 8

スポットフリートは、4 つのインスタンスを起動します (30 を 8 出割ったもの、結果を切り上げ)。 lowestPrice 戦略では、すべての 4 つのインスタンスはユニットあたりの最低スポット料金を提供するプールから取得されます。diversified 戦略では、スポットフリートは 3 プールごとに 1 つのインスタンスを起動し、そしてこの 3 つのプールのいずれかから取得された 4 つ目のインスタンスがユニットあたりの最低スポット料金を提供することになります。

チュートリアル:スポットフリートを使ってインスタンスの分量を指定する

このチュートリアルでは、サンプル株式会社という名の架空会社で、インスタンス分量指定を使ったスポットフリートへの入札のプロセスを説明します。

目的

製薬会社であるサンプル株式会社は、癌と闘うために使用される可能性のある化合物を選別するために Amazon EC2 の計算処理能力を利用したいと考えています。

計画

サンプル株式会社はまず、「Spot Best Practices」を参照します。 次に、サンプル株式会社はスポットフリートに関する以下の要件を確認します。

インスタンスタイプ

サンプル株式会社には、60 GB 以上のメモリと 8 つの仮想 CPU (vCPU) で最適に実行される、計算能力とメモリに負担がかかるアプリケーションがあります。 同社は、できるだけ低価格でアプリケーション用のこれらのリソースを最大化したいと考えています。 サンプル株式会社は、以下のいずれかの EC2 インスタンスタイプがそのニーズを満たすと判断します。

インスタンスタイプ メモリ (GiB) vCPU

r3.2xlarge

61

8

r3.4xlarge

122

16

r3.8xlarge

244

32

ユニット単位の目標容量

インスタンスの分量指定を使用すると、ターゲット容量はインスタンスの数 (デフォルト)、またはコア (vCPU)、メモリ (GiB) とストレージ (GB) との要素の組み合わせで表すことができます。 アプリケーションのベース (60 GB の RAM と 8 個の vCPU) を 1 ユニットとして考えることで、サンプル株式会社はこの量の 20 倍で十分ニーズに合うと決定します。 これにより、会社はスポットフリートリクエストのターゲット容量を 20 に設定します。

インスタンスの分量

ターゲット容量の決定後、サンプル株式会社はインスタンスの分量を計算します。 各インスタンスタイプのインスタンスの分量を計算することは、以下のように、ターゲット容量に達するために必要な各インスタンスタイプのユニットの数を決定することです。

  • r3.2xlarge (61.0 GB、8 個の vCPU) = 1/20 ユニット

  • r3.4xlarge (122.0 GB、16 個の vCPU) = 2/20 ユニット

  • r3.8xlarge (244.0 GB、32 個の vCPU) = 4/20 ユニット

これよりサンプル株式会社は、1、2 と 4 のインスタンス分量をスポットフリートリクエストのそれぞれの起動設定に割り当てます。

ユニット時間あたりの入札価格

サンプル株式会社は、入札価格の出発点としてインスタンス時間あたりの「On-Demand price」を使用します。 最近のスポット料金または 2 つの組み合わせを使用することもできます。ユニット時間あたりの入札価格を計算するために、インスタンス時間あたりの出発点の入札価格を分量で割ります。 (例:

インスタンスタイプ オンデマンド価格 インスタンスの分量 ユニット時間あたりの価格

r3.2xLarge

$0.7

1

$0.7

r3.4xLarge

$1.4

2

$0.7

r3.8xLarge

$2.8

4

$0.7

サンプル株式会社は、ユニット時間あたりのグローバルな入札価格として 0.7 USD を入力し、3 つのインスタンスタイプすべてで競争力を高めることもできます。 また、r3.8xlarge の起動条件のなかで、1 ユニット時間あたりの全体入札価格を 0.7 USD、そして 1 ユニット時間あたりの指定入力価格を 0.9 USD と入力することもできます。 スポットフリートをプロビジョニングするための戦略に応じて、サンプル株式会社は将来のコスト削減目的で入札価格を下げることも、中断の可能性を低くする目的で入札価格を上げることもできます。

アクセス許可の確認

スポットフリートのリクエストを作成する前に、サンプル株式会社は必要な権限の IAM ロールがあることを確認します。 詳細については、「スポット群の前提条件」を参照してください。

リクエストを作成する

サンプル株式会社は、スポットフリートリクエストのために次の設定の config.json ファイルを作成します。

Copy
{ "SpotPrice": "0.70", "TargetCapacity": 20, "IamFleetRole": "arn:aws:iam::123456789012:role/my-spot-fleet-role", "LaunchSpecifications": [ { "ImageId": "ami-1a2b3c4d", "InstanceType": "r3.2xlarge", "SubnetId": "subnet-482e4972", "WeightedCapacity": 1 }, { "ImageId": "ami-1a2b3c4d", "InstanceType": "r3.4xlarge", "SubnetId": "subnet-482e4972", "WeightedCapacity": 2 } { "ImageId": "ami-1a2b3c4d", "InstanceType": "r3.8xlarge", "SubnetId": "subnet-482e4972", "SpotPrice": "0.90", "WeightedCapacity": 4 } ] }

サンプル株式会社は、次の request-spot-fleet コマンドを使用してスポットフリートリクエストを作成します。

Copy
aws ec2 request-spot-fleet --spot-fleet-request-config file://config.json

詳細については、「スポット群リクエスト」を参照してください。

受理

配分戦略は、スポットインスタンスが取得されるスポットインスタンスプールを決定します。

lowestPrice 戦略 (デフォルトの戦略) では、受理時にユニットあたりのスポット料金が最低値であるプールからスポットインスタンスが取得されます。20 ユニットの容量を提供するためには、20 の r3.2xlarge インスタンス (20 ÷ 1)、10 のr3.4xlarge インスタンス (20 ÷ 2)、あるいは 5 r3.8xlarge インスタンス (20 ÷ 4) がスポットフリートから起動されることになります。

サンプル株式会社が diversified 戦略を採用する場合、スポットインスタンスは 3 つのすべてのプールから取得されます。スポットフリートは、6 つの r3.2xlarge インスタンス (6 ユニットを提供)、3 つの r3.4xlarge インスタンス (6 ユニットを提供)、そして 2 つのr3.8xlarge インスタンス (8 ユニットを提供) の全部で 20 ユニットを起動します。