スポットインスタンス の操作 - Amazon Elastic Compute Cloud

スポットインスタンス の操作

スポットインスタンスを使用するには、希望するインスタンス数、インスタンスタイプ、アベイラビリティーゾーンを含む、スポットインスタンスリクエストを作成します。キャパシティが利用可能になると、Amazon EC2 がすぐにリクエストを受理します。それ以外の場合、Amazon EC2 は、リクエストが受理できるようになるか、お客様がリクエストをキャンセルするまで待機します。

次の図にスポットインスタンスリクエストが動作する様子を示します。Amazon EC2がスポットインスタンスを中断した場合、あるいはユーザーがスポットインスタンスを停止した場合に、リクエストが再度開かれるかどうかは、リクエストタイプ (ワンタイムまたは永続) によって決定されることに注意してください 。リクエストが永続リクエストの場合、スポットインスタンスの中断後、リクエストが再度開かれます。リクエストが永続的で、スポットインスタンスがユーザーにより停止された場合、リクエストはスポットインスタンスが開始されるまでは開かれません。


				スポットインスタンスリクエストの仕組み。

スポットインスタンスリクエストの状態

スポットインスタンスリクエストは、次に示すいずれかの状態を取ります。

  • open – リクエストは受理されるまで待機状態です。

  • active – リクエストは受理されており、関連付けられたスポットインスタンスが存在します。

  • failed – リクエストの 1 つ以上のパラメータが正しくありません。

  • closed – スポットインスタンスは中断または終了されました。

  • disabled – スポットインスタンスがユーザーにより停止されました。

  • cancelled – このリクエストはユーザーによりキャンセルされたか、リクエストの有効期限が切れました。

次の図は、 リクエストの状態の遷移を示しています。遷移はリクエストのタイプ (ワンタイムまたは永続) によって異なります。


					スポットインスタンスリクエストの状態。

ワンタイムスポットインスタンスリクエストは、Amazon EC2 がスポットインスタンスを起動するか、リクエストの有効期限が切れるか、またはユーザーがリクエストをキャンセルするまでアクティブ状態を維持します。利用できるキャパシティがない場合、スポットインスタンスは終了し、スポットインスタンスのリクエストは終了します。

永続スポットインスタンスリクエストは、リクエストが受理された後も、リクエストの有効期限が切れるかユーザーによりキャンセルされるまで、アクティブ状態を維持します。キャパシティを利用できない場合は、スポットインスタンスが中断されます。インスタンスが中断された後に、キャパシティが再び利用可能になると、スポットインスタンスが開始 (停止している場合)、あるいは再開 (休止状態の場合) されます。スポットインスタンスは、停止して、キャパシティを利用できるようになったとき再び開始することができます。スポットインスタンスが (停止状態にあるか実行状態にあるかに関係なく) 終了した場合には、スポットインスタンスリクエストが再び開かれ、Amazon EC2 により新しいスポットインスタンスが起動されます。詳細については、「スポットインスタンスを停止する」、「スポットインスタンスを開始する」、および「スポットインスタンスを終了する」を参照してください。

スポットインスタンスリクエストの状態と、起動済みのスポットインスタンスのステータスを追跡することができます。詳細については、「スポットリクエストステータス」を参照してください。

スポットインスタンス のテナンシーの指定

スポットインスタンスは、シングルテナントのハードウェア上で実行できます。ハードウェア専有 スポットインスタンス は、他の AWS アカウントに属するインスタンスからは物理的に分離されます。詳細については、「Dedicated Instances」および「Amazon EC2 ハードウェア専有インスタンス」の製品ページを参照してください。

ハードウェア専有スポットインスタンスを使用するには、次のいずれかを実行します。

  • スポットインスタンスリクエストを作成する際に、dedicated のテナンシーを指定します。詳細については、スポットインスタンスリクエストを作成する を参照してください。

  • dedicated のインスタンステナンシーを持つ VPC 内で、スポットインスタンスをリクエストします。詳細については、専有インスタンスのテナンシーで VPC を作成します を参照してください。default のインスタンステナンシーを使用して、 VPC 内でインスタンスをリクエストした場合は、dedicated のテナンシーを使用しながらスポットインスタンスをリクエストすることはできません。

T インスタンスを除くすべてのインスタンスファミリーが、Dedicated スポットインスタンス をサポートしています。対象となるインスタンスファミリーにおいて、最大のインスタンスサイズまたはメタルサイズのみが、Dedicated スポットインスタンス をサポートします。

スポットインスタンスリクエスト向けのサービスにリンクされたロール

Amazon EC2 は、ユーザーに代わって AWS の他のサービスを呼び出すために必要なアクセス許可のために、サービスにリンクされたロールを使用します。サービスにリンクされたロールは、AWS のサービスに直接リンクされた一意のタイプの IAM ロールです。サービスにリンクされたロールは、AWS のサービスにアクセス許可を委任するためのセキュアな方法を提供します。これは、リンクされたサービスのみが、サービスにリンクされたロールを引き受けることができるためです。詳細については、IAM ユーザーガイドの「サービスにリンクされたロールの使用」を参照してください。

Amazon EC2 は、AWSServiceRoleForEC2Spot という、サービスにリンクされたロールを使用して、ユーザーの代わりに スポットインスタンス を起動して管理します。

AWSServiceRoleForEC2Spot によって付与されるアクセス許可

Amazon EC2 は、AWSServiceRoleForEC2Spot という、サービスにリンクされたロールを使用して、次のアクションを実行します。

  • ec2:DescribeInstances – スポットインスタンスの記述

  • ec2:StopInstances – スポットインスタンスの停止

  • ec2:StartInstances – スポットインスタンスの開始

サービスにリンクされたロールの作成

ほとんどの状況では、サービスにリンクされたロールを手動で作成する必要はありません。Amazon EC2 は、ユーザーがコンソールを使用して初めてスポットインスタンスをリクエストした際に、サービスにリンクされたロール AWSServiceRoleForEC2Spot を作成します。

Amazon EC2 がこのサービスにリンクされたロールのサポートを開始した 2017 年 10 月よりも前に、ユーザーがアクティブなスポットインスタンスリクエストを行っている場合は、Amazon EC2 により AWSServiceRoleForEC2Spot ロールが AWS アカウントに作成されています。 詳細については、IAM ユーザーガイドの「アカウントに新しいロールが表示される」を参照してください。

AWS CLI または API を使用してスポットインスタンスをリクエストするには、まずこのロールが存在していることを確認する必要があります。

コンソールを使用して AWSServiceRoleForEC2Spot を作成するには
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

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

  3. [ロールの作成] を選択します。

  4. [Select type of trusted entity (信頼されたエンティティのタイプを選択)] ページで、[EC2]、[EC2 - Spot Instances (EC2 - スポットインスタンス)]、[Next: Permissions (次の手順: アクセス許可)] の順に選択します。

  5. 次のページで、[次へ: 確認] を選択します。

  6. [確認] ページで、[ロールの作成] を選択します。

AWS CLI を使用して AWSServiceRoleForEC2Spot を作成するには

次のように、create-service-linked-role コマンドを使用します。

aws iam create-service-linked-role --aws-service-name spot.amazonaws.com

スポットインスタンス を使用する必要がなくなった場合は、[AWSServiceRoleForEC2Spot] ロールを削除することをお勧めします。このロールがアカウントから削除された後で、Amazon EC2 をリクエストすると、スポットインスタンス はロールを再度作成します。

暗号化された AMI および EBS スナップショット用のカスタマーマネージド型キーへのアクセス権限の付与

スポットインスタンス のために暗号化された AMI または暗号化された Amazon EBS スナップショットを指定しており、カスタマーマネージド型キーを暗号化に使用する場合は、Amazon EC2 がユーザーに代わってスポットインスタンスを起動できるようにするために、カスタマーマネージド型キーを使用する許可を AWSServiceRoleForEC2Spot ロールにより付与する必要があります。これを行うには、次の手順で示すように、カスタマーマネージド型キーに対し付与を追加する必要があります。

アクセス権限を設定するときは、付与がキーポリシーの代わりになります。詳細については、 デベロッパーガイドの「許可の使用」と「 でのキーポリシーの使用」を参照してください。https://docs.aws.amazon.com/kms/latest/developerguide/grants.htmlAWS KMSAWS Key Management Service

AWSServiceRoleForEC2Spot ロールにカスタマーマネージド型キーを使用する許可を付与するには
  • create-grant コマンドを使用してカスタマーマネージド型キーに付与を追加し、プリンシパル (サービスにリンクされたロールの AWSServiceRoleForEC2Spot) を指定します。このプリンシパルには、付与が許可するオペレーションを実行するためのアクセス許可が含まれています。カスタマーマネージド型キーは、key-id パラメータと、そのカスタマーマネージド型キーの ARN により指定します。プリンシパルを指定するには、grantee-principal パラメータとサービスにリンクされたロール AWSServiceRoleForEC2Spot の ARN を使用します。

    aws kms create-grant \ --region us-east-1 \ --key-id arn:aws:kms:us-east-1:444455556666:key/1234abcd-12ab-34cd-56ef-1234567890ab \ --grantee-principal arn:aws:iam::111122223333:role/aws-service-role/spot.amazonaws.com/AWSServiceRoleForEC2Spot \ --operations "Decrypt" "Encrypt" "GenerateDataKey" "GenerateDataKeyWithoutPlaintext" "CreateGrant" "DescribeKey" "ReEncryptFrom" "ReEncryptTo"

スポットインスタンスリクエストを作成する

オンデマンドインスタンスを起動するのと同じ方法で、Amazon EC2 コンソールの インスタンス起動ウィザード またはr un-instances AWS CLI コマンドを使用してスポットインスタンスをリクエストできます。このメソッドは、以下の理由でのみ推奨されます。

  • すでに インスタンスの起動ウィザード または run-instances コマンドを使用してオンデマンドインスタンスを起動しており、単一のパラメータを変更することでスポットインスタンスの起動に変更したいだけです。

  • 異なるインスタンスタイプを持つ複数のインスタンスは、必要ありません。

複数のインスタンスタイプを指定することはできず、同じリクエストでスポットインスタンスとオンデマンドインスタンスを起動することはできないため、このメソッドは通常、スポットインスタンスの起動にはお勧めしません。複数のインスタンスタイプを持つスポットインスタンスとオンデマンドインスタンスを含むフリートの起動を含む、スポットインスタンスを起動するための推奨される方法については、「使用すべき最適なスポットリクエスト方法はどれですか?」を参照してください。

一度に複数のスポットインスタンスをリクエストした場合、 Amazon EC2 により個別のスポットインスタンスに対するリクエストが作成されるので、各リクエストのステータスを単独で追跡することが可能です。スポットインスタンスリクエストの追跡については、「スポットリクエストステータス」を参照してください。

New console
インスタンス起動ウィザードを使用してスポットインスタンスリクエストを作成するには

ステップ 1~9 は、オンデマンドインスタンスの起動に使用するステップと同じです。ステップ 10 で、スポットインスタンスリクエストを設定します。

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

  2. 画面上部のナビゲーションバーで、リージョンを選択します。

  3. Amazon EC2 コンソールダッシュボードで、[インスタンスを起動] を選択します。

  4. (オプション) [Name and tags] (名前とタグ) で、インスタンスに名前を付け、スポットインスタンス要求、インスタンス、ボリューム、および Elastic Graphics にタグを付けることができます。タグの詳細については、「Amazon EC2 リソースのタグ付け」を参照してください。

    1. [Name] (名前) に、インスタンスのわかりやすい名前を入力します。

      インスタンス名はタグで、キーは [Name] (名前)、値は指定した名前です。名前を指定しない場合は、インスタンスをその ID で識別できます。ID は、インスタンスの起動時に自動的に生成されます。

    2. スポットインスタンスリクエスト、インスタンス、ボリューム、および Elastic Graphics にタグを付けするには、[Add additional tags] (タグを追加) を選択します。[Add tag] (タグを追加) を選択し、キーと値を入力し、タグ付けするリソースタイプを選択します。追加するタグごとに [Add tag] (タグを追加) を選択します。

  5. [Application and OS Images (Amazon Machine Image)] (アプリケーションおよび OS イメージ (Amazon マシンイメージ)) で、インスタンスのオペレーティングシステム (OS) を選択してから、AMI を選択します。詳細については、「アプリケーションと OS イメージ (Amazon マシンイメージ)」を参照してください。

  6. [Instance type] (インスタンスタイプ) で、インスタンスのハードウェア設定とサイズの要件を満たすインスタンスタイプを選択します。詳細については、「インスタンスタイプ」を参照してください。

  7. [Key pair (login)] (キーペア (ログイン)) で、既存のキーペアを選択するか、[Create new key pair] (新しいキーペアを作成) を選択して新しいキーペアを作成します。詳細については、「Amazon EC2 のキーペアと Linux インスタンス」を参照してください。

    重要

    [Proceed without key pair] (キーペアなしで進む) オプションを選択した場合 (非推奨)、ユーザーが別の方法でログインすることを許可するように設定された AMI を選択した場合でなければ、インスタンスに接続できなくなります。

  8. [Network settings] (ネットワーク設定) で、デフォルト設定を使用するか、[Edit] (編集) を選択して必要に応じてネットワーク設定を構成します。

    セキュリティグループはネットワーク設定の一部を形成し、インスタンスのファイアウォールルールを定義します。このルールでは、どの着信ネットワークトラフィックをインスタンスに配信するかを指定します。

    詳細については、「ネットワーク設定」を参照してください。

  9. 選択した AMI には、ルートデバイスボリュームを含む、1 つまたは複数のストレージボリュームが含まれます。[Configure storage] (ストレージの設定) で、[Add new volume] (新しいボリュームの追加) を選択して、インスタンスに接続する追加のボリュームを指定できます。詳細については、「ストレージの設定」を参照してください。

  10. [Advanced details] (高度な設定) で、スポットインスタンスリクエストを次のように設定します。

    1. [Purchasing option] (購入オプション) で、[Request Spot Instances] (スポットインスタンスのリクエスト) チェックボックスをオンにします。

    2. スポットインスタンスリクエストのデフォルト設定を維持するか、[Customize] (カスタマイズ) (右側) を選択して、スポットインスタンスリクエストのカスタム設定を指定できます。

      [Customize] (カスタマイズ) を選択すると、次のフィールドが表示されます。

      1. [Maximum price] (最大価格): スポット価格でスポットインスタンスをリクエストするか、オンデマンド価格を上限とするか、支払う金額の最大額を指定できます。

        警告

        最大料金を指定すると、[No maximum price] (最大料金なし) を選択した場合よりもインスタンスが頻繁に中断されます。

        • [No maximum price] (最大価格なし): スポットインスタンスは現在のスポット価格で起動します。価格はオンデマンド価格を超えることはありません。(推奨)

        • [Set your maximum price (per instance/hour)] (最大価格を設定 (インスタンス / 時間あたり): 支払う意思のある最大金額を指定できます。

          • 現在のスポット価格よりも低い最大価格を指定すると、スポットインスタンスは起動しません。

          • 現在のスポット料金よりも高い最大料金を指定すると、スポットインスタンスが起動し、現在のスポット料金で請求されます。スポットインスタンスの実行後、スポット価格が最大価格を超えると、Amazon EC2 がスポットインスタンスを中断します。

          • 指定した上限料金にかかわらず、常に現在のスポット料金が請求されます。

          スポット料金の傾向を確認するには、「スポットインスタンスの料金履歴」を参照してください。

      2. [Request type] (リクエストタイプ): 選択したスポットインスタンスリクエストタイプによって、スポットインスタンスが中断された場合に何が発生するかが決まります。

        • [One-time] (ワンタイム): Amazon EC2 は、スポットインスタンスに対して 1 回限りのリクエストを送信します。スポットインスタンスが中断された場合、リクエストは再送信されません。

        • [Persistent request] (永続リクエスト): Amazon EC2 は、スポットインスタンスに対して永続リクエストを送信します。スポットインスタンスが中断された場合、要求は再送信され、中断されたスポットインスタンスを補充します。

        値を指定しない場合、デフォルトは1回限りのリクエストです。

      3. [Valid to] (有効期限): 永続的な スポットインスタンスリクエストの有効期限日。

        このフィールドは、1 回限りのリクエストではサポートされていません。ワンタイムリクエストは、リクエストのすべてのインスタンスが起動するか、またはユーザーがリクエストをキャンセルするまで有効です。

        • [No request expiry date] (リクエストの有効期限なし): リクエストは、キャンセルされるまで有効です。

        • [Set your request expiry date] (リクエストの有効期限を設定する): 永続的なリクエストは、指定した日付まで、またはキャンセルするまで有効です。

      4. [Interruption behavior] (中断動作): 選択した動作によって、スポットインスタンスが中断されたときに何が起こるかが決まります。

        • 永続的なリクエストの場合、有効な値は [Stop] (停止) と [Hibernate] (休止) です。インスタンスが停止すると、EBS ボリュームストレージの料金が適用されます。

          注記

          スポットインスタンスはオンデマンドインスタンスと同じ休止機能を使用するようになりました。休止を有効にするには、ここで [休止] を選択するか、インスタンス起動ウィザードの下部に表示される [停止 – 休止動作] フィールドから [有効化] を選択します。休止の前提条件については、「休止の前提条件」を参照してください。

        • ワンタイムリクエストの場合、[Terminate] (終了) のみが有効です。

        値を指定していない場合、デフォルトは [Terminate] (終了) になり、これは、永続的なスポットインスタンスリクエストには無効です。デフォルトのままにして永続的なスポットインスタンスリクエストを起動しようとすると、エラーが発生します。

        詳細については、「中断動作」を参照してください。

  11. [Summary] (概要) パネルの [Number of instances] (インスタンス数) に、起動するインスタンス数を入力します。

    注記

    Amazon EC2 が、スポットインスタンスごとに個別のリクエストを作成します。

  12. [Summary] (概要) パネルで、インスタンスの詳細を確認し、必要な変更を加えます。スポットインスタンスリクエストを送信した後は、リクエストのパラメータを変更することはできません。[Summary] (概要) パネルでリンクを選択すると、インスタンスの起動ウィザードのセクションに直接移動できます。詳細については、「[概要]」を参照してください。

  13. インスタンスを起動する準備ができたら、[Launch instance] (インスタンスの起動) を選択します。

    インスタンスが起動しないか、状態が running ではなくすぐに terminated になる場合は、「インスタンスの起動に関する問題のトラブルシューティング」を参照してください。

Old console
インスタンス起動ウィザードを使用してスポットインスタンスリクエストを作成するには
  1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

  2. 画面上部のナビゲーションバーで、リージョンを選択します。

  3. Amazon EC2 コンソールダッシュボードで、[Launch Instance] を選択します。

  4. [Amazon マシンイメージ (AMI)] ページで、AMI を選択します。詳細については、「ステップ 1: Amazon Machine Image (AMI) を選択する」を参照してください。

  5. [Choose an Instance Type] (インスタンスタイプの選択) ページで、起動するインスタンスのハードウェア設定とサイズを選択し、[Next: Configure Instance Details] (次へ: インスタンスの詳細設定) をクリックします。詳細については、「ステップ 2: インスタンスタイプを選択する」を参照してください。

  6. [インスタンスの詳細の設定] ページで、スポットインスタンスリクエストを次のように設定します。

    • [Number of instances]: 起動するインスタンスの数を入力します。

      注記

      Amazon EC2 が、スポットインスタンスごとに個別のリクエストを作成します。

    • (オプション) アプリケーションで需要を処理するためにインスタンスの正しい数を確実に維持するには、[Launch into Auto Scaling Group (Auto Scaling グループに作成する)] を選択して起動設定と Auto Scaling グループを作成します。Auto Scaling によって、指定どおりにグループのインスタンス数がスケーリングされます。詳細については、「Amazon EC2 Auto Scaling ユーザーガイド」を参照してください。

    • [購入のオプション]: [スポットインスタンスのリクエスト] を選択してスポットインスタンスを起動します。このオプションを選択すると、次のフィールドが表示されます。

    • [現在の価格]: 選択したインスタンスタイプについて、各アベイラビリティーゾーンの現在のスポット料金が表示されます。

    • (オプション) 最高料金: このフィールドは空のままにするか、支払う上限額を指定できます。

      警告

      上限料金を指定すると、フィールドを空にした場合よりも頻繁にインスタンスが中断されます。

      • スポット料金よりも低い最大料金を指定すると、スポットインスタンスは起動しません。

      • 現在のスポット料金よりも高い最大料金を指定すると、スポットインスタンスが起動し、現在のスポット料金で請求されます。スポットインスタンスの実行後、スポット価格が最大価格を超えると、Amazon EC2 がスポットインスタンスを中断します。

      • 指定した上限料金にかかわらず、常に現在のスポット料金が請求されます。

      • このフィールドを空のままにすると、現在のスポット料金を支払うことになります。

    • [永続リクエスト]: スポットインスタンスが中断された場合に、スポットインスタンスリクエストを再送信するには、永続リクエストを選択します。

    • [中断動作]: デフォルトでは、スポットサービスは中断されたスポットインスタンスを終了します。永続リクエストを選択している場合は、中断されたスポットインスタンスをスポットサービスが停止するか休止するかを指定できます。詳細については、中断動作 を参照してください。

    • (オプション) リクエスト有効期間: スポットインスタンスリクエストの有効期限を指定するには、[編集] を選択します。

    スポットインスタンスの設定の詳細については、「ステップ 3: インスタンスの詳細を設定する」を参照してください。

  7. 選択した AMI には、ルートデバイスボリュームを含む、1 つまたは複数のストレージボリュームが含まれます。[Add Storage] ページで、[Add New Volume] を選択することにより、インスタンスにアタッチする追加ボリュームを指定できます。詳細については、ステップ 4: ストレージを追加する を参照してください。

  8. [Add Tags] ページで、キーと値の組み合わせをタグとして指定します。詳細については、ステップ 5: タグの追加 を参照してください。

  9. [Configure Security Group] ページで、セキュリティグループを使用してインスタンスのファイアウォールルールを定義します このルールでは、どの着信ネットワークトラフィックをインスタンスに配信するかを指定します。他のトラフィックはすべて無視されます。(セキュリティグループの詳細については、「Linux インスタンス用の Amazon EC2 Amazon セキュリティグループ」を参照してください)。セキュリティグループを選択または作成して、[確認して起動] をクリックします。詳細については、ステップ 6: セキュリティグループを設定する を参照してください。

  10. [Review Instance Launch] ページで、インスタンスの詳細をチェックし、適切な [Edit] リンクを選択して必要な変更を加えます。準備ができたら、[Launch] を選択します。詳細については、ステップ 7: インスタンスの起動を確認し、キーペアを選択する を参照してください。

  11. [Select an existing key pair or create a new key pair] ダイアログボックスで、既存のキーペアを選択するか、新しいキーペアを作成できます。例えば、[既存のキーペアの選択] をクリックし、セットアップ中に作成したキーペアを選択します。詳細については、Amazon EC2 のキーペアと Linux インスタンス を参照してください。

    重要

    [Proceed without key pair] オプションを選択した場合、ユーザーが別の方法でログインすることを許可するように設定された AMI を選択した場合でなければ、インスタンスに接続できなくなります。

  12. インスタンスを起動するには、確認のチェックボックスをオンにし、続いて [Launch Instances] を選択します。

    インスタンスが起動しないか、状態が terminated ではなくすぐに running になる場合は、「インスタンスの起動に関する問題のトラブルシューティング」を参照してください。

AWS CLI
run-instances を使用してスポットインスタンスリクエストを作成するには

run-instances コマンドを使用し、--instance-market-options パラメータでスポットインスタンスのオプションを指定します。

aws ec2 run-instances \ --image-id ami-0abcdef1234567890 \ --instance-type t2.micro \ --count 5 \ --subnet-id subnet-08fc749671b2d077c \ --key-name MyKeyPair \ --security-group-ids sg-0b0384b66d7d692f9 \ --instance-market-options file://spot-options.json

--instance-market-options で JSON ファイルに指定するデータ構造は次のとおりです。ValidUntil、および InstanceInterruptionBehavior、を指定することもできます。データ構造でフィールドを指定しないと、デフォルト値が使用されます。

次のサンプルでは、persistent リクエストを作成します。

{ "MarketType": "spot", "SpotOptions": { "SpotInstanceType": "persistent" } }

 

request-spot-instances を使用してスポットインスタンスリクエストを作成するには

注記

request-spot-instances コマンドを使用してスポットインスタンスをリクエストすることは強くお勧めしません。これは、計画された投資がないレガシー API であるためです。詳細については、「使用すべき最適なスポットリクエスト方法はどれですか?」を参照してください。

ワンタイムリクエストを作成するには、request-spot-instances コマンドを使用します。

aws ec2 request-spot-instances \ --instance-count 5 \ --type "one-time" \ --launch-specification file://specification.json

永続リクエストを作成するには、request-spot-instances を使用します。

aws ec2 request-spot-instances \ --instance-count 5 \ --type "persistent" \ --launch-specification file://specification.json

以下のコマンドで使用する起動仕様ファイルの例については、「スポットインスタンスリクエストでの起動仕様の例」を参照してください。起動仕様ファイルをスポットリクエストコンソールからダウンロードする場合は、代わりに request-spot-fleet コマンドを使用する必要があります (スポットリクエストコンソールは、スポットフリートを使用してスポットインスタンスリクエストを指定します)。

実行中の スポットインスタンス の検索

Amazon EC2 は、キャパシティが利用可能であるときにスポットインスタンスを起動します。スポットインスタンスは中断されるか、ユーザーにより終了されるまで実行されます。

実行中の スポットインスタンス を検索するには (コンソール)
  1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

  2. ナビゲーションペインで、[Spot Requests] を選択します。スポットインスタンスリクエストとスポットフリートリクエストの両方を表示できます。スポットインスタンスリクエストが受理された場合、[容量] がスポットインスタンスの ID となります。スポットフリートの場合、[容量] はリクエストされた容量のうち受理された量を示します。スポットフリートのインスタンスの ID を表示するには、拡張矢印を選択するか、フリートを選択した上で [インスタンス] を選択します。

    注記

    スポットフリートによって作成されたスポットインスタンスリクエストの場合、そのリクエストが属するスポットフリートを示すシステムタグはリクエストに即座にタグ付けされません。また、一定期間、スポットフリートリクエストとは別に表示されることがあります。

    または、ナビゲーションペインで [Instances] を選択します。右上隅にある設定アイコン ( ) を選択し、[Attribute (属性)] 列で [Instance lifecycle (インスタンスライフサイクル)] を選択します。各インスタンスの [Instance lifecycle (インスタンスライフサイクル)] は、normalspot、または scheduled のいずれかです。

実行中のスポットインスタンスを検索するには (AWS CLI)

スポットインスタンス を一覧表示するには、--query オプションを指定して describe-spot-instance-requests コマンドを実行します。

aws ec2 describe-spot-instance-requests \ --query "SpotInstanceRequests[*].{ID:InstanceId}"

出力例を次に示します。

[ { "ID": "i-1234567890abcdef0" }, { "ID": "i-0598c7d356eba48d7" } ]

または、--filters オプションを指定して describe-instances コマンドを実行しても、スポットインスタンス を一覧表示できます。

aws ec2 describe-instances \ --filters "Name=instance-lifecycle,Values=spot"

単一のスポットインスタンスを表示するには、--spot-instance-request-ids オプションを指定しながら describe-spot-instance-requests コマンドを使用します。

aws ec2 describe-spot-instance-requests \ --spot-instance-request-ids sir-08b93456

スポットインスタンスリクエストをタグ付けする

スポットインスタンスリクエストを分類および管理しやすくするため、カスタムメタデータでタグ付けすることができます。タグは、スポットインスタンスリクエストの作成時、またはその後に割り当てることができます。Amazon EC2 コンソールまたはコマンドラインツールを使用してタグを割り当てることができます。

スポットインスタンスリクエストにタグ付けを行っても、そのスポットインスタンスリクエストによって起動されたインスタンスやボリュームには、自動的なタグ付けは行われません。スポットインスタンスリクエストによって起動されたインスタンスやボリュームには、明示的にタグを付ける必要があります。スポットインスタンスおよびボリュームへのタグの割り当ては、起動時または起動後に行うことができます。

タグの仕組みの詳細については、「Amazon EC2 リソースのタグ付け」を参照してください。

前提条件

リソースにタグ付けする許可をユーザーに付与します。IAM ポリシーとサンプルポリシーの詳細については、「例: リソースのタグ付け」を参照してください。

作成する IAM ポリシーは、スポットインスタンスリクエストの作成に使用する方法によって決まります。

インスタンス起動ウィザードまたは run-instances を使用する場合にリソースにタグを付けるための許可をユーザーに付与するには

以下を含む IAM ポリシーを作成します。

  • ec2:RunInstances アクション。これにより、インスタンスを起動するための許可がユーザーに付与されます。

  • Resource で、spot-instances-request を指定します。これによりユーザーは、スポットインスタンスを要求するためのスポットインスタンスリクエストを作成できるようになります。

  • ec2:CreateTags アクション。これにより、タグを作成する許可がユーザーに付与されます。

  • Resource で、* を指定します。これにより、ユーザーはインスタンスの起動時に作成されるすべてのリソースにタグを付けることを許可されます。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowLaunchInstances", "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:us-east-1::image/*", "arn:aws:ec2:us-east-1:*:subnet/*", "arn:aws:ec2:us-east-1:*:network-interface/*", "arn:aws:ec2:us-east-1:*:security-group/*", "arn:aws:ec2:us-east-1:*:key-pair/*", "arn:aws:ec2:us-east-1:*:volume/*", "arn:aws:ec2:us-east-1:*:instance/*", "arn:aws:ec2:us-east-1:*:spot-instances-request/*" ] }, { "Sid": "TagSpotInstanceRequests", "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "*" } ] }
注記

RunInstances アクションを使用してスポットインスタンスリクエストを作成し、その際、リクエストにタグを付ける場合には、Amazon EC2 が RunInstances ステートメント内で spot-instances-request リソースをどのように評価するのかについて、注意を払う必要があります。

spot-instances-request リソースは、IAM ポリシーで次のように評価されます。

  • スポットインスタンスリクエストの作成時にタグを付けない場合、Amazon EC2 は RunInstances ステートメント内の spot-instances-request リソースを評価しません。

  • スポットインスタンスリクエストの作成時にタグを付けると、 RunInstances ステートメント内の spot-instances-request リソースが、Amazon EC2 により評価されます。

したがって、spot-instances-request リソースの場合、次のルールが IAM ポリシーに適用されます。

  • RunInstances を使用してスポットインスタンスリクエストを作成し、その際リクエストにタグを付けない場合は、spot-instances-request リソースを明示的に許可しなくても、その呼び出しは成功します。

  • RunInstances を使用してスポットインスタンスリクエストを作成する際に、そのリクエストにタグを付ける場合には、RunInstances の許可ステートメントに spot-instances-request リソースを含める必要があります。これがない場合は呼び出しが失敗します。

  • RunInstances を使用してスポットインスタンスリクエストを作成する際に、そのリクエストにタグを付ける場合は、許可ステートメント CreateTags で spot-instances-request リソースを指定するか、そこに * ワイルドカードを含める必要があります。これがない場合は呼び出しが失敗します。

IAM ポリシー (スポットインスタンスリクエストでサポートされていないポリシーを含む) の例については、「スポットインスタンス の操作」を参照してください。

request-spot-instances を使用する場合でリソースにタグを付けるための許可をユーザーに付与するには

以下を含む IAM ポリシーを作成します。

  • ec2:RequestSpotInstances アクション。これにより、スポットインスタンスリクエストを作成する許可がユーザーに付与されます。

  • ec2:CreateTags アクション。これにより、タグを作成する許可がユーザーに付与されます。

  • Resource で、spot-instances-request を指定します。これにより、ユーザーはスポットインスタンスリクエストにのみタグを付けることが許可されます。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "TagSpotInstanceRequest", "Effect": "Allow", "Action": [ "ec2:RequestSpotInstances", "ec2:CreateTags" ], "Resource": "arn:aws:ec2:us-east-1:111122223333:spot-instances-request/*" }

新しいスポットインスタンスリクエストにタグを付ける

コンソールを使用して新しいスポットインスタンスリクエストにタグ付けするには
  1. スポットインスタンスリクエストを作成する」の手順に従います。

  2. タグを追加するには、[タグの追加] ページで [タグの追加] をクリックし、タグのキーと値を入力します。追加するタグごとに [別のタグを追加] をクリックします。

    1 つのタグを、スポットインスタンスリクエスト、スポットインスタンス、およびボリュームに対し同時にタグ付けすることができます。3 つすべてにタグを付けるには、[インスタンス]、[ボリューム]、[スポットインスタンスリクエスト] をそれぞれ選択します。1 つまたは 2 つにのみタグを付けるには、タグを付けるリソースを選択し、他のリソースを選択していないことを確認します。

  3. 必須フィールドにすべて入力してスポットインスタンスリクエストを作成した後、[起動] を選択します。詳細については、スポットインスタンスリクエストを作成する を参照してください。

AWS CLI を使用して新しいスポットインスタンスリクエストにタグ付けするには

スポットインスタンスリクエストの作成時にタグ付けするには、以下のようにスポットインスタンスリクエストを設定します。

  • --tag-specification パラメータを使用してスポットインスタンスリクエストのタグを指定します。

  • ResourceType で、spot-instances-request を指定します。別の値を指定すると、スポットインスタンスリクエストは失敗します。

  • Tags で、キーと値のペアを指定します。キーと値のペアは複数指定できます。

以下の例では、スポットインスタンスリクエストには 2 つのタグ (Environment キーと Production 値、ならびに Cost-Center キーと 123 値) が付けられています。

aws ec2 request-spot-instances \ --instance-count 5 \ --type "one-time" \ --launch-specification file://specification.json \ --tag-specification 'ResourceType=spot-instances-request,Tags=[{Key=Environment,Value=Production},{Key=Cost-Center,Value=123}]'

既存のスポットインスタンスリクエストにタグ付けをする

コンソールを使用して既存のスポットインスタンスリクエストにタグ付けするには

スポットインスタンスリクエストの作成後に、コンソールを使用してそのリクエストにタグを追加できます。

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

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

  2. スポットインスタンスリクエストを選択します。

  3. [Tags (タグ)] タブを選択してから、[タグの作成] を選択します。

コンソールを使用して既存のスポットインスタンスにタグを付けるには

スポットインスタンスリクエストによってスポットインスタンスを起動した後で、コンソールを使用して、そのインスタンスにタグを追加できます。詳細については、個々のリソースのタグの追加および削除 を参照してください。

AWS CLI を使用して、既存のスポットインスタンスリクエストまたはスポットインスタンスにタグを付けるには

create-tags コマンドを使用して、既存のリソースにタグを付けます。次の例では、既存のスポットインスタンスリクエストとスポットインスタンスに、purpose キーと test 値のタグを付けています。

aws ec2 create-tags \ --resources sir-08b93456 i-1234567890abcdef0 \ --tags Key=purpose,Value=test

スポットインスタンスリクエストのタグを表示する

コンソールを使用してスポットインスタンスリクエストのタグを表示するには

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

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

  2. スポットインスタンスリクエストを選択してから、[タグ] タブを選択します。

スポットインスタンスリクエストのタグを詳細表示するには

describe-tags コマンドを使用して、指定したリソースのタグを表示します。以下の例では、指定した リクエストのタグの情報を取得します。

aws ec2 describe-tags \ --filters "Name=resource-id,Values=sir-11112222-3333-4444-5555-66666EXAMPLE"
{ "Tags": [ { "Key": "Environment", "ResourceId": "sir-11112222-3333-4444-5555-66666EXAMPLE", "ResourceType": "spot-instances-request", "Value": "Production" }, { "Key": "Another key", "ResourceId": "sir-11112222-3333-4444-5555-66666EXAMPLE", "ResourceType": "spot-instances-request", "Value": "Another value" } ] }

スポットインスタンスリクエストを詳細表示すると、そのスポットインスタンスリクエストのタグを確認することができます。

describe-spot-instance-requests コマンドを使用して、指定したスポットインスタンスリクエストの設定を表示します。この内容には、リクエストに指定されたタグがすべて含まれます。

aws ec2 describe-spot-instance-requests \ --spot-instance-request-ids sir-11112222-3333-4444-5555-66666EXAMPLE
{ "SpotInstanceRequests": [ { "CreateTime": "2020-06-24T14:22:11+00:00", "InstanceId": "i-1234567890EXAMPLE", "LaunchSpecification": { "SecurityGroups": [ { "GroupName": "launch-wizard-6", "GroupId": "sg-1234567890EXAMPLE" } ], "BlockDeviceMappings": [ { "DeviceName": "/dev/xvda", "Ebs": { "DeleteOnTermination": true, "VolumeSize": 8, "VolumeType": "gp2" } } ], "ImageId": "ami-1234567890EXAMPLE", "InstanceType": "t2.micro", "KeyName": "my-key-pair", "NetworkInterfaces": [ { "DeleteOnTermination": true, "DeviceIndex": 0, "SubnetId": "subnet-11122233" } ], "Placement": { "AvailabilityZone": "eu-west-1c", "Tenancy": "default" }, "Monitoring": { "Enabled": false } }, "LaunchedAvailabilityZone": "eu-west-1c", "ProductDescription": "Linux/UNIX", "SpotInstanceRequestId": "sir-1234567890EXAMPLE", "SpotPrice": "0.012600", "State": "active", "Status": { "Code": "fulfilled", "Message": "Your spot request is fulfilled.", "UpdateTime": "2020-06-25T18:30:21+00:00" }, "Tags": [ { "Key": "Environment", "Value": "Production" }, { "Key": "Another key", "Value": "Another value" } ], "Type": "one-time", "InstanceInterruptionBehavior": "terminate" } ] }

スポットインスタンスリクエストをキャンセルする

スポットインスタンスリクエストが不要になった場合には、それをキャンセルすることができます。openactive、または disabled のスポットインスタンスリクエストのみキャンセルできます。

  • スポットインスタンスリクエストがまだ受理されておらず、インスタンスが起動されていない段階では、そのリクエストは open 状態にあります。

  • スポットインスタンスリクエストが受理され、スポットインスタンスの起動が完了している場合、そのスポットインスタンスリクエストは active 状態になります。

  • ユーザーがスポットインスタンスを停止した場合、スポットインスタンスリクエストは disabled 状態になります。

スポットインスタンスリクエストの状態が active で、関連付けられたスポットインスタンスが実行されている場合、そのリクエストをキャンセルしても、関連するインスタンスは終了しません。スポットインスタンスの終了の詳細については、「スポットインスタンスを終了する」を参照してください。

スポットインスタンスリクエストをキャンセルするには (コンソール)
  1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

  2. ナビゲーションペインで、[スポットリクエスト] をクリックした後、スポットインスタンスリクエストを選択します。

  3. [アクション]、[リクエストのキャンセル] の順にクリックします。

  4. (オプション) 関連付けられたスポットインスタンスを使い終わったら、スポットインスタンス を終了できます。[スポットリクエストのキャンセル] ダイアログボックスで、[インスタンスの終了]、[確認] の順にクリックします。

スポットインスタンスリクエストをキャンセルするには (AWS CLI)
  • 指定したスポットインスタンスリクエストをキャンセルするには、cancel-spot-instance-requests コマンドを使用します。

    aws ec2 cancel-spot-instance-requests --spot-instance-request-ids sir-08b93456

スポットインスタンスを停止する

今すぐスポットインスタンスは必要ないが、Amazon EBS ボリューム内に保持されているデータを失わずに後で再起動する必要がある場合は、それらを停止できます。スポットインスタンスを停止する手順は、オンデマンドインスタンスを停止する手順と似ています。

注記

スポットインスタンスが停止している間、そのインスタンスの属性の一部は変更可能ですが、インスタンスタイプを変更することはできません。

停止しているスポットインスタンスの使用料またはデータ転送料は課金されませんが、Amazon EBS ボリュームのストレージに対しては課金されます。

制限事項
  • スポットインスタンスを停止できるのは、そのインスタンスが、persistent なスポットインスタンスリクエストから起動された場合だけです。

  • 関連するスポットインスタンスリクエストがキャンセルされている場合は、スポットインスタンス を停止することはできません。スポットインスタンスリクエストがキャンセルされた場合は、スポットインスタンスを終了することのみ可能です。

  • フリート、起動グループ、またはアベイラビリティーゾーングループの一部であるスポットインスタンスは停止できません。

Console
スポットインスタンスを停止するには (コンソール)
  1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

  2. ナビゲーションペインで [インスタンス] を選択し、スポットインスタンスを選択します。

  3. [Instance state (インスタンスの状態)]、[Stop instance (インスタンスの停止)] の順に選択します。

  4. 確認を求められたら、[Stop] を選択します。

AWS CLI
スポットインスタンスを停止するには (AWS CLI)
  • 1 つまたは複数のスポットインスタンスを手動で停止するには、stop-instances コマンドを使用します。

    aws ec2 stop-instances --instance-ids i-1234567890abcdef0

スポットインスタンスを開始する

以前に停止したスポットインスタンスは開始することができます。スポットインスタンスを開始する手順は、オンデマンドインスタンスを開始する手順と似ています。

前提条件

スポットインスタンスは、次の場合にのみ開始できます。

  • スポットインスタンスを手動で停止している。

  • スポットインスタンスが EBS-backed インスタンスである。

  • スポットインスタンスに使用可能な容量がある。

  • スポット料金が上限価格より低くなっている。

制限事項
  • フリート、起動グループ、またはアベイラビリティーゾーングループの一部であるスポットインスタンスを開始することはできません。

Console
スポットインスタンスを開始するには (コンソール)
  1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

  2. ナビゲーションペインで [インスタンス] を選択し、スポットインスタンスを選択します。

  3. [Instance state (インスタンスの状態)]、[Start instance (インスタンスの開始)] の順に選択します。

AWS CLI
スポットインスタンスを開始するには (AWS CLI)
  • start-instances コマンドを使用して、1 つまたは複数のスポットインスタンスを手動で起動します。

    aws ec2 start-instances --instance-ids i-1234567890abcdef0

スポットインスタンスを終了する

永続スポットインスタンスリクエストによって起動された実行中または停止中のスポットインスタンスを終了すると、そのスポットインスタンスリクエストの状態は open に遷移し、新たなスポットインスタンスを起動できるようになります。新しいスポットインスタンスが起動されないようにするには、まずスポットインスタンスリクエストをキャンセルする必要があります。

スポットインスタンスを実行させている active スポットインスタンスリクエストをキャンセルしても、実行中のスポットインスタンスは自動的に終了されません。スポットインスタンスは手動で終了する必要があります。

停止中のスポットインスタンスを持つ disabled スポットインスタンスリクエストをキャンセルした場合、この停止中のスポットインスタンスは、Amazon EC2 スポットサービスによって自動的に終了されます。スポットインスタンスリクエストをキャンセルしてから、スポットサービスがスポットインスタンスを終了するまでの間に、短い遅延が生じることがあります。

スポットインスタンスリクエストのキャンセルの詳細については、「スポットインスタンスリクエストをキャンセルする」を参照してください。

Console
コンソールを使用してスポットインスタンスを手動で終了するには
  1. インスタンスを終了する前に、終了時に Amazon EBS ボリュームが削除されることと、必要なデータすべてをインスタンスストアボリュームから永続的ストレージ (Amazon EBS や Amazon S3 など) にコピーしていることを確認して、データが失われないことを確認します。

  2. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

  3. ナビゲーションペインで、[インスタンス] を選択します。

  4. そのインスタンスがスポットインスタンスであることを確認するには、[インスタンスライフサイクル] 列に表示されている[スポット] のチェックをオンにします。

  5. インスタンスを選択し、[インスタンスの状態]、[インスタンスの終了] の順に選択します。

  6. 確認を求めるメッセージが表示されたら、[Terminate (終了)] を選択します。

AWS CLI
AWS CLI を使用してスポットインスタンスを手動で終了するには
  • スポットインスタンス を手動で終了するには、terminate-instances コマンドを使用します。

    aws ec2 terminate-instances --instance-ids i-1234567890abcdef0 i-0598c7d356eba48d7