我在 Amazon EC2 上有一个服务器,我想在它停止响应 HTTP 请求时重新启动它。它是一个单个微实例。
我考虑过使用 AWS Lambda,但找不到任何脚本(最好是 Python 脚本)。我还尝试过使用 Route 53 健康检查,但无法将其与重启 EC2 的警报关联起来(因为 EC2 操作在健康检查警报上不可用)。
谢谢
答案1
答案2
我自己解决了这个问题,我用 Python 编写了一个 lambda 函数,并通过 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)
答案3
您需要使用 AWS API。一种方法是使用博托
或者你可以使用更高级的东西,比如Ansible EC_instance 模块
你可以通过多种方式将其链接到监控事件,从简单的 cron 作业到基于事件的程序,例如节点红色实例或者介于两者之间的某种东西,比如 IFTT 触发器。