【问题标题】:Suspend idle AWS instance automatically自动挂起空闲的 AWS 实例
【发布时间】:2020-04-04 21:26:45
【问题描述】:

我必须为偶尔使用的 Web 应用程序设置一个 AWS 实例,一次几个小时,每月几次。该应用程序在虚拟 CPU 和内存方面需要一个相当大的实例,因此保持它 24/7 运行会产生高昂的费用,而且由于它的使用时间低于 ~5%,我正在寻找一种自动挂起的方法如果 CPU 利用率低于 10% 超过 2 小时(例如),则实例。此外,理想情况下(但不是严格要求)对应用程序 URL 的请求会在实例暂停时启动该实例。

  1. 我的第一个想法是设置 CloudWatch 以记录对 URL 的任何请求以及实例的 CPU 利用率。然后,一个 Lambda 函数会定期检查最后一个请求是否在 2 小时前,以及这段时间内 CPU 利用率是否也很低;如果为真,则暂停实例。
  2. 可以通过一个特殊的“唤醒” URL(与应用程序的 URL 分开)来启动实例,该 URL 会触发 lambda 函数以在实例处于睡眠状态时唤醒实例。

是否有推荐的或更标准的方法来实现这一点?

【问题讨论】:

    标签: amazon-web-services amazon-ec2 aws-lambda amazon-cloudwatch suspend


    【解决方案1】:

    您可以在实例上运行一个脚本来持续测量“使用情况”。 (实际的定义取决于您——它可能基于应用程序使用情况或 CPU,或者您想要定义的任何方式。)

    一旦脚本确定实例未被使用,就可以简单地发出操作系统关闭命令。如果实例为Shutdown Behavior = Stop,则实例将正常关闭并停止。

    然后您可以使用“唤醒”过程再次启动实例。

    【讨论】:

    • 这确实是一个想法,尽管使用此选项唤醒过程会更长。
    【解决方案2】:

    您可以创建从 Elastic LB 后面的 1 个实例开始的自动缩放组。当有给定参数的负载(例如 cpu 负载、内存使用、网络流量等)时,新实例会自动创建。当负载下降时,它也会自动关闭实例。不需要使用 lambda ;)

    【讨论】:

    • 我的最小数量是 0 个实例,我的最大数量是 1 个实例。自动缩放组会为此工作吗?
    • 是的,将组最小容量设置为 0 就足够了。你需要动态缩放docs.aws.amazon.com/en_us/autoscaling/ec2/userguide/…
    • @nickolay.laptev 非常有趣!增加的技巧是实例是有状态的(即数据库在同一个实例中)。我可以告诉自动缩放停止/启动同一个实例而不是创建一个新副本吗?
    • 不是这样(缩小总是导致终止,而不是停止docs.aws.amazon.com/en_us/autoscaling/ec2/userguide/…),我们唯一可以告诉它的是禁止缩小(终止)某些实例。这还不错,因为在同一个实例中拥有数据库并不好。但是您可以为新实例使用相同的 EBS 快照(作为基本卷)。因此,新实例将具有与旧实例相同的状态 - 请注意,在这种情况下,您需要使 EBS 快照保持最新。
    • 数据库不应位于自动缩放组,因为多个没有集群的mysql会导致数据丢失。数据库层应该是不同的。自动缩放实例成员必须处理 api 负载,后端必须支持基于令牌的身份验证(或与 redis 的会话)如果客户端上传 jpg、视频等,则可以使用 s3 存储桶或 lambda 函数可以将其移动到另一个,cdn等
    猜你喜欢
    • 2014-12-17
    • 2014-11-11
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-12
    • 1970-01-01
    • 2015-08-13
    相关资源
    最近更新 更多