Я наконец-то закончил настройку полностью функциональной среды в AWS Opsworks для одного из наших проектов, но еще не запустил ее в эксплуатацию.
После внесения некоторых изменений в один из моих шаблонов я случайно допустил синтаксическую ошибку chef, обновил свой пользовательский репозиторий кулинарной книги на запущенных экземплярах и повторно развернул свое приложение.
В середине развертывания первый экземпляр, очевидно, дал сбой, а второй все еще продолжал выполнять развертывание. Пытаясь загрузить сайт через балансировщик нагрузки, я вижу, что сайт уже упал, а развертывание на втором экземпляре вскоре завершилось.
Как я уже сказал, этого не было в рабочей среде, и как только мы запустим ее в эксплуатацию, у нас также будет промежуточный стек, и, надеюсь, ничего подобного не произойдет в рабочей среде (например, синтаксические ошибки chef), но мне все равно было интересно, предоставляет ли Opsworks что-то, где можно сказать: «Вы допустили ошибку на одном экземпляре; теперь прекратите развертывание на остальных экземплярах».
Также было бы неплохо, если бы существовал способ получения уведомлений в случае сбоя развертывания, например, отправка уведомления в социальных сетях или что-то подобное.
Мне было интересно, как другие люди справляются с подобными ситуациями: когда развертывание завершается неудачей, останавливается развертывание на всех экземплярах, появляются уведомления, выполняется откат и т. д. Или, может быть, я пропустил какие-то настройки на панели управления.
решение1
К сожалению, OpsWorks пока не поддерживает скользящие развертывания (например, CodeDeploy и Elastic Beanstalk). Поэтому сложно остановить другие экземпляры, которые могут быть на полпути к тому времени, когда один экземпляр выйдет из строя.
Я предлагаю клонировать ваш производственный стек, чтобы создать стек разработки. Имейте мастер и производственную ветку git в вашем репозитории рецептов, ваш стек разработки использует мастер, а производство использует производственную ветку.
Выполняйте всю работу и тестирование в стеке разработки, где не имеет значения, если вы случайно развернете с ошибкой синтаксиса Chef. После того, как вы протестировали свои изменения и убедились, что они готовы к запуску, объедините master с production и запустите задачу в вашем production-стеке.