Назад | Перейти на главную страницу

Остановить развертывание opsworks после первого сбоя

Я наконец-то завершил настройку полнофункциональной среды в AWS Opsworks для одного из наших проектов, но еще не начал с ней работать.

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

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

Как я уже сказал, этого не было в производственной среде, и как только мы начнем работать, у нас также будет промежуточный стек, и, надеюсь, ничего подобного не должно происходить в реальном времени (т.е. синтаксические ошибки шеф-повара), но все же мне было любопытно, предоставляет ли Opsworks что-то, где вы можно сказать: «вы потерпели неудачу в одном экземпляре; теперь прекратите развертывание в остальных экземплярах».

Также было бы неплохо, если бы существовал способ получения уведомлений о сбое развертывания, например, отправка уведомления SNS или что-то подобное.

Мне было любопытно, как другие люди справляются с такими ситуациями: сбой развертывания, остановка развертывания для всех экземпляров, уведомления, откат и т. Д. Или, может быть, я пропустил некоторые конфигурации на панели управления.

К сожалению, OpsWorks еще не поддерживает скользящие развертывания (например, CodeDeploy и Elastic Beanstalk). Поэтому трудно остановить другие экземпляры, которые могут быть на полпути выполнения задачи к тому моменту, когда один экземпляр выйдет из строя.

Я предлагаю клонировать ваш производственный стек, чтобы создать стек разработки. У вас есть мастер и производственная ветка git в вашем репозитории рецептов, ваш стек разработки использует мастер, а производство использует производственную ветку.

Выполняйте всю свою работу и тестирование в стеке разработки, где не имеет значения, если вы случайно развернете с синтаксической ошибкой Chef. После того, как вы протестировали свои изменения и убедились, что они готовы к запуску, объедините мастер-версию с производственной версией и запустите задачу в своем производственном стеке.