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

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

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

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

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

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

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

スポット群 で指定された オンデマンドインスタンス は、中断することができません。

中断動作

中断時に Amazon EC2 が スポットインスタンス を休止、停止、または終了するかを指定できます。お客様のニーズに合う中断時の動作を選択できます。デフォルトでは、スポットインスタンス は中断されると削除されます。中断動作を変更するには、[Interruption behavior] または起動設定または起動テンプレートの InstanceInterruptionBehavior からオプションを選択します。

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

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

要件

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

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

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

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

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

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

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

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

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

要件

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

  • スポット群 リクエストの場合は、タイプは request ではなく 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 以降

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

推奨事項

  • 休止中にインスタンスメモリがルートボリュームに格納されるため、暗号化された EBS ボリュームをルートボリュームとして使用することを強くお勧めします。これにより、データがボリューム上にあるときや、インスタンスとボリューム間でデータが移動しているときに、メモリ (RAM) の内容が暗号化されます。AMI に暗号化されたルートボリュームがない場合は、新しい AMI にコピーして暗号化をリクエストできます。詳細については、「Amazon EBS Encryption」および「AMI のコピー」を参照してください。

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

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

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

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

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

中断に対する準備

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

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

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

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

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

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

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

インスタンス休止の準備

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

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

Amazon Linux インスタンスを準備するには

  1. カーネルが休止をサポートしていることを確認し、必要に応じてカーネルを更新します。

  2. AMI にエージェントが含まれていない場合は、次のコマンドを使用してエージェントをインストールします。

    sudo yum update; sudo yum install hibagent
  3. 以下をユーザーデータに追加します。

    #!/bin/bash /usr/bin/enable-ec2-spot-hibernation

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

  1. AMI にエージェントが含まれていない場合は、次のコマンドを使用してエージェントをインストールします。

    sudo apt-get install hibagent
  2. 以下をユーザーデータに追加します。

    #!/bin/bash /usr/bin/enable-ec2-spot-hibernation

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

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

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

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

Amazon EC2 によって スポットインスタンス が中断されるとイベントが発生し、このイベントは 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 は以下のように取得できます。

[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"}

次の例は、休止がすぐに開始されたことを示しています。

{"action": "hibernate", "time": "2017-11-28T08:22:00Z"}

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

termination-time

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

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

[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 が元のおよその時刻のまま (過去の時刻になっていますが)、インスタンスのメタデータに残ることに注意してください。