【发布时间】:2018-08-22 08:45:52
【问题描述】:
我有一个带有 HTTP 服务器的 EC2;我想在 2 分钟后在 HTTP 端口上没有响应时自动停止并启动它。
在不使用规模组和弹性负载均衡器 (ELB) 的情况下,在 AWS 上实施的最佳方式是什么。
正如我之前提到的,我不需要创建新实例,只需停止并启动即可。
【问题讨论】:
标签: amazon-web-services amazon-ec2 amazon-cloudwatch
我有一个带有 HTTP 服务器的 EC2;我想在 2 分钟后在 HTTP 端口上没有响应时自动停止并启动它。
在不使用规模组和弹性负载均衡器 (ELB) 的情况下,在 AWS 上实施的最佳方式是什么。
正如我之前提到的,我不需要创建新实例,只需停止并启动即可。
【问题讨论】:
标签: amazon-web-services amazon-ec2 amazon-cloudwatch
首先考虑在 monit 或其他监控服务的帮助下重新启动服务,而不是停止和启动实例,因为重新启动实例需要时间而且不是一个好主意。
但如果您担心实例宕机的情况,您可以配置自动修复(https://aws.amazon.com/blogs/aws/new-auto-recovery-for-amazon-ec2/)。
另一种自定义方式是,在实例内部使用 curl 进行简单的 hello 检查并存储响应日志并将其安排在 cron 中,将日志同步到 cloudwatch,在 cloudwatch 中,您可以使用日志绘制指标,如果指标计数低于阈值 2 分钟并配置警报,您可以编写 lambda 函数来重新启动实例,并将 lambda 关联到警报。(https://aws.amazon.com/premiumsupport/knowledge-center/start-stop-lambda-cloudwatch/)。既然你提到你有一个实例,这种方法会起作用,如果你有多个实例,你需要处理命名空间,但是再次重启实例不是一个好主意。
【讨论】:
我正在使用 Route53 运行状况检查,它在触发时会向 SNS 主题发送通知,该主题会触发重启服务器的 Lambda 函数。
【讨论】: