![AWS Fargate 服务:规模降至零?](https://linux22.com/image/732932/AWS%20Fargate%20%E6%9C%8D%E5%8A%A1%EF%BC%9A%E8%A7%84%E6%A8%A1%E9%99%8D%E8%87%B3%E9%9B%B6%EF%BC%9F.png)
我最近使用 Fargate 和 Aurora Serverless 将一个小型 Web 应用程序迁移到 AWS。该应用程序的流量不大,所以我的目标是在没有人使用它时节省成本。Aurora Serverless 似乎会自动在数据库端为我完成此操作。
但是,我很难找到有关如何将 Fargate 服务扩展到零的任何资源。
它前面有一个 ALB,我知道 ALB 请求数可用于扩展……因此,理想情况下,当 10 分钟内平均有 0 个请求时,服务将缩减为零任务。然后,当有请求进入时,它将触发服务任务的扩展。
答案1
我不确定它究竟是如何工作的。当没有健康的 ALB 目标时,ALB 会返回 503 错误,因此您的访问者将看到错误页面而不是您的网站。那可能触发 Fargate 容器启动,但这通常需要几十秒,有时甚至超过一分钟。当你的容器启动时,你的访问者可能已经消失了。
如果您想要一个真正的无服务器且零空闲成本的网站,您必须使用 API 来实现它。
- 把你的前端文件(HTML、CSS、JS)S3
- 通过加载动态内容API
- 实现动态功能Lambda 函数
- 使用API 网关调用 Lambdas
- 数据库可以Aurora 无服务器或者DynamoDB 按需
这种架构在空闲时不产生任何成本,并能为您的访问者提供即时响应。
更新:如果你仍想将 Fargate 服务缩减为 0 个任务,你当然可以通过将服务设置DesiredCount
为来实现0
。例如,可以通过 aws-cli 完成:
~ $ aws ecs update-service ... --service xyz --desired-count 0
如果你想这样做开发我建议你运行这个更新服务手动、cron-job 或预定的 Lambda 函数均可。无论哪种方式,您都可以将任务设置为0
晚上,然后返回到1
下一个工作日。这比依赖 AutoScaling 更容易,因为 AutoScaling 在流量非常低时可能不太可靠。
希望有帮助:)
答案2
如果重写你的应用程序以适应上述响应不是一个选择或成本太高,你可以研究一下 GCP CloudRun
CloudRun 是 GCP 开发的无服务器容器。您可以将您的网站打包到容器中,然后 CloudRun 只会在请求和启动期间按 CPU 使用率向您收费。它甚至有一个非常好的免费套餐,可以让您以最低成本运行您的应用。
因此,您可以将 Amazon Aurora 与 GCP CloudRun 结合起来,以最低成本,且无需重写您的应用程序。