Скажем, nginx на инстансе EC2 дает сбой. Экземпляр исправен, и показатели CloudWatch отличные, но все домены, размещенные на сервере, теперь «В соединении отказано».
Это кажется очень простой функцией - мониторинг, чтобы убедиться, что веб-сайт возвращает 200. Это где-то в CloudWatch? Я бы подумал, что что-то может просто curl -s -o /dev/null -w "%{http_code}" http://www.example.org/
и если он не получит код возврата 200, скажем, 5 раз подряд, он вызовет перезапуск экземпляра и уведомление SNS.
Возможно, мне нужно запустить что-то на экземпляре EC2, чтобы перезапустить nginx, если что-то станет недоступным? В любом случае, я хотел бы знать, как это сделать с помощью ресурса AWS, чтобы я мог даже отслеживать любой сайт и запускать SNS.
Извините, если мне здесь не хватает чего-то простого. Просто кажется, что это можно было бы легко найти, но я потратил несколько месяцев, пытаясь понять это.
Обычно это работа для балансировщик нагрузки (ALB или ELB), который может определить, запущен ли веб-сервер на экземпляре или нет, и если нет, вы можете запустить какое-либо действие через CloudWatch. Опять же, как правило, замена экземпляра через Группа автоматического масштабирования.
Использование ASG и ALB совершенно нормально, даже если вам нужен только один экземпляр.
В качестве альтернативы вы можете создать Пользовательские метрики CloudWatch с помощью агента CW, установленного на экземпляре. Затем вы можете сообщить все, что захотите.
Надеюсь, это поможет :)
IMHO, замена экземпляра из-за того, что Nginx перестал отвечать, не является хорошим инженерным решением. Замена инстанса может занять несколько минут, поэтому использование AWS будет означать, что ваш сервис будет отключен в течение этого времени, тогда как простая перезагрузка Nginx занимает менее 1 секунды.
Nginx - очень и очень надежная технология. Если это не удается до такой степени, что вы смотрите на решения AWS для обеспечения надежности, вам, вероятно, нужно вернуться и посмотреть на свою настройку Nginx. Я ценю, что вы хотите узнать об AWS, но я не думаю, что это хороший вариант использования.
Чтобы ответить на вопрос: существует множество способов повысить надежность сайта в AWS. Если вы хотите сделать это с помощью одного экземпляра и без дополнительных затрат, я бы рекомендовал ElasticBeanstalk в качестве решения под ключ. Он будет применять все необходимые механизмы надежности на основе предоставленной вами проверки работоспособности. Вы также можете использовать Docker в ElasticBeanStalk, который является конечным местом всех операций SRE.