AWS Fargate 服务:扩展到零?

com*_*xer 15 amazon-web-services autoscaling amazon-alb aws-fargate

我最近使用 Fargate 和 Aurora Serverless 将一个小型 Web 应用程序迁移到 AWS。该应用程序没有太多流量,所以我的目标是在没有人使用它的情况下节省成本。Aurora Serverless 似乎在数据库端自动为我做这件事。

但是,我正在努力寻找有关如何将 Fargate 服务扩展到零的任何资源。

它前面有一个 ALB,我知道 ALB 请求计数可用于扩展……所以理想情况下,当在 10 分钟内平均有 0 个请求时,该服务将缩减到零个任务。然后当一个请求进来时,它会触发服务的一项任务的扩展。

MLu*_*MLu 10

我不确定它究竟会如何工作。当没有健康的 ALB 目标时,ALB 会返回 503 错误,因此您的访问者会看到错误页面而不是您的网站。这可能会触发 Fargate 容器启动,但这通常需要数十秒,有时甚至超过一分钟。当您的容器启动时,您的访客可能已经离开。

如果您想要一个真正的零闲置成本的无服务器网站,则必须使用 API 来实现它。

  • 将您的前端文件(HTML、CSS、JS)放入S3
  • 通过API加载您的动态内容
  • Lambda 函数中实现动态功能
  • 使用API 网关调用 Lambda
  • 数据库可以是Aurora ServerlessDynamoDB On-Demand

这种架构在闲置时不会产生任何成本,并为您的访问者提供即时响应。


更新:如果您仍想将 Fargate 服务缩小到 0 个任务,您当然可以通过将服务设置DesiredCount0. 这可以通过 aws-cli 来完成:

~ $ aws ecs update-service ... --service xyz --desired-count 0
Run Code Online (Sandbox Code Playgroud)

如果您想在Dev 中执行此操作,我建议您手动、从 cron 作业或从计划的 Lambda 函数运行此UpdateService。无论哪种方式,您都可以将任务设置0为晚上,然后返回到1下一个工作日。这比依赖 AutoScaling 容易,因为 AutoScaling 对于非常低的流量可能不那么可靠。

希望有帮助:)


Jim*_*mmy 7

如果重写您的应用程序以适应上述响应,则这不是一个选择或成本高昂,您可以查看 GCP CloudRun

CloudRun是GCP开发的无服务器容器。您可以将网站打包在容器中,然后 CloudRun 仅根据请求和启动期间的 CPU 使用情况向您计费。它甚至有一个非常好的免费套餐,可以让您以最低的成本运行您的应用程序。

因此,您可以以最低的成本将 Amazon Aurora 与 GCP CloudRun 结合使用,并且无需重写您的应用程序。

  • @汤姆我同意。然而(在我看来)与重构代码以遵守 Lambda/Cloud Functions 相比,遵守 Cloud Run 限制要容易得多。大多数简单的 Web 应用程序(docker 化)应该在 CR 中即插即用,而将 Joomla 或 Wordpress 重写为 Lambda 则是不可能的。 (5认同)
  • @Tom 不,Cloud Functions 相当于 GCP 的 AWS Lambda。CloudRun 是无服务器容器。如果您的 docker 容器中有一个 wordpress,您可以将其直接上传到 CloudRun(理论上),无需任何修改。 (3认同)