我有一个部署到 Tomcat 8 的应用程序,该应用程序托管在启用了自动缩放的 ElasticBeanstalk 环境中。在应用程序中,我有必须完成的长时间运行的作业,并且所有更改都必须提交到数据库。
问题是 AWS 可能会在缩减期间终止任何 EC2 实例,然后某些作业可能无法按预期完成。默认情况下,AWS 仅等待 30 秒,然后终止 Tomcat 进程。
我已经更改了/etc/tomcat8/tomcat8.conf
文件:将参数设置SHUTDOWN_WAIT
为3600
(60
默认情况下)。但它并没有解决问题 - 整个实例在 20-25 分钟后被杀死。
然后我尝试通过.ebextensions
文件配置生命周期钩子(如这里解释的那样)。但我不同意生命周期钩子真的推迟了实例的终止(仍在等待 AWS 支持人员对此的答复)。
所以问题是:当自动缩放组扩展时,您是否知道任何“合法”的方式来推迟或取消实例终止?
我想要这样的东西:
- AWS 开始在自动扩展组中扩展
- 自动缩放组向 EC2 实例发送关闭信号
- EC2 实例开始停止所有活动进程
- Tomcat 进程收到关闭信号,但一直等到活动作业完成
- 应用程序提交作业结果(甚至可能需要 60 分钟)
- Tomcat进程终止
- EC2 实例已终止