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

スポットインスタンス の中断

スポットインスタンス に対する需要は刻一刻と大幅に変化する可能性があります。また、スポットインスタンス の可用性も利用可能な未使用の EC2 インスタンスの数に応じて大きく変化する可能性があります。スポットインスタンス が中断される可能性は常にあります。したがって、アプリケーションで スポットインスタンス の中断に対して準備する必要があります。

EC2 フリート または スポットフリート で指定した オンデマンドインスタンス は中断されません。

中断の理由

Amazon EC2 が スポットインスタンス を中断する場合、次のような理由が考えられます。

  • 価格 – スポット料金が上限料金を上回っています。

  • 容量 – スポットインスタンス の需要を満たすのに十分な未使用の EC2 インスタンスがない場合、Amazon EC2 は スポットインスタンス を中断します。インスタンスが中断される順序は、Amazon EC2 によって決定されます。

  • 制約 – リクエストに起動グループやアベイラビリティーゾーングループなど制約が含まれている場合、制約条件が満たされなくなったときに、その スポットインスタンス はグループとして終了されます。

中断動作

中断時に Amazon EC2 が スポットインスタンス を休止、停止、または終了するかを指定できます。お客様のニーズに合う中断時の動作を選択できます。デフォルトでは、スポットインスタンス は中断されると終了されます。中断動作を変更するには、Spot リクエストの作成中に、コンソールで [Interruption behavior] のオプションを選択するか、起動設定または起動テンプレートで InstanceInterruptionBehavior を指定します。Spot リクエストの作成中に、コンソールで中断動作を選択するには、[ターゲット容量を維持する] を選択します。このオプションを選択すると、[中断動作] が表示され、Spot サービスが中断されたときに Spot サービスを終了、停止、または休止状態にするよう指定することができます。

中断した スポットインスタンス の停止

この動作を変更し、次の要件が満たされたときに、Amazon EC2 が スポットインスタンス を停止するようにできます。

要件

  • スポットインスタンス リクエストの場合、タイプは persistent にする必要があります。スポットインスタンス リクエストで起動グループを指定することはできません。

  • EC2 フリート または スポットフリート リクエストの場合、タイプは maintain にする必要があります。

  • ルートボリュームは、インスタンスストアボリュームではなく EBS ボリュームにする必要があります。

スポットインスタンス がスポットサービスによって停止されたら、スポットインスタンス はスポットサービスでのみ再起動できるため、同じ起動仕様を使用する必要があります。

persistent スポットインスタンス リクエストで起動された スポットインスタンス の場合、キャパシティーが、停止したインスタンスと同じアベイラビリティーゾーンで利用可能、かつ同じインスタンスタイプの場合に、スポットサービスによって、その停止したインスタンスは再起動されます。

EC2 フリート または スポットフリート インスタンスが停止し、フリートのタイプが maintain の場合、スポットサービスは代替インスタンスを起動してターゲット容量を維持します。スポットサービスでは、指定された配分戦略 (lowestPricediversifiedInstancePoolsToUseCount) に基づき、最適なプールを検索します。以前に停止したインスタンスでプールに優先順位が付けられることはありません。後に、配分戦略で、以前に停止したインスタンスを含むプールに導かれる場合、スポットサービスは、ターゲット容量に合うように停止したインスタンスを再起動します。

たとえば、配分戦略が lowestPrice の場合の スポットフリート を検討します。初回起動時、c3.large プールは、起動仕様の lowestPrice 条件を満たしています。後に、c3.large インスタンスが中断されると、スポットサービスはそのインスタンスを停止し、lowestPrice 戦略に合う別のプールからキャパシティーを補充します。今回の場合、プールは c4.large プールになり、スポットサービスはターゲット容量を満たすように c4.large インスタンスを起動します。同様に、次回は スポットフリート によって、c5.large プールに移動されます。これらの各遷移では、スポットサービスは、以前に停止したインスタンスを含むプールを優先せずに、指定された配分戦略を純粋に優先します。lowestPrice 戦略では、以前に停止したインスタンスを含むプールに戻る場合があります。たとえば、インスタンスが c5.large プールで中断され、lowestPrice 戦略によって c3.large または c4.large プールに戻った場合、以前に停止したインスタンスはターゲット容量を満たすために再起動されます。

スポットインスタンス が停止している間、インスタンスの属性の一部は変更できますが、インスタンスタイプを変更することはできません。EBS ボリュームをデタッチまたは削除すると、スポットインスタンス が起動したときにアタッチされません。ルートボリュームをデタッチし、スポットサービスが スポットインスタンス を起動しようとすると、インスタンスの起動は失敗し、スポットサービスは停止されたインスタンスを削除します。

停止中に、スポットインスタンス を終了できます。スポットリクエスト、EC2 フリート、または スポットフリート をキャンセルすると、スポットサービスは停止中の関連 スポットインスタンス を終了します。

スポットインスタンス の停止中は、維持されている EBS ボリュームに対してのみ課金されます。EC2 フリート および スポットフリート では、停止中のインスタンスの数が多い場合、アカウントの EBS ボリューム数の制限を超えることがあります。

中断した スポットインスタンス の休止

この動作を変更し、次の要件が満たされたときに、Amazon EC2 が スポットインスタンス を休止するようにできます。

要件

  • スポットインスタンス リクエストの場合、タイプは persistent にする必要があります。スポットインスタンス リクエストで起動グループを指定することはできません。

  • EC2 フリート または スポットフリート リクエストの場合、タイプは maintain にする必要があります。

  • ルートボリュームはインスタンスストアボリュームではなく、EBS ボリュームでなければならず、休止中にインスタンスメモリ (RAM) を格納するのに十分な大きさでなければなりません。

  • C3、C4、C5、M4、M5、R3、R4 (100 GB 未満のメモリ) のインスタンスがサポートされています。

  • 以下のオペレーティングシステムがサポートされています: Amazon Linux 2、Amazon Linux AMI、AWS チューニングされた Ubuntu カーネル (linux-aws) 4.4.0-1041 以降の Ubuntu、および Windows Server 2008 R2 以降。

  • サポートされているオペレーティングシステムに休止エージェントをインストールするか、すでにエージェントが含まれている次の AMI のいずれかを使用します。

    • Amazon Linux 2

    • Amazon Linux AMI 2017.09.1 以降

    • Ubuntu Xenial 16.04 20171121 以降

    • Windows Server 2008 R2 AMI 2017.11.19 以降

    • Windows Server 2012 または Windows Server 2012 R2 AMI 2017.11.19 以降

    • Windows Server 2016 AMI 2017.11.19 以降

    • Windows Server 2019

  • エージェントを開始します。インスタンスの起動時にユーザーデータを使用してエージェントを起動することをお勧めします。または、エージェントを手動で開始できます。

推奨事項

  • 休止中はインスタンスメモリがルートボリュームに格納されるため、暗号化された Amazon EBS ボリュームをルートボリュームとして使用することを強くお勧めします。これにより、データがボリューム上にあるときや、インスタンスとボリューム間でデータが移動しているときに、メモリ (RAM) の内容が暗号化されます。ルートボリュームが暗号化された Amazon EBS ボリュームであることを確認するには、次の 3 つのオプションのいずれかを使用します。

    • EBS の「シングルステップ」暗号化: 1 回の run-instances API 呼び出しで、暗号化されていない AMI から暗号化された EBS-Backed EC2 インスタンスを起動できます。詳細については、「EBS-Backed AMI での暗号化の利用」を参照してください。

    • デフォルトでの EBS 暗号化: EBS 暗号化をデフォルトで有効にして、AWS アカウントで作成されたすべての新しい EBS ボリュームを暗号化できます。詳細については、「デフォルトでの暗号化」を参照してください。

    • 暗号化された AMI: 暗号化された AMI を使用してインスタンスを起動することで、EBS 暗号化を有効にすることができます。暗号化されたルートスナップショットが AMI にない場合は、それを新しい AMI にコピーして暗号化をリクエストできます。詳細については、「コピー時に暗号化されていないイメージを暗号化する」および「AMI のコピー」を参照してください。

スポットインスタンス がスポットサービスによって休止状態になると、EBS ボリュームは保存され、インスタンスメモリ (RAM) はルートボリュームに保存されます。インスタンスのプライベート IP アドレスも保存されます。Elastic IP アドレス以外のインスタンスストレージボリュームとパブリック IP アドレスは保持されません。インスタンスが休止状態の間は、EBS ボリュームに対してのみ課金されます。EC2 フリート および スポットフリート では、休止中のインスタンスの数が多い場合、アカウントの EBS ボリューム数の制限を超えることがあります。

エージェントは、インスタンスがスポットサービスから信号を受信すると、オペレーティングシステムが休止状態になるように要求します。エージェントがインストールされていない場合、基盤となるオペレーティングシステムは休止状態をサポートしていないか、インスタンスメモリを保存するのに十分なボリュームスペースがなく、休止状態が失敗し、代わりにスポットサービスがインスタンスを停止します。

スポットサービスが スポットインスタンス を休止すると、中断通知が届きますが、スポットインスタンス が中断されるまでに 2 分かかりません。休止は直ちに開始されます。インスタンスが休止状態にある間は、インスタンスのヘルスチェックが失敗する場合があります。休止プロセスが完了すると、インスタンスの状態は stopped になります。

スポットインスタンス がスポットサービスによって休止状態になった後は、スポットサービスによってのみ再開できます。スポットサービスは、スポット料金が指定された上限料金を下回り、容量が利用可能になったときにインスタンスを再開します。

詳細については、「インスタンス休止の準備」を参照してください。

オンデマンドインスタンス の休止の詳細については、「Windows インスタンスの休止」を参照してください。

中断に対する準備

スポットインスタンス を使用する場合のベストプラクティスを以下に示します。

  • オンデマンド価格であるデフォルトの上限料金を使用します。

  • 必要なソフトウェア設定を含む Amazon Machine Image (AMI) を使用することにより、リクエストが受理されたらすぐにインスタンスを実行できるように、準備が完了していることを確認します。また、ユーザーデータを使用して起動時にコマンドを実行することもできます。

  • スポットインスタンス の終了の影響を受けない場所に、定期的に重要なデータを保存します。たとえば、Amazon S3、Amazon EBS、または DynamoDB を使用できます。

  • 作業を頻繁に保存できるように、作業を (Grid、Hadoop、キューベースのアーキテクチャを使用して) 細かいタスクに分割するか、チェックポイントを使用します。

  • スポットインスタンス の中断の通知を使用して、スポットインスタンスのステータスをモニタリングします。

  • AWS では、この警告はできるだけ早く提供するよう努めていますが、警告が提供される前に スポットインスタンス が削除される可能性があります。アプリケーションをテストして、中断通知のテストを行っている場合であっても、予期しないインスタンスの終了をアプリケーションが適切に処理できることを確認します。オンデマンドインスタンス を使用してアプリケーションを実行し、オンデマンドインスタンス を自分で終了することでこれを確認できます。

インスタンス休止の準備

すでにエージェントが含まれている AMI を使用していない限り、インスタンスに休止エージェントをインストールする必要があります。エージェントが AMI に含まれているかどうか、または自分でインストールしたかどうかに関係なく、インスタンスの起動時にエージェントを実行する必要があります。

次の手順は、Windows インスタンスの準備に役立ちます。Linux インスタンスを準備する手順については、『Linux インスタンス用 Amazon EC2 ユーザーガイド』の「インスタンス休止の準備」を参照してください。

Windows インスタンスを準備するには

  1. AMI にエージェントが含まれていない場合は、Windows インスタンスの C:\Program Files\Amazon\Hibernate フォルダに次のファイルをダウンロードします。

  2. 以下のコマンドをユーザーデータに追加します。

    <powershell>."C:\Program Files\Amazon\Hibernate\EC2HibernateAgent.exe"</powershell>

スポットインスタンス 中断の通知

スポットインスタンス の中断から保護する最善の方法は、アプリケーションを耐障害性のある設計にすることです。さらに、スポットインスタンス の中断の通知を活用できます。これによって、Amazon EC2 が スポットインスタンス を停止または削除する 2 分前に警告が提供されます。5 秒ごとにこれらの警告を確認することをお勧めします。

この警告は、CloudWatch イベントとして、および スポットインスタンス 上のインスタンスメタデータの項目として使用可能です。

中断動作として休止状態を指定した場合は、中断通知が表示されますが、休止状態プロセスはすぐに開始されるため、2 分間の警告は表示されません。

EC2 スポットインスタンス Interruption Notice

Amazon EC2 は、スポットインスタンス を中断する場合、実際の中断に先立つ 2 分前にイベントを発生させます。このイベントは Amazon CloudWatch Events で検出できます。詳細については、Amazon CloudWatch Events ユーザーガイドを参照してください。

以下に示しているのは、スポットインスタンス 割り込みのイベントの例です。instance-action の可能な値は hibernatestopterminate です。

{ "version": "0", "id": "12345678-1234-1234-1234-123456789012", "detail-type": "EC2 Spot Instance Interruption Warning", "source": "aws.ec2", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-east-2", "resources": ["arn:aws:ec2:us-east-2:123456789012:instance/i-1234567890abcdef0"], "detail": { "instance-id": "i-1234567890abcdef0", "instance-action": "action" } }

instance-action

スポットインスタンス がスポットサービスによって、停止または終了されるとマークされた場合、instance-action 項目がインスタンスメタデータに存在します。そうでない場合、これは存在しません。instance-action は以下のように取得できます。

PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/spot/instance-action

instance-action 項目は、アクションおよびアクションのおよその発生時刻 (UTC) を指定します。

次の例では、このインスタンスの停止時刻を示します。

{"action": "stop", "time": "2017-09-18T08:22:00Z"}

次の例では、このインスタンスの終了時刻を示します。

{"action": "terminate", "time": "2017-09-18T08:22:00Z"}

Amazon EC2 がインスタンスを停止または終了する準備をしていない場合や、お客様が自分でインスタンスを終了した場合、instance-action は存在せず、HTTP 404 エラーが出力されます。

termination-time

この項目は下位互換性のために維持されています。代わりに instance-action を使用してください。

スポットインスタンス がスポットサービスによって削除されるとマークされた場合、termination-time 項目がインスタンスメタデータに存在します。そうでない場合、これは存在しません。termination-time は以下のように取得できます。

PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/spot/termination-time

termination-time 項目は、インスタンスがシャットダウン信号を受信するおよその時刻 (UTC) を指定します。例:

2015-01-05T18:02:00Z

Amazon EC2 がインスタンスを終了する準備をしていない場合や、お客様が自分で スポットインスタンス を終了した場合、termination-time 項目は存在しない (この場合、HTTP 404 エラーが出力されます) か、時刻値以外の値が含まれます。

Amazon EC2 がインスタンスの終了に失敗した場合は、リクエストステータスが fulfilled に設定されます。termination-time 値は、元のおよその時刻のまま (過去の時刻になっていますが)、インスタンスのメタデータに残ります。

中断された スポットインスタンス の請求

スポットインスタンス (Spot ブロックではない) が中断された場合は、次のように請求されます。

スポットインスタンス を中断するユーザー オペレーティングシステム 最初の 1 時間で中断 最初の 1 時間後の任意の時間に中断

お客様が スポットインスタンス を中断した場合

Linux (RHEL および SUSE は除く) 使用された時間 (秒) の請求 使用された時間 (秒) の請求
Windows、RHEL、SUSE 使用時間が 1 時間未満の場合でも、1 時間分の料金を請求 使用された 1 時間分 (中断された時間が 1 時間未満の場合も 1時間分) を請求

Amazon EC2 で スポットインスタンス が中断された場合

Linux (RHEL および SUSE は除く) 料金は発生しない 使用された時間 (秒) の請求
Windows、RHEL、SUSE 料金は発生しない

使用された 1 時間分は請求されるが、中断された時間が 1 時間未満の場合は請求されない

スポットインスタンス (Spot ブロック内) が中断された場合は、次のように請求されます。

スポットインスタンス を中断するユーザー オペレーティングシステム 最初の 1 時間で中断 最初の 1 時間後の任意の時間に中断

お客様が スポットインスタンス を中断した場合

Linux (RHEL および SUSE は除く) 使用された時間 (秒) の請求 使用された時間 (秒) の請求
Windows、RHEL、SUSE 使用時間が 1 時間未満の場合でも、1 時間分の料金を請求 使用された 1 時間分 (中断された時間が 1 時間未満の場合も 1時間分) を請求

Amazon EC2 で スポットインスタンス が中断された場合

Linux (RHEL および SUSE は除く) 料金は発生しない 料金は発生しない
Windows、RHEL、SUSE 料金は発生しない

料金は発生しない