Как смоделировать 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"
  }
}
Другие вопросы по тегам