Запуск обновлений на EC2, которые откатываются при сбое проверки статуса

Я устанавливаю процесс исправления для серверов EC2, на которых запущено веб-приложение.

Мне нужно создать автоматизированный процесс, который устанавливает системные обновления, но возвращается к последнему работающему экземпляру ec2, если веб-приложение не проходит проверку состояния.

Я пытался сделать это с помощью документа автоматизации в EC2 Systems Manager, который выполняет следующие шаги:

  1. Остановить экземпляр EC2
  2. Создать AMI из экземпляра
  3. Запустить новый экземпляр из недавно созданного AMI
  4. Запустить обновления
  5. Запустите проверку статуса в веб-приложении
  6. Если проверка не удалась, остановите новый экземпляр и перезапустите исходный экземпляр

Документ автоматизации успешно выполняет первые 5 шагов, но я не могу определить, как вызвать шаг 6? Могу ли я сделать это в документе автоматизации? Какой вывод я смогу вызвать из шага 5? Если он использует aws:runCommand, должен ли runCommand вызвать новый документ автоматизации или другой инструмент AWS?

1 ответ

Я попробовал следующее, чтобы решить эту проблему, которая более или менее сработала:

  • Включено действие aws:runCommand в документ по автоматизации
  • Это запустило DocumentName "AWS-RunShellScript" со следующими параметрами:

Скачал скрипт с s3:

sudo aws s3 cp s3://path/to/s3/script.sh /tmp/script.sh

Установите файл в исполняемый файл:

chmod +x /tmp/script.sh

Выполнить скрипт, используя переменные, заданные или созданные документом автоматизации

bash /tmp/script.sh -o {{VAR1}} -n {{VAR2}} -i {{VAR3}} -l {{VAR4}} -w {{VAR5}}

Сценарий включал следующую команду getopts для установки введенных переменных:

while getopts o:n:i:l:w: option
do
case "${option}"
in
n) VAR1=${OPTARG};;

o) VAR2=${OPTARG};;

i) VAR3=${OPTARG};;

l) VAR4=${OPTARG};;

w) VAR5=${OPTARG};;

esac

done

Сценарий bash использовал переменные для запуска проверки состояния и отката к последнему работающему экземпляру, если произошел сбой.

Другие вопросы по тегам