Вызвать скрипт на завершение EC2 - PullRequest
0 голосов
/ 09 мая 2018

Я должен предпринять определенные действия во время события масштабирования в AWS. Экземпляр ec2 должен иметь возможность сохранять некоторые журналы и отчеты в корзину S3. Это может занять от 5 до 15 минут.

У меня уже есть скрипт, который вызывается по завершении:

ln -s /etc/ec2-termination /etc/rc0.d/S01ec2-termination

Однако сценарий внезапно заканчивается в течение 5 минут. Я рассматриваю возможность использования крючков AWS LifeCycle для продления срока службы EC2. Документация не ясна при вызове сценария способом, аналогичным сценарию пользовательских данных.

Существуют способы использования AWS lambda или SNS для получения уведомлений. Это может потенциально использоваться для информирования ec2.

Но я хотел бы знать, есть ли более простое решение этой проблемы. Есть ли способ зарегистрировать сценарий с перехватчиками жизненного цикла, который вызывается при событии масштабирования.

Ответы [ 2 ]

0 голосов
/ 03 июня 2019

В зависимости от того, чего вы хотите достичь, при таком подходе вам понадобятся только 2 вещи и намного проще):

  1. Крюк жизненного цикла отправляет уведомление в SQS
  2. Приложение читает SQS и выполняет действие
0 голосов
/ 09 мая 2018

номер

Тот факт, что экземпляр завершается, управляется в инфраструктуре AWS. Автоматическое масштабирование не позволяет «войти» в экземпляр EC2, чтобы вызвать что-либо.

Вместо этого вам нужно написать некоторый код для экземпляра, который проверяет, находится ли экземпляр в состоянии завершения, а затем предпринимает соответствующие действия.

Примером может быть:

  • Lifecycle Hook отправляет уведомление через Amazon SNS
  • Amazon SNS запускает функцию AWS Lambda
  • Функция Lambda может добавить тег к экземпляру (например, Завершение = Да)
  • Сценарий на экземпляре EC2 запускается каждые 15 секунд, чтобы проверить теги , связанные с экземпляром EC2 (на котором он выполняется). Если он находит тег, он запускает процесс завершения работы.

(Будьте осторожны, чтобы скрипт не запускался снова во время процесса выключения, иначе он может пытаться выполнять процесс выключения каждые 15 секунд!)

В качестве альтернативы, сохраняйте информацию о завершении работы в хранилище параметров диспетчера систем или в базе данных, но использование тегов выглядит очень хорошо масштабируемым!

Обновленная версия:

Спасибо raevilman за идею:

  • Lifecycle Hook отправляет уведомление через Amazon SNS
  • Amazon SNS запускает функцию AWS Lambda
  • Функция Lambda вызывает команду запуска AWS Systems Manager для запуска кода на экземпляре

Намного проще!

...