当 CPU 低于某个水平时停止(不终止)EC2 实例

Posted

技术标签:

【中文标题】当 CPU 低于某个水平时停止(不终止)EC2 实例【英文标题】:Stop (not terminate) an EC2 Instance when CPU drops below certain level 【发布时间】:2015-12-20 19:35:42 【问题描述】:

我有两台服务器(上面有我的应用程序)已经在运行......从 Ubuntu AMI 创建。 在使用自动缩放时,它使用 AMI 启动新实例。

我可以使用自动缩放来仅停止实例吗(不终止;这样我以后启动服务器时就不需要 AMI);然后在 CPU 增加到 x% 以上时启动实例(我已停止的旧实例)!

如果不是自动缩放;我也可以接受任何其他解决方案。我可以使用 Cloudwatch 停止实例,但如何重新启动它?

【问题讨论】:

【参考方案1】:

我认为您可以通过以下方式做到这一点:

CloudWatch 指标:记录 CPU 使用率 CloudWatch 警报:当 CPU 指标高于/低于时发出警报 一些门槛 SNS 主题:触发 CloudWatch 警报时发送通知 Lambda 函数:由 SNS 调用以停止/启动相关 EC2 实例

参见与Invoking Lambda from SNS相似的Scaling ECS文章。

【讨论】:

这个答案比我的好。 是的,这是正确的答案。它比我有更多的细节。【参考方案2】:

目前无法使用 AutoScaling 停止实例。 AutoScaling 只能根据 CloudWatch 警报等启动新实例和终止实例。

要做您想做的事,您需要停止使用 AutoScaling 并使用另一个“工作”EC2 实例来替换 AutoScaling。该“工作”实例需要 24/7 全天候运行,它将监控您的其他 EC2 实例的 CPU 并适当地启动和停止它们。

【讨论】:

【参考方案3】:

AutoScaling 无法做到这一点。您可以禁用 AutoScaling 并让 CloudWatch 触发一些 Lambda 函数来启动/停止您的实例。

【讨论】:

通过 cloudwatch 我们可以停止实例.. 但是我们如何通过 Cloudwatch 启动实例呢? @Deepak 你读过我说你会使用 Lambda 的部分吗?

以上是关于当 CPU 低于某个水平时停止(不终止)EC2 实例的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法从 ELB 自动终止不健康的 EC2 实例?

ECS 停止实例

如何实现并行,以这样的方式延迟,当输出低于阈值时并行化 for 循环停止?

在 Beanstalk 部署或 ECS 任务不使用时安排 EC2 实例的停止/启动?

EC2启动/停止/重启/终止实例

如何在终止时使用现有 EC2 实例映像创建新的 EC2 实例?