我有一些 EC2 实例在 Docker 中运行 Web 应用程序,我将它们设置为在工作时间之外(例如早上 7 点到晚上 7 点)自动停止,以降低成本。我想知道我是否可以自动在请求 Web 应用程序的 URL 时启动实例(即使 EC2 已停止),以防有人想访问之前配置的工作时间之外的内容。
有些人建议我在 AWS Lambda 中运行该应用程序,但是我如何触发该函数以 DNS 调用启动?
答案1
这并非易事。您可能会找到一些使用 lambda 和 route 53 日志记录的复杂方法,但即使您这样做,启动 EC2 实例也需要 5 分钟。这意味着在启动 EC2 实例时请求已超时。
拉姆达
在 lambda/无服务器计算上重写应用程序可以消除此问题。您只需按请求付费,而且在大多数情况下您无需支付太多费用。大多数无服务器应用程序的成本很低。然而,有些应用程序的成本可能比 EC2 实例高得多。
实用选项
降低成本的最实用方法可能是使用自动扩展和小型计算单元并进行扩展,而不是使用较少的大型实例。您可以让一组小型资源全天候运行,并在繁忙时段运行更多资源。
对于容器,您可以考虑使用 Fargate 让资源较少的容器全天候运行,然后在负载增加时增加更多资源。这可以是自动扩展或计划扩展。我不知道您是否可以在同一个 ECS 集群中使用 Fargate 和 EC2,但如果可以的话,这可能会解决问题。
答案2
请求 Web 应用程序的 URL 时无法启动 ec2 实例。在实例准备好处理请求之前,http 请求将超时。
不需要身份验证,这意味着来自机器人的任何随机请求都会触发 ec2 实例的启动。
理论上,应该可以创建一个堆栈来实现这一点,例如使用 ALB 将请求路由到可以启动 ec2 实例的 Lambda 函数的特定路径。但所涉及的资源将比让实例全天候运行更昂贵。
如果您想削减成本,AWS 可能不是您的最佳提供商。