当 AWS EC2 上的 HTTP 停止响应时,如何重新启动服务器

当 AWS EC2 上的 HTTP 停止响应时,如何重新启动服务器

我在 Amazon EC2 上有一个服务器,我想在它停止响应 HTTP 请求时重新启动它。它是一个单个微实例。

我考虑过使用 AWS Lambda,但找不到任何脚本(最好是 Python 脚本)。我还尝试过使用 Route 53 健康检查,但无法将其与重启 EC2 的警报关联起来(因为 EC2 操作在健康检查警报上不可用)。

谢谢

答案1

如果实例停止响应 HTTP,它可能会不再“健康”,并会显示在云监控->指标->EC2->每个实例的指标->i-1234abcd...

然后找到状态检查失败StatusCheckFailed_InstanceStatusCheckFailed_System看看它们是否显示实例停止响应的时间。其中一个应该显示。或者找到其他可用的指标,例如路线 53命名空间。

找到合适的指标后创建一个警报点击图形指标然后是小“钟”在右侧。

在此处输入图片描述

在下一个对话框中点击+EC2 操作并选择重启实例。您可能需要调整一些其他参数,这可能需要几次迭代。

在此处输入图片描述

完毕 :)

希望有帮助!

答案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 触发器。

相关内容