我们有一个应用程序,客户可以将数据和文档上传到多个 EC2 实例。我们将上传的内容存储在 EBS 卷上。
我们的应用程序偶尔会失败。有时是因为我们的应用服务器出了问题,有时是因为 EC2 硬件有问题。
如何自动恢复特定实例?换句话说,当某个实例不可用超过 X 分钟时,我希望自动终止该实例,启动一个新实例(可能在新硬件上),并将旧 EBS 卷附加到该实例,以便保留客户的数据。
是否有某种方法可以设置 CloudWatch 或自动扩展来执行此操作?
答案1
如何自动恢复特定实例?换句话说,当某个实例不可用超过 X 分钟时,我希望自动终止该实例,启动一个新实例(可能在新硬件上),并将旧 EBS 卷附加到该实例,以便保留客户的数据。
这可以使用 amazon api 来实现。基本上,有一个 cron 每 12 小时左右对 ebs 卷进行快照....然后让 nagios 检查主机,并在发生 10 次左右故障时,让 nagios 执行脚本来调用 api 工具。然后 nagios 执行的脚本可以:
1) 查找主机的实例 ID(通过 ssh 进入主机并使用 http 访问 aws 元数据,或通过 grep ec2-describe-instance)
2) 终止实例 ID(ec2-terminate-instance)
3) 从快照创建卷(ec2-create-volume)
4) 根据 ami 启动新实例(ec2-run-instance)
5) 将新卷附加到实例(ec2-attach-volume)
aws cli api 工具:http://aws.amazon.com/developertools/351
但是,还有其他问题可能需要解决,例如 DNS、弹性 IP、安全组、终止保护和应用层服务配置。运行 ec2-run-instance -h 获取更多帮助,或访问 aws api 论坛...