У меня есть приложение, развернутое на 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 прекращены