【问题标题】:AWS CloudWatch to start/stop EC2 instancesAWS CloudWatch 启动/停止 EC2 实例
【发布时间】:2016-11-22 09:00:52
【问题描述】:

只是寻找在另一个 EC2 实例上 CPU 利用率增加或减少的情况下启动/停止 AWS EC2 实例的方法。我知道 AWS 中有可用的 Auto Scaling 服务,但我有一个无法利用此服务的情况。

所以只是看看是否有可能或任何人都可以帮助我。

只是详细说明问题,例如假设我在 AWS 账户上有 2 个 EC2 实例,名称为 EC21 和 EC22。默认情况下,EC22 实例已停止。

现在我需要设置 CloudWatch 或任何其他服务来检查 EC21 实例上的负载/CPU 利用率是否增加 70%,然后需要启动 EC22 服务器,类似地,如果 EC21 实例上的负载减少 30%,然后停止 EC22 服务器。

请指教!

【问题讨论】:

  • 如果可能,您应该考虑使用自动缩放组。将 min=1 和 max=2 设置为适当扩展的组可能效果最好。
  • 我不能使用自动缩放组选项,正如我在问题中已经提到的那样。仅供参考,我需要在负载平衡器环境中支持 MSDTC,这会导致自动缩放问题。有关该问题,请参阅我在 * 上的另一个线程; *.com/questions/38452125/…
  • 自动伸缩组不需要 ELB。

标签: amazon-web-services amazon-ec2 amazon-cloudwatch


【解决方案1】:

当您的 CloudWatch 警报被触发时,它将通知一个 SNS 主题。您可以让该 SNS 主题调用 Lambda 函数,然后该函数可以启动您的 EC2 实例。

  1. 创建一个 AWS Lambda 函数来启动您的 EC2 实例。
  2. 配置您的 SNS 主题以在收到消息时调用您的 Lambda 函数。你可以在这里阅读:Invoking Lambda functions using Amazon SNS notifications
  3. 最后,确保您的 CloudWatch 警报将消息发送到 SNS 主题。

【讨论】:

  • 谢谢马特,这个建议似乎不错。我将很快检查并恢复。谢谢!
  • 成功了,马特,非常感谢您的帮助!我从下面的链接中获得了帮助来准备 lambda 函数来启动/停止 EC2 实例; aws.amazon.com/premiumsupport/knowledge-center/…
  • 能否对特定的 instanceId 使用 CloudWatch cron 表达式和 ec2 rebootinstances api 调用来启动它?
【解决方案2】:

是的,这对于某些类型的 EC2 实例是可能的。查看此详细指南,您可以使用该指南根据 AWS Cloud Watch 指标在 EC2 实例中设置触发器。

http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/UsingAlarmActions.html

【讨论】:

    【解决方案3】:

    我认为您的问题可能适合我现在也试图解决的场景 - 我有一些功能无法用 Lambdas 解决,因为它们的生命周期很短,所以我需要一个生命周期相对较短的 EC2 实例来完成任务。

    该解决方案类似于 Matt 描述的解决方案,但没有 SNS,使用 AWS 触发器启动 lambda 函数来启动实例。另一个好处是 lambda 函数本身可以验证是否真的需要启动 EC2。

    How do I stop and start Amazon EC2 instances at regular intervals using AWS Lambda?

    问题

    我想将我的 Amazon Elastic Cloud Compute (Amazon EC2) 使用量减少 在预定义的时间或利用率停止和启动实例 阈值。我可以配置 AWS Lambda 和 Amazon CloudWatch 来提供帮助吗 我会自动这样做吗?

    简短说明

    您可以使用 CloudWatch 事件触发 Lambda 函数启动 并按计划的时间间隔停止您的 EC2 实例。

    来源:AWS Knowledge Center

    【讨论】:

      最近更新 更多