利用 AWS Spot 实例与 ECS 自动扩展,将生产环境服务器成本降低三分之二

作者:API传播员 · 2025-09-12 · 阅读时间:5分钟
本文详细介绍了如何在AWS EC2 Spot实例上构建可扩展的API,通过在生产环境中使用Spot实例将服务器成本降低至原来的三分之一。文章分为两部分:工作原理概述和具体操作步骤,包括配置自动扩展功能、EC2启动模板、自动扩展组、ECS服务和容量提供商的设置。

一. 什么是 AWS Spot 实例?

AWS Spot 实例 是一种可以显著降低计算成本的弹性云服务实例。由于价格波动较大,传统上多用于 开发(DEV)环境 或计算类任务(如将中间结果保存至 Amazon S3 或数据库),而较少应用于 生产(PROD)环境

尽管市面上存在一些第三方解决方案支持在生产环境中使用 Spot 实例,但受限于业务场景,我们并未采用这些方案。本文介绍的方法 完全基于 AWS 标准功能,无需额外脚本或定时任务。

以下是部分 Spot 实例的价格波动截图,展示了成本节省潜力:

  • m5.large(爱尔兰 eu-west-1):价格稳定,成本节省约 2.9 倍
  • m5.large(美国东部 us-east-1):价格波动较大,节省在 2.3–2.8 倍之间。
  • t3.small(美国东部 us-east-1):价格稳定,节省约 3.4 倍

二. 服务架构

本文采用的服务架构如下图所示:

1. 应用程序负载均衡器(ALB)→ EC2 目标组(TG)→ 弹性容器服务(ECS)

在 ECS 中,一个实例可运行多个容器。ECS 会动态分配端口,并通过 TG 进行健康检查。如果某实例异常,TG 会自动停止转发请求。

2. EC2 自动扩展组(ASG)+ ECS 容量提供商(CP)

  • Auto Scaling Group (ASG):根据负载动态调整实例数量。
  • ECS 容量提供商(CP):解决了 ECS 对实例数量调度的限制。可根据任务需求扩展或缩减实例,并设定目标容量百分比,保证可用性。

3. EC2 启动模板

通过 EC2 Launch Template 可以简化实例配置,关键参数包括:

  • ECS_ENABLE_SPOT_INSTANCE_DRAINING=true:当 Spot 实例即将回收时,将任务迁移至其他实例。
  • ECS_CONTAINER_STOP_TIMEOUT:任务停止超时时间(默认 30 秒)。
  • ECS_CLUSTER:指定 ECS 集群名称。

三. 创建服务的步骤

1. 创建 EC2 启动模板

  • 选择 ECS 优化的 AMI
  • 根据任务需求选择实例类型。
  • 配置 VPC 和安全组。
  • 在用户数据中加入 ECS_ENABLE_SPOT_INSTANCE_DRAINING 等参数。

2. 配置 EC2 自动扩展组(ASG)

  • 选择启动模板。
  • 设置 按需实例与 Spot 实例比例(如 20% 按需 + 80% Spot)。
  • 定义最小和最大实例数量。
  • 配置扩展策略:基于 ECS 任务数量进行扩展。

3. 配置应用程序负载均衡器(ALB)和目标组(TG)

  • 配置 HTTP (80)HTTPS (443) 侦听器。
  • 设置目标组健康检查,确保实例可用性。

4. 创建 ECS 任务定义

  • 配置容器资源限制、端口映射、环境变量。
  • 将日志写入 Amazon CloudWatch

5. 创建 ECS 集群与容量提供商

  • 创建空集群,名称需与启动模板中 ECS_CLUSTER 保持一致。
  • 绑定 ASG 并设置目标容量百分比。

6. 配置 ECS 服务

  • 选择任务定义。
  • 设置 最小健康百分比最大百分比,保障部署过程的高可用性。

四. 总结

通过结合 AWS Spot 实例ECS 自动扩展,企业能够在保持服务可用性的同时,将生产环境服务器成本降低至三分之一。

整个过程完全基于 AWS 原生功能,无需额外工具或复杂脚本,适合希望降低成本并提升灵活性的后端系统。


五. 原文链接

原文链接: https://adapty.io/blog/designing-scalable-api-on-aws-spot-instance/

热门推荐
一个账号试用1000+ API
助力AI无缝链接物理世界 · 无需多次注册
3000+提示词助力AI大模型
和专业工程师共享工作效率翻倍的秘密