у меня есть группа автомасштабирования который масштабируется вверх/вниз на основе собственной логики.
Мы используем бото3 клиент для выполнения таких действий по масштабированию, когда это необходимо.
По умолчанию наши экземпляры EC2 имеют максимальный жизненный цикл выполнения 60 секунд. Когда спотовые инстансы запрашиваются для прекращения, очень важно, чтобы они немедленно отсоединились от своего балансировщика нагрузки.
Когда AWS восстанавливает свои спотовые инстансы, это обрабатывается через ec2-точечный обработчик завершения lambdas, чтобы отсоединить их от соответствующего балансировщика нагрузки: это помогает нам остановить обработку новых задач в тех инстансах EC2, которые скоро выйдут из строя, и позволить им завершить свой жизненный цикл.
Чтение бото3 документация дает представление о том, как мы можем останавливаться и прекращать отдельные экземпляры, но не о том, как мы можем сказать AWS, чтобы изящно вернуть их:
ids = ['instance-id-1', 'instance-id-2', ...]
# Бото 2.x
ec2_connection.stop_instances (instance_ids = идентификаторы)
ec2_connection.terminate_instances (instance_ids = идентификаторы)
# Бото3
ec2.instances.filter(InstanceIds=ids).stop()
ec2.instances.filter(InstanceIds=ids).terminate()
Как мы можем добиться желаемой функциональности, которая запускала бы уведомление о прекращении и дополнительно сообщала AWS о необходимости вернуть свои спотовые инстансы в течение двух минут? программно?