根据网络请求自动启动 AWS EC2 实例(LAN 唤醒)

kos*_*hei 6 networking wake-on-lan amazon-ec2 amazon-web-services autoscaling

我想按需启动一个 EC2 实例,并在它闲置一段时间(例如,>= 1 小时没有网络活动)时将其关闭,但我不知道什么是标准方法鉴于 AWS 不支持 LAN 唤醒,因此在 AWS 中执行此操作看起来像这样。

我打算运行的服务需要持久的网络连接,例如 ssh。

我想要的用户体验是这样的:

  • 如果用户尝试连接时服务已启动,则用户可以立即访问该服务。
  • 如果用户尝试连接时服务已关闭,则用户会收到“服务正在启动”回复(并且连接将关闭)。用户在几分钟后重试并成功连接(或者如果重试太早,则会再次收到“开始”消息)。在最后一个用户断开连接后,该服务最多仍保持一个小时。

我的动机主要是节省成本。需求将是高度不可预测的(因此计划实例不太适合),每天的活动时间可能少于 12 小时,并且用户愿意等待几分钟以便服务启动。我不想将预留实例定价锁定在 1 年以上的期限内。

我也对如何实现这一目标进行了一些大胆的尝试,并且希望得到关于它们的合理性/合理性的反馈:

  1. 使用自动缩放组将服务从 0 个实例“缩放”到最多 1 个实例。但我不知道如果没有实例运行,我如何能够发出“服务正在启动”回复。
  2. 当服务关闭时运行 t2.micro 实例,其唯一目的是捕获连接尝试,发出“启动”回复,触发启动实际服务实例,然后终止。当服务实例由于不活动而关闭时,需要再次启动 t2.micro 实例。

谢谢!

Jas*_*tin 4

Lambda 的工作原理有点像这样,不过它会让用户在启动应用程序时等待。在 Lambda 中,尽管您没有要管理的实例——这一切都在幕后完成。

我还会检查是否可以执行涉及 Lambda 和 Route53 故障转移检查的操作,以便用户在实例关闭时点击 Lambda,在实例启动时点击实例。但这可能不起作用,因为 Lambda 需要特定的 Host 标头。

或者再次使用 R53 故障转移来运行保留实例 t2.nano 来执行“等候室”操作,然后在启动后代理或重定向到另一个实例。