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

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

スポットインスタンスに対する需要は刻一刻と大幅に変化する可能性があります。また、スポットインスタンスの可用性も利用可能な未使用の EC2 インスタンスの数に応じて大きく変化する可能性があります。 さらに、どれほど高い価格で入札しても、スポットインスタンスが中断される可能性があります。したがって、アプリケーションでスポットインスタンスの中断に対して準備する必要があります。中断できないアプリケーションについては、スポットインスタンスを使用しないことを強くお勧めします。

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

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

  • 容量 – スポットインスタンスの需要を満たすのに十分な未使用の EC2 インスタンスがない場合、Amazon EC2 は、入札価格が最も低いインスタンスから順にスポットインスタンスを中断します。同じ入札価格で複数のスポットインスタンスが存在する場合、インスタンスを中断する順序はランダムに決定されます。

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

中断動作

中断時に Amazon EC2 がスポットインスタンスを停止するか削除するかを指定できます。デフォルトでは、スポットインスタンスは中断されると削除されます。この動作を変更し、次の要件が満たされたときに、Amazon EC2 がスポットインスタンスを停止するようにできます。

要件

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

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

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

スポットインスタンスがスポットサービスによって停止された後は、スポットサービスのみが、同じ起動設定を使用してのみ、これを再起動できます。スポットインスタンスのアベイラビリティーゾーンとインスタンスタイプに一致する容量が利用可能な場合、スポットインスタンスが起動されます。スポットフリートでは、別のアベイラビリティーゾーンまたはインスタンスタイプでのみ容量を使用できる場合、スポットフリートは利用可能なキャパシティで起動設定を使用して新しいスポットインスタンスを起動します。

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

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

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

中断に対する準備

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

  • 合理的な入札価格を選択します。入札価格は、リクエストが受理されやすくなるように十分に高くする必要がありますが、支払える金額よりも高くしないでください。供給が長期間にわたって低い場合、スポット料金は最も高額の入札価格に基づいており、その期間中、スポット料金が高いままになる可能性があるため、このことは重要です。 オンデマンドインスタンスの価格を上回る価格を入札しないことを強くお勧めします。

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

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

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

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

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

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

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

この警告は、インスタンスメタデータの項目を使用して、スポットインスタンス上のアプリケーションで使用できます。instance-action 項目を使用してください。termination-time 項目は下位互換性のために維持されます。

instance-action

スポットインスタンスがスポットサービスによって停止または削除されるとマークされた場合、instance-action 項目がインスタンスメタデータに存在します。これは次の手順で取得できます。

Copy
[ec2-user ~]$ curl 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"}

termination-time

スポットインスタンスがスポットサービスによって削除されるとマークされた場合、termination-time 項目がインスタンスメタデータに存在します。この項目は下位互換性のために維持されます。これは次の手順で取得できます。

Copy
[ec2-user ~]$ if curl -s http://169.254.169.254/latest/meta-data/spot/termination-time | grep -q .*T.*Z; then echo terminated; fi

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

2015-01-05T18:02:00Z

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

Amazon EC2 がインスタンスの削除に失敗した場合は、スポット入札ステータスが fulfilled に設定されます。termination-time が元のおよその時刻のまま (過去の時刻になっていますが)、インスタンスのメタデータに残ることに注意してください。