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

スポット群リクエスト

スポット群を使用するには、目標容量、インスタンスの 1 つ以上の起動仕様、希望入札価格などを指定したスポット群リクエストを作成します。Amazon EC2 は、スポット料金の変更に応じてスポット群の目標容量を維持しようとします。詳細については、「スポットフリートの仕組み」を参照してください。

スポットフリートを作成し、希望する容量のワンタイム request を送信するか、ターゲット容量の継続した maintain を要求します。どちらのリクエストタイプも、スポットフリートの分散戦略の恩恵を受けす。

ターゲット容量を request すると、スポットフリートは必要な入札を行いますが、容量が低下した場合はスポットインスタンスの補充を試みません。使用可能な容量がない場合、スポットフリートは代替スポットプールで入札を送信しません。

ターゲット容量を maintain する場合、スポットフリートはこのターゲット容量を満たすのに必要な入札を行い、中断されたインスタンスを自動的に補充します。デフォルトでは、スポットフリートはリクエストされたターゲット容量を maintain するように設定されています。

送信後にワンタイム request のターゲット容量を変更することはできません。ターゲット容量を変更するには、リクエストを変更し、新しいリクエストを送信します。

スポット群リクエストは、期限切れになるかお客様によってキャンセルされるまで、アクティブのままになります。スポットフリートリクエストのキャンセル時には、スポットフリートをキャンセルしたらスポットフリートのスポットインスタンスを終了するかどうかを指定できます。

各起動仕様には、Amazon EC2 によるインスタンスの起動に必要な情報 (AMI、インスタンスタイプ、サブネットまたはアベイラビリティーゾーン、そして 1 つ以上のセキュリティグループ) を指定します。

スポット群リクエストの状態

スポット群リクエストは、次に示す状態のいずれかになります。

  • submitted - スポット群リクエストは評価中です。Amazon EC2 は目標数のスポットインスタンスを起動する準備をしています。

  • active - スポット群リクエストは検証済みです。Amazon EC2 は実行中のスポットインスタンスを目標数分、確保しようとしています。リクエストは、変更またはキャンセルされるまで、この状態のままになります。

  • modifying - スポット群リクエストは変更中です。リクエストは、変更が完全に処理されるか、スポット群がキャンセルされるまで、この状態のままになります。ワンタイム request を変更することはできません。この状態は、そのようなスポットリクエストには適用されません。

  • cancelled_running - スポットフリートはキャンセルされました。追加のスポットインスタンスは起動されませんが、既存のスポットインスタンスは中断または手動終了されるまで、引き続き実行されます。リクエストは、すべてのインスタンスが中断されるか終了されるまで、この状態のままになります。

  • cancelled_terminating - スポットフリートはキャンセルされました。スポットインスタンスは終了中です。リクエストは、すべてのインスタンスが終了されるまで、この状態のままになります。

  • cancelled - スポットフリートはキャンセルされました。実行中のスポットインスタンスがありません。スポット群リクエストは、そのインスタンスが終了されてから 2 日後に削除されます。

次の図は、リクエストの状態の遷移を示しています。スポットフリートの制限を超えた場合、リクエストはすぐにキャンセルされます。

 スポット群リクエストの状態

スポット群の前提条件

AWS マネジメントコンソール を使用してスポットフリートを作成した場合、代わりにインスタンスの入札、起動、終了を行う権限をスポットフリートに与える aws-ec2-spot-fleet-role という名前のロールが作成され、スポットフリートリクエストでそのロールが指定されます。AWS CLI または API を使用してスポットフリートを作成した場合、このロール (すでにあれば) を使用できます。または、以下のようにこの目的に独自のロールを手動で作成できます。

To manually create an IAM role with the AmazonEC2SpotFleetRole policy

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

  2. In the navigation pane, choose Roles.

  3. Choose Create New Role.

  4. On the Set Role Name page, type a name for the role and then choose Next Step.

  5. On the Select Role Type page, choose Select next to Amazon EC2 Spot Fleet Role.

  6. On the Attach Policy page, select the AmazonEC2SpotFleetRole policy, and then choose Next Step.

  7. On the Review page, choose Create Role.

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

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

To grant an IAM user permissions for Spot fleet

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

  2. In the navigation pane, choose Policies, and then choose Create Policy.

  3. On the Create Policy page, choose Select next to Create Your Own Policy.

  4. On the Review Policy page, enter a policy name and copy the following text into the Policy Document section.

    Copy
    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:*" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:PassRole", "iam:ListRoles", "iam:ListInstanceProfiles" ], "Resource": "*" } ] }

    The ec2:* enables an IAM user to call all Amazon EC2 API actions. To limit the user to specific API actions, specify those actions instead.

    The iam:PassRole action enables the user to specify the Spot fleet role in a Spot fleet request. The iam:ListRoles action enables the user to enumerate existing roles. The iam:ListInstanceProfiles action enables the user to enumerate existing instance profiles. The Amazon EC2 console uses iam:ListRoles to populate the IAM role list and iam:ListInstanceProfiles to populate the IAM instance profile list. To enable the user to create roles or instance profiles using the console, you must add the following actions: iam:CreateRole, iam:CreateInstanceProfile, and iam:AddRoleToInstanceProfile.

  5. Choose Create Policy.

  6. In the navigation pane, choose Users, and then choose the user who will submit the Spot fleet request.

  7. On the Permissions tab, choose Add permissions.

  8. Choose Attach existing policies directly. Select the policy you created above, choose Next: Review, then 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 コマンドを参照してください。 その他の例については、「スポットフリート設定の例」を参照してください。

スポット群リクエストの作成

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

To create a Spot fleet request using the console

  1. Open the Spot console at https://console.aws.amazon.com/ec2spot.

  2. If you are new to Spot, you see a welcome page; choose Get started. Otherwise, choose Request Spot Instances.

  3. On the Find instance types page, do the following:

    1. For Request type, select either Request or Request and Maintain.

    2. For Target capacity, enter the number of units to request. You can choose instances or performance characteristics that are important to your application workload, such as vCPUs, memory, and storage.

    3. For AMI, choose one of the basic Amazon Machine Images (AMI) provided by AWS, or choose Use custom AMI to use an AMI from our user community, the AWS Marketplace, or one of your own.

    4. For Instance type(s), choose Select. Select the instance types that have the minimum hardware specifications that you need (vCPUs, memory, and storage).

    5. For Allocation strategy, choose the strategy that meets your needs. For more information, see スポットのフリートの配分戦略.

    6. For Network, your account supports either the EC2-Classic and EC2-VPC platforms, or the EC2-VPC platform only. To find out which platforms your account supports, see サポートされているプラットフォーム.

      • [Existing VPC] Select the VPC.

      • [New VPC] Select Create new VPC to go the Amazon VPC console. When you are done, return to the wizard and refresh the list.

      • [EC2-Classic] Select EC2-Classic.

    7. (Optional) For Availability Zones, the default is to let AWS choose the Availability Zones for your Spot instances. If you prefer specific Availability Zones, do the following:

      • [EC2-VPC] Select one or more Availability Zones. If you have more than one subnet in an Availability Zone, select the appropriate subnet from Subnet. To add subnets, select Create new subnet to go to the Amazon VPC console. When you are done, return to the wizard and refresh the list.

      • [EC2-Classic] Select Select specific zone/subnet, and then select one or more Availability Zones.

    8. For Maximum price, you can use automated bidding or specify a bid price. Your Spot instances are not launched if your bid price is lower than the Spot price for the instance types that you selected.

    9. Choose Next.

  4. On the Configure page, do the following:

    1. (Optional) To replace unhealthy instances in a Request and Maintain Spot fleet, select Replace unhealthy instances.

    2. (Optional) If you have any start-up scripts to run, specify them using User data.

    3. (Optional) If you need to connect to your instances, specify your key pair using Key pair name.

    4. (Optional) If you need to launch your Spot instances with an IAM role, specify the role using IAM instance profile.

    5. For Security groups, choose one or more security groups.

    6. [EC2-VPC] If you need to connect to your instances in a VPC, select Enable for Auto-assign IPv4 Public IP.

    7. By default, the request remains in effect until it is fulfilled or you cancel it. To create a request that is valid only during a specific time period, edit Request valid from and Request valid to.

    8. (Optional) By default, we terminate your Spot instances when the request expires. To keep them running after your request expires, clear Terminate instances at expiration.

    9. Choose Review.

  5. On the Review page, verify the launch configuration. To make changes, choose Previous. To download a copy of the launch configuration for use with the AWS CLI, choose JSON config. When you are ready, choose Launch.

  6. On the confirmation page, choose OK. The request type is fleet. When the request is fulfilled, requests of type instance are added, where the state is active and the status is 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"
} 

スポット群の監視

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

To monitor your Spot fleet using the console

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

  2. In the navigation pane, choose Spot Requests.

  3. Select your Spot fleet request. The configuration details are available in the Description tab.

  4. To list the Spot instances for the Spot fleet, choose the Instances tab.

  5. To view the history for the Spot fleet, choose the History tab.

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

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

To modify a Spot fleet request using the console

  1. Open the Spot console at https://console.aws.amazon.com/ec2spot/home/fleet.

  2. Select your Spot fleet request.

  3. Choose Actions, and then choose Modify target capacity.

  4. In Modify target capacity, do the following:

    1. Enter the new target capacity.

    2. (Optional) If you are decreasing the target capacity but want to keep the fleet at its current size, deselect Terminate instances.

    3. Choose 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 状態になり、インスタンスは中断または手動終了されるまで、引き続き実行されます。

To cancel a Spot fleet request using the console

  1. Open the Spot console at https://console.aws.amazon.com/ec2spot/home/fleet.

  2. Select your Spot fleet request.

  3. Choose Actions, and then choose Cancel spot request.

  4. In Cancel spot request, verify that you want to cancel the Spot fleet. To keep the fleet at its current size, deselect Terminate instances. When you are ready, choose 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": []
}