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

スポットフリートリクエスト

スポットフリートを使用するには、目標容量、インスタンスの 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 ロールを作成するには

  1. https://console.aws.amazon.com/iam/ にある IAM コンソールを開きます。

  2. ナビゲーションペインで [Roles (ロール) ] を選択します。

  3. [Create new role] を選択します。

  4. [Select role type] ページで、[Amazon EC2 Spot Fleet Role] の隣にある [Select] を選択します。

  5. [Attach Policy] ページで、AmazonEC2SpotFleetRole ポリシーを選択し、[Next Step] を選択します。

  6. [Set role name and review] ページで、ロールの名前 (たとえば、aws-ec2-spot-fleet-tagging-role) を入力し、[Create role] を選択します。

  7. 起動するインスタンスに自動的にタグを付けるアクセス許可をスポットフリートに付与するには、新しいロールの行をクリックし、[Attach Policy] を選択します。次に、[AmazonEC2SpotFleetTaggingRole] ポリシーを選択し、[Attach Policy] を選択します。[AmazonEC2SpotFleetRole] ポリシーの横にある [Detach Policy] を選択します。

スポットフリートと IAM ユーザー

IAM ユーザーがスポットフリートを作成または管理する場合、必ず次のようにして必要な権限を付与してください。

IAM ユーザーにスポットフリートの権限を付与するには

  1. https://console.aws.amazon.com/iam/ にある IAM コンソールを開きます。

  2. ナビゲーションペインで、[Policies] を選択し、次に [Create policy] を選択します。

  3. [Create Policy] ページで、[Create Your Own Policy] の横の [Select] を選択します。

  4. [Review Policy] ページでポリシー名を入力し、次のテキストを [Policy Document] に追加します。

    Copy
    { "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

  5. [Create Policy] を選択します。

  6. ナビゲーションペインで、[Users] を選択し、スポットフリートリクエストを送信するユーザーを選択します。

  7. [Permissions] タブで、[Add permissions] を選択します。

  8. [Attach existing policies directly] を選択します。上記で作成したポリシーを選択してから、[Next: Review]、[Add permissions] の順に選択します。

スポットフリートのヘルスチェック

スポットフリートは、2 分ごとにフリートのスポットインスタンスのヘルスステータスをチェックします。インスタンスのヘルスステータスは healthy または unhealthy です。スポットフリートは Amazon EC2 によって提供されるステータスチェックを使用して、インスタンスのヘルスステータスを判断します。インスタンスステータスチェックとシステムヘルスチェックのいずれかのステータスが、連続した 3 回のヘルスチェックで impaired である場合、インスタンスのヘルスステータスは unhealthy になります。それ以外の場合、ヘルスステータスは healthy になります。詳細については、「インスタンスのステータスチェック」を参照してください。

異常なインスタンスは置き換えるようスポットフリートを設定できます。ヘルスチェックの置換を有効にすると、ヘルスステータスが unhealthy と報告された後でインスタンスが置き換えられます。異常なインスタンスを置き換えている間、数分間にわたりスポットフリートがターゲット容量を下回る場合があることに注意してください。

要件

  • ヘルスチェックの置換は、1 回限りのスポットフリートではなく、ターゲット容量を維持するスポットフリートでのみサポートされます。

  • 作成時のみ異常なインスタンスを置き換えるようスポットフリートを設定できます。

  • IAM ユーザーは、ec2:DescribeInstanceStatus アクションを呼び出すアクセス許可を持っている場合のみ、ヘルスチェックの置換を使用できます。

スポットフリートリクエストの準備

スポットフリートリクエストを作成する前に、「ベストプラクティス」を確認してください。スポットフリートリクエストを計画するときにこれらのベストプラクティスを使用して、できるだけ低価格でインスタンスのタイプをプロビジョニングできるようにします。また、次のことをお勧めします。

  • 目的のターゲット容量のワンタイム request を送信するスポットフリートと、ターゲット容量の継続した maintain を行うスポットフリートのどちらを作成するかを決定します。

  • アプリケーションの要件を満たすインスタンスタイプを決定します。

  • スポットフリートリクエストの目標容量を決定します。インスタンスまたはカスタムユニットでターゲット容量を設定できます。 詳細については、「スポットフリートインスタンスの重み付け」を参照してください。

  • 1 インスタンス時間当りの入札価格を決定します。 低い価格で入札すると、コストをさらに低く抑えることができ、高い価格で入札すると、中断の可能性を下げることができます。

  • インスタンス分量指定を使用している場合は、ユニット当りの入札価格を決定します。 インスタンス時間当りの入札価格の計算は、インスタンス時間当たりの入札価格をそのインスタンスが表すユニット数 (または分量) で割って算出します (インスタンス分量指定を使用する場合、ユニット当りのデフォルトの入札価格は 1 インスタンス時間当りの入札価格となります)。

  • スポットフリートのリクエストに対して可能なオプションを確認します。 詳細については、「AWS Command Line Interface Reference」の request-spot-fleet コマンドを参照してください。 その他の例については、「スポットフリート設定の例」を参照してください。

スポットフリートリクエストの作成

スポットフリートリクエストの作成時、起動するスポットインスタンスに関する情報 (インスタンスタイプやスポット料金など) を指定する必要があります。

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

  1. スポットコンソール (https://console.aws.amazon.com/ec2spot) を開きます。

  2. スポットを初めて使用する場合は、ウェルカムページが表示されるので、そこで [Get started] を選択します。それ以外の場合は、[Request Spot Instances] を選択します。

  3. [Find instance types] ページで、以下の操作を実行します。

    1. [Request type] で、[Request] または [Request and Maintain] を選択します。

    2. [Target capacity] に、リクエストの単位数を入力します。アプリケーションのワークロードに重要なインスタンスまたはパフォーマンスのプロパティ (vCPU、メモリ、ストレージなど) を選択できます。

    3. [AMI] では、AWS に用意されたベーシック Amazon Machine Images (AMI) のいずれかを選択するか、[Use custom AMI] を選択してユーザーコミュニティ の AMI、AWS Marketplace の AMI または独自の AMI を使用します。

    4. [Instance type(s)] で [Select] を選択します。必要最小限のハードウェア仕様 (vCPU、メモリ、ストレージ) でインスタンスタイプを選択します。

    5. [Allocation strategy] で、お客様のニーズに合った戦略を選択します。詳細については、「スポットのフリートの配分戦略」を参照してください。

    6. [Network] の場合、アカウントでサポートされるのは EC2-Classic および EC2-VPC プラットフォーム、または EC2-VPC プラットフォームのみです。アカウントでサポートされるプラットフォームを調べるには、「サポートされているプラットフォーム」を参照してください。

      [既存の VPC] VPC を選択します。

      [新しい VPC] [Create new VPC] を選択して Amazon VPC コンソールにアクセスします。完了したら、ウィザードに戻ってリストを更新します。

      [EC2-Classic] [EC2-Classic] を選択します。

    7. (オプション) [Availability Zones] には、デフォルトでは AWS がスポットインスタンスのアベイラビリティーゾーンを選択します。希望する場合には、特定のアベイラビリティーゾーンを設定できます。

      [EC2-VPC] 1 つ以上のアベイラビリティーゾーンを選択します。アベイラビリティーゾーンに複数のサブネットがある場合、[Subnet] から適切なサブネットを選択します。サブネットを追加するには、[Create new subnet] を選択して Amazon VPC にアクセスします。完了したら、ウィザードに戻ってリストを更新します。

      [EC2-Classic] [Select specific zone/subnet] を選択し、1 つ以上のアベイラビリティーゾーンを選択します。

    8. [Maximum price] では、自動入札を使用するか、入札価格を指定できます。入札価格が、選択したインスタンスタイプのスポット料金より低い場合、スポットインスタンスは起動されません。

    9. [Next] を選択します。

  4. [Configure] ページで以下の操作を実行します。

    1. (オプション) ストレージを追加するには、インスタンスタイプに応じて追加のインスタンスストアボリュームまたは EBS ボリュームを指定します。さらに、EBS 最適化を有効にできます。

    2. (オプション) デフォルトでは、インスタンスに対して基本モニタリングが有効になります。詳細モニタリングを有効にするには、[Enable CloudWatch detailed monitoring] を選択します。

    3. (オプション) [Request and Maintain] スポットフリートで異常なインスタンスを置き換える場合は、[Replace unhealthy instances] を選択します。

    4. (オプション) ハードウェア専有スポットインスタンスを実行するには、[Tenancy] の [Dedicated - run a dedicated instance] を選択します。

    5. (オプション) デフォルトでは、Amazon EC2 は中断されるとスポットインスタンスを削除します。フリートタイプが maintain である場合、中断時にスポットインスタンスを停止するように指定できます。そのためには、[Interruption behavior] の [Stop] を選択します。

    6. (オプション) 起動スクリプトを実行するには、スクリプトを [User data] にコピーします。

    7. (オプション) タグを追加するには、[Add new tag] を選択し、そのタグのキーと値を入力します。各タグについて、これを繰り返します。

    8. (オプション) インスタンスに接続する必要がある場合は、[Key pair name] を使用してキーペアを指定します。

    9. (オプション) IAM ロールを指定してスポットインスタンスを起動するには、[IAM instance profile] を使用してそのロールを指定します。

    10. [Security groups] で、1 つまたは複数のセキュリティグループを選択します。

    11. [EC2-VPC] VPC 内のインスタンスに接続する必要がある場合、[Auto-assign IPv4 Public IP] を有効にすることができます。

    12. (オプション) 特定の期間中のみ有効なリクエストを作成するには、[Request valid from] および [Request valid from] を編集します。

    13. (オプション) デフォルトでは、リクエストの有効期限が切れるとスポットインスタンスが終了されます。リクエストの有効期限が切れた後も実行し続ける場合、[Terminate instances at expiration] をオフにします。

    14. [Review] を選択します。

  5. [Review] ページで、起動設定を確認します。設定を変更するには、[Previous] を選択します。AWS CLI で使用される起動設定のコピーをダウンロードするには、[JSON config] を選択します。準備ができたら、[Launch] を選択します。

  6. 確認ページで、[OK] を選択します。リクエストタイプは fleet です。リクエストが実行されると、タイプ instance のリクエストが追加されます。このとき、状態は active になり、ステータスは fulfilled になります。

AWS CLI を使用してスポットフリートリクエストを作成するには

スポットフリートリクエストを作成するには、以下の request-spot-fleet コマンドを使用します。

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

設定ファイルの例については、「スポットフリート設定の例」を参照してください。

出力例を次に示します。

{
    "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE"
} 

スポットフリートの監視

スポット料金が入札価格を下回っていると、スポットフリートのスポットインスタンスが起動されます。スポットインスタンスは、その入札価格がスポット料金を超えることがなくなるまで、またはお客様が自らスポットインスタンスを削除するまで実行されます。

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

  1. https://console.aws.amazon.com/ec2/) にある Amazon EC2 コンソールを開きます。

  2. ナビゲーションペインで、[Spot Requests] を選択します。

  3. スポットフリートリクエストを選択します。設定の詳細が [Description] タブに表示されます。

  4. スポットフリートのスポットインスタンスを一覧表示するには、[Instances] タブを選択します。

  5. スポットフリートの履歴を表示するには、[History] タブを選択します。

AWS CLI を使用してスポットフリートを監視するには

スポットフリートリクエストの詳細を表示するには、以下の describe-spot-fleet-requests コマンドを使用します。

Copy
aws ec2 describe-spot-fleet-requests

指定したスポットフリートのスポットインスタンスの詳細を表示するには、以下の describe-spot-fleet-instances コマンドを使用します。

Copy
aws ec2 describe-spot-fleet-instances --spot-fleet-request-id sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE

指定したスポットフリートリクエストの履歴を表示するには、以下の describe-spot-fleet-request-history コマンドを使用します。

Copy
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 である場合は、スポットフリートのプール全体でインスタンスが終了されます。あるいは、スポットフリートの現在のサイズを保持するようにリクエストすることもできますが、中断または手動終了されたスポットインスタンスへの置き換えはできません。

ターゲット容量が減ったためにスポットフリートによってインスタンスが削除される場合、インスタンスはスポットインスタンスの中断通知を受け取ります。

コンソールを使用してスポットフリートリクエストを変更するには

  1. スポットコンソール (https://console.aws.amazon.com/ec2spot/home/fleet) を開きます。

  2. スポットフリートリクエストを選択します。

  3. [Actions]、[Modify target capacity] の順に選択します。

  4. [Modify target capacity] で、以下の操作を実行します。

    1. 新しいターゲット容量を入力します。

    2. (オプション) ターゲット容量を小さくしてもスポットフリートの現在のサイズを保持する場合は、[Terminate instances] の選択を解除します。

    3. [Submit] を選択します。

AWS CLI を使用してスポットフリートリクエストを変更するには

次のmodify-spot-fleet-requestコマンドを使用して、指定するスポットフリートリクエストのターゲット容量を更新します。

Copy
aws ec2 modify-spot-fleet-request --spot-fleet-request-id sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE --target-capacity 20

前のコマンドを以下のように変更することで、結果的にいずれのスポットインスタンスも終了せずに、指定したスポットフリートのターゲット容量を減らすことができます。

Copy
aws ec2 modify-spot-fleet-request --spot-fleet-request-id sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE --target-capacity 10 --excess-capacity-termination-policy NoTermination

スポットフリートリクエストのキャンセル

スポットフリートを使用しなくなったら、スポットフリートリクエストをキャンセルできます。これにより、スポットフリートに関連付けられているすべてのスポットリクエストがキャンセルされるため、そのスポットフリートの新しいスポットインスタンスは起動されなくなります。スポットフリートのスポットインスタンスを削除するかどうか指定する必要があります。インスタンスを削除する場合、スポットフリートリクエストは cancelled_terminating 状態になります。それ以外の場合、スポットフリートリクエストは cancelled_running 状態になり、インスタンスは中断または手動終了されるまで、引き続き実行されます。

コンソールを使用してスポットフリートリクエストをキャンセルするには

  1. スポットコンソール (https://console.aws.amazon.com/ec2spot/home/fleet) を開きます。

  2. スポットフリートリクエストを選択します。

  3. [Actions]、[Cancel spot request] の順に選択します。

  4. [Cancel spot request] で、スポットフリートをキャンセルしてもよいか確認します。スポットフリートの現在のサイズを保持するには、[Terminate instances] の選択を解除します。準備ができたら、[Confirm] を選択します。

AWS CLI を使用してスポットフリートリクエストをキャンセルするには

指定したスポットフリートリクエストをキャンセルし、インスタンスを削除するには、以下の cancel-spot-fleet-requests コマンドを使用します。

Copy
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": []
}

前のコマンドを以下のように変更することで、インスタンスを終了せずに、指定したスポットフリートリクエストをキャンセルできます。

Copy
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": []
}