У меня есть сервер на 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.