スポット群 リクエスト
スポット群 を使用するには、目標容量、インスタンスの 1 つ以上の起動仕様、上限価格などを指定した スポット群 リクエストを作成します。Amazon EC2 は、スポット料金の変更に応じて スポット群 の目標容量を維持しようとします。詳細については、「スポット群 の詳細」を参照してください。
スポット群 リクエストには、request
および maintain
の 2 つのタイプがあります。スポット群 を作成し、希望する容量のワンタイムリクエストを送信するか、ターゲット容量の継続した維持を要求します。どちらのリクエストタイプも、スポット群
の分散戦略の恩恵を受けす。
ワンタイムリクエストを作成すると、スポット群 は必要なリクエストを行いますが、容量が低下した場合は スポットインスタンス の補充を試みません。使用可能な容量がない場合、スポット群 は代替スポットプールでリクエストを送信しません。
ターゲット容量を維持するために、スポット群 はこのターゲット容量を満たすのに必要なリクエストを行い、中断されたインスタンスを自動的に補充します。
送信後にワンタイムリクエストのターゲット容量を変更することはできません。ターゲット容量を変更するには、リクエストを変更し、新しいリクエストを送信します。
スポット群 リクエストは、期限切れになるかお客様によってキャンセルされるまで、アクティブのままになります。スポット群 リクエストのキャンセル時には、スポット群 をキャンセルしたら スポット群 の スポットインスタンス を終了するかどうかを指定できます。
各起動仕様には、Amazon EC2 によるインスタンスの起動に必要な情報 (AMI、インスタンスタイプ、サブネットまたはアベイラビリティーゾーン、そして 1 つ以上のセキュリティグループ) を指定します。
目次
スポット群 リクエストの状態
スポット群 リクエストは、次に示す状態のいずれかになります。
-
submitted
- スポット群 リクエストは評価中です。Amazon EC2 は目標数の スポットインスタンス を起動する準備をしています。 -
active
- スポット群 リクエストは検証済みです。Amazon EC2 は実行中の スポットインスタンス を目標数分、確保しようとしています。リクエストは、変更またはキャンセルされるまで、この状態のままになります。 -
modifying
- スポット群 リクエストは変更中です。リクエストは、変更が完全に処理されるか、スポットフリートがキャンセルされるまで、この状態のままになります。ワンタイムrequest
を変更することはできません。この状態は、そのようなスポットリクエストには適用されません。 -
cancelled_running
- スポット群 はキャンセルされました。追加の スポットインスタンス は起動されませんが、既存の スポットインスタンス は中断または手動終了されるまで、引き続き実行されます。リクエストは、すべてのインスタンスが中断されるか終了されるまで、この状態のままになります。 -
cancelled_terminating
- スポット群 はキャンセルされました。スポットインスタンスは終了中です。リクエストは、すべてのインスタンスが終了されるまで、この状態のままになります。 -
cancelled
- スポット群 はキャンセルされました。実行中のスポットインスタンスがありません。スポット群 リクエストは、そのインスタンスが終了されてから 2 日後に削除されます。
次の図は、リクエストの状態の遷移を示しています。スポット群 の制限を超えた場合、リクエストはすぐにキャンセルされます。

スポット群 参加条件
Amazon EC2 コンソールを使用して スポット群 を作成した場合、お客様の代わりにインスタンスのリクエスト、起動、削除、タグ付けを行う権限を スポット群 に与える aws-ec2-spot-fleet-tagging-role という名前のロールが作成されます。このロールは、スポット群 リクエストを作成するときに選択されます。代わりに AWS CLI または API を使用する場合、このロールが存在していることを確認する必要があります。次のように、[Request Spot Instances] ウィザード (ウィザードの 2 ページ目に進むとロールが作成されます) または IAM コンソールを使用できます。
スポット群 の IAM ロールを作成するには
-
https://console.aws.amazon.com/iam/ にある IAM コンソールを開きます。
-
ナビゲーションペインで [Roles (ロール) ] を選択します。
-
[Select type of trusted entity] ページの [AWS Service] で [EC2]、[EC2 - Spot Fleet Tagging]、[Next: Permissions] の順に選択します。
-
[Attached permissions policy] ページで、[Next: Review] を選択します。
-
[Review] ページで、ロールの名前 (たとえば、
aws-ec2-spot-fleet-tagging-role
) を入力し、[Create role] を選択します。
スポット群 と IAM ユーザー
IAM ユーザーが スポット群 を作成または管理する場合、必ず次のようにして必要な権限を付与してください。
IAM ユーザーに スポット群 の権限を付与するには
-
https://console.aws.amazon.com/iam/ にある IAM コンソールを開きます。
-
ナビゲーションペインで、[Policies] を選択し、次に [Create policy] を選択します。
-
[Create policy] ページで、[JSON] タブを選択し、テキストを以下に置き換えて [Review policy] を選択します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:*" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:ListRoles", "iam:PassRole", "iam:ListInstanceProfiles" ], "Resource": "*" } ] }
ec2:*
は、IAM ユーザーにすべての Amazon EC2 API アクションを呼び出すアクセス許可を付与します。特定の Amazon EC2 API アクションに制限するには、代わりにこれらのアクションを指定します。IAM ユーザーは、既存の IAM ロールを列挙する
iam:ListRoles
アクション、スポット群 ロールを指定するiam:PassRole
アクション、および既存のインスタンスプロファイルを列挙するiam:ListInstanceProfiles
アクションを呼び出すには、アクセス許可が必要です。(オプション) IAM ユーザーが IAM コンソールを使用してロールまたはインスタンスプロファイルを作成できるようにするには、次のアクションをポリシーに追加する必要もあります。
-
iam:AddRoleToInstanceProfile
-
iam:AttachRolePolicy
-
iam:CreateInstanceProfile
-
iam:CreateRole
-
iam:GetRole
-
iam:ListPolicies
-
-
[Review policy] ページでポリシー名と説明を入力し、[Create policy] を選択します。
-
ナビゲーションペインで [Users] を選択し、ユーザーを選択します。
-
[Permissions] タブで、[Add permissions] を選択します。
-
[Attach existing policies directly] を選択します。上記で作成したポリシーを選択し、[Next: Review] を選択します。
-
[Add permissions] を選択します。
スポット群 ヘルスチェック
スポット群 は、2 分ごとにフリートの スポットインスタンス のヘルスステータスをチェックします。インスタンスのヘルスステータスは healthy
または unhealthy
です。スポット群 は Amazon EC2 によって提供されるステータスチェックを使用して、インスタンスのヘルスステータスを判断します。インスタンスステータスチェックとシステムヘルスチェックのいずれかのステータスが、連続した
3 回のヘルスチェックで impaired
である場合、インスタンスのヘルスステータスは unhealthy
になります。それ以外の場合、ヘルスステータスは healthy
になります。詳細については、「インスタンスのステータスチェック」を参照してください。
異常なインスタンスは置き換えるよう スポット群 を設定できます。ヘルスチェックの置換を有効にすると、ヘルスステータスが unhealthy
と報告された後でインスタンスが置き換えられます。異常なインスタンスを置き換えている間、数分間にわたり スポット群 がターゲット容量を下回る場合があります。
要件
-
ヘルスチェックの置換は、1 回限りの スポット群 ではなく、ターゲット容量を維持する スポット群 でのみサポートされます。
-
作成時のみ異常なインスタンスを置き換えるよう スポット群 を設定できます。
-
IAM ユーザーは、
ec2:DescribeInstanceStatus
アクションを呼び出すアクセス許可を持っている場合のみ、ヘルスチェックの置換を使用できます。
スポット群 リクエストの準備
スポット群 リクエストを作成する前に、「ベストプラクティス」を確認してください。スポット群 リクエストを計画するときにこれらのベストプラクティスを使用して、できるだけ低価格でインスタンスのタイプをプロビジョニングできるようにします。また、次のことをお勧めします。
-
目的のターゲット容量のワンタイムリクエストを送信する スポット群 と、ターゲット容量の継続した維持を行うスポットフリートのどちらを作成するかを決定します。
-
アプリケーションの要件を満たすインスタンスタイプを決定します。
-
スポット群 リクエストの目標容量を決定します。インスタンスまたはカスタムユニットでターゲット容量を設定できます。 詳細については、「スポット群 インスタンスの分量指定」を参照してください。
-
インスタンス分量指定を使用している場合は、ユニット当りの料金を決定します。インスタンス時間当りの料金の計算は、インスタンス時間当たりの料金をそのインスタンスが表すユニット数 (または分量) で割って算出します (インスタンス分量指定を使用する場合、ユニット当りのデフォルトの料金は 1 インスタンス時間当りの料金となります)。
-
スポット群 のリクエストに対して可能なオプションを確認します。詳細については、「AWS CLI Command Reference」の request-spot-fleet コマンドを参照してください。 その他の例については、「スポット群 設定例」を参照してください。
スポット群 リクエストのサービスにリンクされたロール
スポット群 をリクエストすると、Amazon EC2 はサービスにリンクされたロールを作成します。サービスにリンクされたロールには、Amazon EC2 がユーザーに代わって他の AWS サービスを呼び出すために必要なすべての権限が含まれます。詳細については、IAM ユーザーガイドの「サービスにリンクされたロールの使用」を参照してください。
Amazon EC2 は、[AWSServiceRoleForEC2SpotFleet] というサービスにリンクされたロールを使用して、次のアクションを実行します。
-
ec2:RequestSpotInstances
- スポットインスタンス のリクエスト -
ec2:TerminateInstances
- スポットインスタンス の終了 -
ec2:DescribeImages
- スポットインスタンス のAmazon Machine Image (AMI) の表示 -
ec2:DescribeInstanceStatus
- スポットインスタンス のステータスの表示 -
ec2:DescribeSubnets
- スポットインスタンス のサブネットの表示 -
ec2:CreateTags
- スポットインスタンス へのタグの追加
スポット群 をリクエストすると、Amazon EC2 は [AWSServiceRoleForEC2Spot] ロールを作成します。詳細については、「スポットインスタンス リクエストのサービスにリンクされたロール」を参照してください。
Amazon EC2 がこのサービスにリンクされたロールのサポートを開始した 2017 年 11 月以前にアクティブな スポット群 リクエストを行った場合は、Amazon EC2 が AWS アカウントで [AWSServiceRoleForEC2SpotFleet] ロールを作成しています。詳細については、IAM ユーザーガイドの「アカウントに新しいロールが表示される」を参照してください。
スポット群 を使用する必要がなくなった場合は、[AWSServiceRoleForEC2SpotFleet] ロールを削除することをお勧めします。このロールがアカウントから削除された後で、スポット群 をリクエストすると、Amazon EC2 はロールを再度作成します。
スポット群 リクエストを作成する
スポット群 リクエストの作成時、起動する スポットインスタンス に関する情報 (インスタンスタイプや支払う予定の上限料金など) を指定する必要があります。
コンソールを使用して スポット群 リクエストを作成するには
-
スポットコンソール (https://console.aws.amazon.com/ec2spot) を開きます。
-
スポットを初めて使用する場合は、ウェルカムページが表示されるので、そこで [Get started] を選択します。それ以外の場合は、[Request Spot Instances] を選択します。
-
[Request type] で、[Request] または [Request and Maintain] のいずれかを選択します。
-
[Target capacity] に、リクエストの単位数を入力します。アプリケーションのワークロードに重要なインスタンスまたはパフォーマンスのプロパティ (vCPU、メモリ、ストレージなど) を選択できます。リクエストタイプが [Request and Maintain] の場合、ターゲット容量を 0 に指定して後で容量を追加できます。
-
[Requirements] で、以下を実行します
-
(オプション) [スポットフリート] [Launch template] で、起動テンプレートを選択します。起動テンプレートでは Amazon Machine Image (AMI) を指定する必要があります。起動テンプレートを指定した場合、スポットフリートを使用して AMI を上書きできないためです。
-
[AMI] では、AWS に用意されたベーシック Amazon Machine Images (AMI) のいずれかを選択するか、[Use custom AMI] を選択してユーザーコミュニティ の AMI、AWS Marketplace の AMI または独自の AMI を使用します。
-
[Instance type(s)] で [Select] を選択します。必要最小限のハードウェア仕様 (vCPU、メモリ、ストレージ) でインスタンスタイプを選択します。
-
[Network] の場合、アカウントでサポートされるのは EC2-Classic および EC2-VPC プラットフォーム、または EC2-VPC プラットフォームのみです。アカウントでサポートされるプラットフォームを調べるには、「サポートされているプラットフォーム」を参照してください。
[既存の VPC] VPC を選択します。
[新しい VPC] [Create new VPC] を選択して Amazon VPC コンソールにアクセスします。完了したら、ウィザードに戻ってリストを更新します。
[EC2-Classic] [EC2-Classic] を選択します。
-
(オプション) [アベイラビリティーゾーン] には、デフォルトでは AWS により スポットインスタンス のアベイラビリティーゾーンが選択されます。希望する場合には、特定のアベイラビリティーゾーンを設定できます。
[EC2-VPC] 1 つ以上のアベイラビリティーゾーンを選択します。アベイラビリティーゾーンに複数のサブネットがある場合、[Subnet] から適切なサブネットを選択します。サブネットを追加するには、[Create new subnet] を選択して Amazon VPC にアクセスします。完了したら、ウィザードに戻ってリストを更新します。
[EC2-Classic] [Select specific zone/subnet] を選択し、1 つ以上のアベイラビリティーゾーンを選択します。
-
(オプション) ストレージを追加するには、インスタンスタイプに応じて追加のインスタンスストアボリュームまたは EBS ボリュームを指定します。さらに、EBS 最適化を有効にできます。
-
(オプション) デフォルトでは、インスタンスに対して基本モニタリングが有効になります。詳細モニタリングを有効にするには、[Enable CloudWatch detailed monitoring] を選択します。
-
(オプション) [Request and Maintain] スポット群 で異常なインスタンスを置き換える場合は、[Replace unhealthy instances] を選択します。
-
(オプション) ハードウェア専有 スポットインスタンス を実行するには、[Tenancy] の [Dedicated - run a dedicated instance] を選択します。
-
(オプション) デフォルトでは、スポットサービスは中断されると スポットインスタンス を削除します。フリートタイプが
maintain
である場合、中断時に スポットインスタンス を休止または停止するように指定できます。これを行うには、[Interruption behavior] から対応するオプションを選択します。 -
[Security groups] で、1 つまたは複数のセキュリティグループを選択します。
-
[EC2-VPC] VPC 内のインスタンスに接続する必要がある場合、[Auto-assign IPv4 Public IP] を有効にすることができます。
-
(オプション) インスタンスに接続する必要がある場合は、[Key pair name] を使用してキーペアを指定します。
-
(オプション) IAM ロールを指定して スポットインスタンス を起動するには、[IAM instance profile] のロールを選択します。
-
(オプション) 起動スクリプトを実行するには、スクリプトを [User data] にコピーします。
-
(オプション) タグを追加するには、[Add new tag] を選択し、そのタグのキーと値を入力します。各タグについて、これを繰り返します。
-
-
[Spot request fulfillment] で、以下を実行します。
-
[Allocation strategy] で、お客様のニーズに合った戦略を選択します。詳細については、「スポット群 配分戦略」を参照してください。
-
[Maximum price] では、デフォルトの上限料金(オンデマンド料金)を使用するか、支払う予定の上限料金を指定することができます。上限価格が、選択したインスタンスタイプのスポット料金より低い場合、スポットインスタンス は起動されません。
-
(オプション) 特定の期間中のみ有効なリクエストを作成するには、[Request valid from] および [Request valid until] を編集します。
-
(オプション) デフォルトでは、リクエストの有効期限が切れると スポットインスタンス が終了されます。リクエストの有効期限が切れた後も実行し続ける場合、[Terminate instances at expiration] をオフにします。
-
-
(オプション) ロードバランサーを使用する スポットインスタンス を登録するには、[Receive traffic from one or more load balancers] を選択して、1 つ以上の Classic Load Balancer またはターゲットグループを選択します。
-
(オプション) AWS CLI で使用される起動設定のコピーをダウンロードするには、[JSON config] を選択します。
-
[Launch] を選択します。
リクエストタイプは
fleet
です。リクエストが実行されると、タイプinstance
のリクエストが追加されます。このとき、状態はactive
になり、ステータスはfulfilled
になります。
AWS CLI を使用して スポット群 リクエストを作成するには
-
スポット群 リクエストを作成するには、以下の request-spot-fleet コマンドを使用します。
aws ec2 request-spot-fleet
--spot-fleet-request-config file://config.json
設定ファイルの例については、「スポット群 設定例」を参照してください。
出力例を次に示します。
{ "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" }
スポット群 のモニタリング
上限料金がスポット料金を超え、容量が利用可能な場合、スポット群 は スポットインスタンス を起動します。スポットインスタンス は中断されるか手動終了されるまで実行されます。
コンソールを使用して スポット群 を監視するには
-
https://console.aws.amazon.com/ec2/) にある Amazon EC2 コンソールを開きます。
-
ナビゲーションペインで、[Spot Requests] を選択します。
-
スポット群 リクエストを選択します。設定の詳細が [Description] タブに表示されます。
-
スポット群 の スポットインスタンス を一覧表示するには、[Instances] タブを選択します。
-
スポット群 の履歴を表示するには、[History] タブを選択します。
AWS CLI を使用して スポット群 を監視するには
スポット群 リクエストの詳細を表示するには、以下の describe-spot-fleet-requests コマンドを使用します。
aws ec2 describe-spot-fleet-requests
指定した スポット群 の スポットインスタンス の詳細を表示するには、以下の describe-spot-fleet-instances コマンドを使用します。
aws ec2 describe-spot-fleet-instances --spot-fleet-request-id
sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE
指定した スポット群 リクエストの履歴を表示するには、以下の describe-spot-fleet-request-history コマンドを使用します。
aws ec2 describe-spot-fleet-request-history --spot-fleet-request-id
sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE
--start-time 2015-05-18T00:00:00Z
スポット群 リクエストの変更
以下のタスクを完了するように、アクティブな スポット群 リクエストを変更できます。
-
ターゲット容量を増やします
-
ターゲット容量を減らします
注記
1 回限りの スポット群 リクエストを変更することはできません。
ターゲット容量を増やす場合、スポット群 は、スポット群 リクエストの配分戦略に従って追加のスポットインスタンスを起動します。 配分戦略が lowestPrice
の場合、スポット群 は、スポット群 リクエストの最低価格の スポットインスタンス プールからインスタンスを起動します。配分戦略が diversified
の場合、スポット群 は、スポット群 リクエストのプールにインスタンスを分散します。
ターゲット容量を減らす場合、スポット群 は新しいターゲット容量を超えるすべてのオープンリクエストをキャンセルします。スポット群 のサイズが新しいターゲット容量に達するとスポット群のスポットインスタンスが終了されるようにリクエストできます。配分戦略が
lowestPrice
である場合は、スポット群 の最低単価のインスタンスが終了されます。配分戦略が diversified
である場合は、スポット群 のプール全体でインスタンスが終了されます。あるいは、スポット群 の現在のサイズを保持するようにリクエストすることもできますが、中断または手動終了されたスポットインスタンスへの置き換えはできません。
ターゲット容量が減ったために スポット群 によってインスタンスが削除される場合、インスタンスは スポットインスタンス の中断通知を受け取ります。
コンソールを使用して スポット群 リクエストを変更するには
-
スポットコンソール (https://console.aws.amazon.com/ec2spot/home/fleet) を開きます。
-
スポット群 リクエストを選択します。
-
[Actions]、[Modify target capacity] の順に選択します。
-
[Modify target capacity] で、以下の操作を実行します。
-
新しいターゲット容量を入力します。
-
(オプション) ターゲット容量を小さくしてもスポットフリートの現在のサイズを保持する場合は、[Terminate instances] の選択を解除します。
-
[Submit] を選択します。
-
AWS CLI を使用して スポット群 リクエストを変更するには
次の modify-spot-fleet-request コマンドを使用して、指定する スポット群 リクエストのターゲット容量を更新します。
aws ec2 modify-spot-fleet-request --spot-fleet-request-id
sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE
--target-capacity20
前のコマンドを以下のように変更することで、結果的にいずれの スポットインスタンス も終了せずに、指定した スポット群 のターゲット容量を減らすことができます。
aws ec2 modify-spot-fleet-request --spot-fleet-request-id
--excess-capacity-termination-policy NoTerminationsfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE
--target-capacity10
スポット群 リクエストのキャンセル
スポット群 を使用しなくなったら、スポット群 リクエストをキャンセルできます。これにより、スポット群 に関連付けられているすべてのスポットリクエストがキャンセルされるため、その
スポット群 の新しいスポットインスタンスは起動されなくなります。スポット群 の スポットインスタンス を終了するかどうか指定する必要があります。インスタンスを終了する場合、スポット群
クエストは cancelled_terminating
状態になります。それ以外の場合、スポットフリートリクエストは cancelled_running
状態になり、インスタンスは中断または手動終了されるまで、引き続き実行されます。
コンソールを使用して スポット群 リクエストをキャンセルするには
-
スポットコンソール (https://console.aws.amazon.com/ec2spot/home/fleet) を開きます。
-
スポット群 リクエストを選択します。
-
[Actions]、[Cancel spot request] の順に選択します。
-
[Cancel spot request] で、スポットフリートをキャンセルしてもよいか確認します。スポットフリートの現在のサイズを保持するには、[Terminate instances] の選択を解除します。準備ができたら、[Confirm] を選択します。
AWS CLI を使用して スポット群 リクエストをキャンセルするには
指定したスポットフリートリクエストをキャンセルし、インスタンスを終了するには、以下の cancel-spot-fleet-requests コマンドを使用します。
aws ec2 cancel-spot-fleet-requests --spot-fleet-request-ids
sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE
--terminate-instances
出力例を次に示します。
{ "SuccessfulFleetRequests": [ { "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE", "CurrentSpotFleetRequestState": "cancelled_terminating", "PreviousSpotFleetRequestState": "active" } ], "UnsuccessfulFleetRequests": [] }
前のコマンドを以下のように変更することで、インスタンスを終了せずに、指定した スポット群 リクエストをキャンセルできます。
aws ec2 cancel-spot-fleet-requests --spot-fleet-request-ids
sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE
--no-terminate-instances
出力例を次に示します。
{ "SuccessfulFleetRequests": [ { "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE", "CurrentSpotFleetRequestState": "cancelled_running", "PreviousSpotFleetRequestState": "active" } ], "UnsuccessfulFleetRequests": [] }