Запуск обновлений на EC2, которые откатываются при сбое проверки статуса
Я устанавливаю процесс исправления для серверов EC2, на которых запущено веб-приложение.
Мне нужно создать автоматизированный процесс, который устанавливает системные обновления, но возвращается к последнему работающему экземпляру ec2, если веб-приложение не проходит проверку состояния.
Я пытался сделать это с помощью документа автоматизации в EC2 Systems Manager, который выполняет следующие шаги:
- Остановить экземпляр EC2
- Создать AMI из экземпляра
- Запустить новый экземпляр из недавно созданного AMI
- Запустить обновления
- Запустите проверку статуса в веб-приложении
- Если проверка не удалась, остановите новый экземпляр и перезапустите исходный экземпляр
Документ автоматизации успешно выполняет первые 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 использовал переменные для запуска проверки состояния и отката к последнему работающему экземпляру, если произошел сбой.