Как смоделировать BidEvictedEvent для спотовых инстансов EC2?
У меня есть балансировщик нагрузки приложений, содержащий несколько спотовых экземпляров EC2.
Я обнаружил, что один из них был уволен из-за BidEvictedEvent
, т.е. кто-то запросил спотовый экземпляр по цене выше моей.
В
BidEvictedEvent
сделал мой веб-сервис недоступным (502 bad gateway
) на несколько секунд.
Итак, я хочу выполнить сценарий, который отключает EC2 от группы автоматического масштабирования до того, как он будет завершен.
Теперь мой вопрос: как я могу смоделировать
BidEvictedEvent
чтобы я мог убедиться, что мой скрипт выполнен правильно?
Я попытался завершить работу экземпляра EC2 из консоли AWS. Но это не создает
502 bad gateway
для клиента моей веб-службы, когда до завершения EC2 не выполняется никаких сценариев.
Я использую упомянутый здесь метод, чтобы отслеживать, когда происходит событие BidEvictedEvent.
1 ответ
Ссылка, которую вы предоставили, предназначена для старого способа обнаружения уведомлений о точечных прерываниях. Может быть, именно так вы хотите это сделать, но в наши дни вы бы использовали правило CloudWatch Event для
EC2 Spot Instance Interruption Warning
.
Используя правило, вы можете настроить лямбда-функцию, которая будет выполнять действия в вашем экземпляре, запланированные для завершения. Эти действия могут включать удаление из ASG или запуск на нем пользовательских команд через
SSM Command Run
.
Более того, вы можете легко смоделировать событие, так как оно имеет известный формат, и вы можете вызвать лямбду с тестовым событием.
Подробнее об этом можно прочитать в разделе Использование уведомлений о прерывании работы спотовых инстансов Amazon EC2. Пример события точечного прерывания, которое ваша лямбда-функция должна будет обработать / смоделировать:
{
"version": "0",
"id": "1e5527d7-bb36-4607-3370-4164db56a40e",
"detail-type": "EC2 Spot Instance Interruption Warning",
"source": "aws.ec2",
"account": "123456789012",
"time": "1970-01-01T00:00:00Z",
"region": "us-east-1",
"resources": [
"arn:aws:ec2:us-east-1b:instance/i-0b662ef9931388ba0"
],
"detail": {
"instance-id": "i-0b662ef9931388ba0",
"instance-action": "terminate"
}
}