私は、自動スケーリングが有効になっているElasticBeanstalk環境でホストされているTomcat 8にデプロイされるアプリケーションを持っています。アプリケーションでは、長時間実行されているジョブがあり、すべての変更をデータベースにコミットする必要があります。AWS自動スケーリングがEC2インスタンスを終了しているときに、Tomcatで長期実行タスクを終了するにはどうすればよいですか?
問題は、AWSが規模の拡大中にEC2インスタンスを強制終了し、一部のジョブが期待通りに終了しないことがあることです。デフォルトでは、AWSはわずか30秒待ってからTomcatプロセスを強制終了します。
私は既に/etc/tomcat8/tomcat8.conf
ファイルを変更しました:パラメータSHUTDOWN_WAIT
を3600
(デフォルトでは60
)に変更しました。しかし、それは問題を解決しませんでした - インスタンス全体は20〜25分後に殺されます。
次に、.ebextensions
ファイル(hereと記載されています)を介してライフサイクルフックを設定しようとしました。しかし、ライフサイクルフックが実際にインスタンスの終了を延期していることを承認できませんでした(まだAWSサポートからの回答を待っています)。
質問:オートスケーリンググループの拡張時にインスタンス終了を延期またはキャンセルするための「法的な」方法をご存知ですか?
私はそのような何かをしたい:
- AWSは、自動スケーリンググループ
- 自動スケーリンググループに拡大し始めは、EC2インスタンスにシャットダウン信号を送信
- EC2インスタンスは、すべてのアクティブなプロセスを停止開始します
- Tomcatプロセスは、かもしれない(シャットダウン信号を受信し、アクティブジョブを
- を完成したアプリケーションは、ジョブ結果をコミットするまで待機しますAPI、および労働者 -
- Tomcatプロセスは、2つの部分から成り終了
これはハーフフルにすることができます:https://stackoverflow.com/questions/42348571/aws-scaling-in-termination-protection-for-ec2-container-service/42351705#42351705 – Mahdi