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

Как перезагрузить сервер, когда HTTP перестает отвечать на AWS EC2

У меня есть сервер на Amazon EC2, и я хотел бы перезагружать его, когда он перестает отвечать на HTTP-запросы. Это единичный микро-экземпляр.

Я думал об использовании AWS Lambda, но не смог найти никаких скриптов (желательно на Python). Я также пытался использовать проверку работоспособности Route 53, но невозможно связать ее с тревогой с перезагрузкой EC2 (потому что действия EC2 недоступны для тревог проверки работоспособности).

Спасибо

Если экземпляр перестанет отвечать на HTTP, он, вероятно, перестанет быть «работоспособным» и будет отображаться как таковой в CloudWatch -> Метрики -> EC2 -> Показатели для каждого экземпляра -> i-1234abcd ...

Тогда найди StatusCheckFailed и StatusCheckFailed_Instance и StatusCheckFailed_System и посмотрите, отображаются ли они, когда экземпляр перестает отвечать. Один из них должен. В качестве альтернативы найдите другую полезную метрику, возможно, в Маршрут53 пространство имен.

Как только вы найдете подходящую метрику создать Тревога нажав на Графические показатели а затем маленький "колокол" справа.

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

Готово :)

Надеюсь, это поможет!

Я решил это сам, написал лямбда-функцию на Python и запускал ее каждый час по планировщику событий в AWS CloudWatch

import json
from botocore.vendored import requests
import boto3
import time

region = 'xx-xxxx-x'
instances = ['x-xxxxxxxxxxxx']
website = 'https://website.com/'
webstring = 'SearchText'

def lambda_handler(event, context):
    for i in range(0,3):
        if check_website():
            return 'Website OK'
        time.sleep(60)
    reboot_instance()
    return 'Restarted instances'


def check_website():
    r = requests.get(website)
    if webstring in r.text:
        return True
    else:
        return False

def reboot_instance():
    ec2 = boto3.client('ec2', region_name=region)
    ec2.reboot_instances(InstanceIds=instances)

Вам необходимо использовать AWS API. Один из способов - использовать бото

Или вы можете использовать что-то более высокоуровневое, например Модуль Ansible EC_instance

Вы можете связать это с мониторингом событий разными способами, от простого задания cron до чего-то, основанного на событиях, например Узел-красный экземпляр или что-то среднее, например триггер IFTT.