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

スポット群 の詳細

スポット群 は、スポットインスタンス (オプションでは オンデマンドインスタンス) のコレクションまたはフリートです。

スポット群 は、スポット群 リクエストで指定した容量ターゲットを満たすような スポットインスタンス と オンデマンドインスタンス の数を起動しようと試みます。スポット料金が現在のスポット料金を超過し、利用可能な容量がある場合に、スポットインスタンス へのリクエストが実行されます。また、スポット群 は、スポット料金や可能な容量に変化が生じたことによって スポットインスタンス が中断した場合にフリートのターゲット容量を維持するよう試みます。

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

スポット群 でのオンデマンド

インスタンスのキャパシティーを常に確保するには、オンデマンドキャパシティーのリクエストを スポット群 リクエストに含めることができます。スポット群 リクエストでは、希望するターゲットキャパシティーとそのキャパシティーのうちどのくらいがオンデマンドであるかを指定します。このバランスは、利用可能な EC2 キャパシティーと可用性がある場合に起動されるスポットキャパシティーで構成されます。たとえば、スポット群 リクエストでターゲットキャパシティーを 10、オンデマンドキャパシティーを 8 と指定すると、Amazon EC2 は 8 キャパシティーユニットをオンデマンドとして、2 キャパシティーユニット (10-8=2) をスポットとして起動します。

オンデマンド容量に基づくインスタンスタイプの優先順位付け

スポット群 でオンデマンド容量を達成する場合、デフォルトで最低価格のインスタンスタイプが最初に起動されます。OnDemandAllocationStrategyprioritized に設定すると、スポット群 は優先度に従って、オンデマンド容量を達成するために最初に使用するインスタンスタイプを決定します。優先度は起動テンプレートの上書きに割り当てられ、最も高い優先度が最初に起動されます。

たとえば、3 つの起動テンプレートの上書きにそれぞれ異なるインスタンスタイプとして c3.largec4.largec5.large を設定したとします。c5.large のオンデマンド価格は、c4.large より低価格です。c3.large が最低価格です。順番の決定に優先度を使用しない場合、フリートはオンデマンド容量を達成するために最初に c3.large を起動し、次に c5.large を起動します。c4.large の リザーブドインスタンス は未使用のことが多いため、起動テンプレートの上書きの優先度を設定し、c4.largec3.largec5.large の順にすることができます。

スポットインスタンス の配分戦略

スポット群 での スポットインスタンス の配分戦略は、起動仕様に応じた スポットインスタンス プールから スポット群 リクエストを達成する方法を決定します。以下に、スポット群 リクエストで指定できる配分戦略を示します。

lowestPrice

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

diversified

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

InstancePoolsToUseCount

スポットインスタンス は、指定した数のスポットプールに分散されます。このパラメータは lowestPrice と組み合わせて使用する場合にのみ有効です。

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

スポット料金または スポットインスタンス プールの使用可能な容量の変動に伴って スポットインスタンス が終了すると、maintain 型の スポット群 によって代替 スポットインスタンス が起動されます。配分戦略が lowestPrice である場合、スポット群は、スポット料金が現在最低値のプールに代替インスタンスを起動します。配分戦略が diversified である場合には、フリートは残りのプールに代替 スポットインスタンス を分散します。配分戦略が lowestPriceInstancePoolsToUseCount の組み合わせである場合、フリートは最低価格のスポットプールを選択し、指定した数のスポットプールで スポットインスタンス を起動します。

コスト最適化のための スポット群 の設定

スポットインスタンス の使用コストを最適化するには、スポット群 が現在のスポット料金に基づく最も安いインスタンスタイプとアベイラビリティーゾーンの組み合わせを自動的にデプロイするように lowestPrice 配分戦略を指定します。

オンデマンドインスタンス のターゲット容量では、スポット群 は スポットインスタンス の配分戦略 (lowestPrice または diversified のいずれか) を引き続き採用しながら、公開オンデマンド価格に基づいて最も安いインスタンスタイプを常に選択します。

コスト最適化と分散のための スポット群 の設定

安価で同時に分散型の スポットインスタンス のフリートを作成するには、lowestPrice 配分戦略を InstancePoolsToUseCount と組み合わせて使用します。スポット群 は、現在のスポット料金に基づく最も安いインスタンスタイプとアベイラビリティーゾーンの組み合わせを、指定した数のスポットプールに自動的にデプロイします。この組み合わせを使用することで、最も高価な スポットインスタンス を回避できます。

適切な配分戦略の選択

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

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

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

diversified 戦略では、スポット群 は、オンデマンド価格以上のスポット料金のいずれのプールにも スポットインスタンス を起動しません。

安価で分散型のフリートを作成するには、lowestPrice 戦略を InstancePoolsToUseCount と組み合わせて使用します。スポットインスタンス には少数または多数のスポットプールを選択して割り当てることができます。たとえば、バッチ処理を実行する場合は、少数のスポットプール (InstancePoolsToUseCount=2 など) を指定することをお勧めします。これにより、キューのコンピューティング性能を常に確保しながら、削減額を最大化できます。ウェブサービスを実行する場合は、多数のスポットプール (InstancePoolsToUseCount=10 など) を指定し、スポットインスタンス が一時的に使用不可になった場合の影響を最小限に抑えることをお勧めします。

スポット料金の優先

各 スポット群 リクエストには、グローバルな上限料金を含めることも、デフォルト (オンデマンド価格) を使用することもできます。スポット群 は、これを起動条件のデフォルト上限料金として使用します。

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

スポット群 インスタンスの分量指定

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

デフォルトでは、指定したスポット料金は 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. スポット群 のターゲット容量を、インスタンス (デフォルト) あるいは仮想 CPU、メモリ、ストレージまたはスループットからご希望のユニットで設定します。

  2. ユニットあたりの料金を設定します。

  3. 各起動設定で、インスタンスタイプがターゲット容量に対して必要なユニット数である分量を指定します。

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

次の設定の スポット群 を検討します。

  • ターゲット容量 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 のインスタンス分量を スポット群 リクエストのそれぞれの起動設定に割り当てます。

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

サンプル株式会社は、料金の出発点としてインスタンス時間あたりの「オンデマンド価格」を使用します。最近のスポット料金または 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 ファイルを作成します。

{ "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-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 コマンドを使用して スポット群 リクエストを作成します。

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 ユニットを起動します。