AWS 成本优化:节省 30-50% 的云基础设施费用
平均组织将 32% 的云支出浪费在闲置或过度配置的资源上。 对于每月在 AWS 上花费 5,000 美元的公司来说,每年浪费 19,200 美元。云成本优化并不是偷工减料,而是只为实际使用的内容付费。
本指南涵盖了 AWS 成本降低策略的全部内容,从本月节省资金的快速成功到随着时间的推移增加节省的架构更改。
要点
- 通过将实例类型与实际资源使用情况相匹配,仅调整大小即可节省 20-40%
- 预留实例和节省计划为可预测的工作负载提供 30-60% 的折扣
- Spot 实例可将容错工作负载的计算成本降低 60-90%
- 存储生命周期策略可防止 S3 成本无限增长
成本优化框架
优先顺序
按此顺序进行优化,以最小的努力获得最大的投资回报率:
- 消除浪费(立即,无风险)
- 合适大小的实例(1-2 周,低风险)
- 使用定价模型(预留、现货、储蓄计划)
- 优化架构(数月,需要工程)
步骤 1:消除浪费
查找未使用的资源
# Find unattached EBS volumes (you are paying for storage with no use)
aws ec2 describe-volumes \
--filters Name=status,Values=available \
--query 'Volumes[*].{ID:VolumeId,Size:Size,Type:VolumeType}' \
--output table
# Find unused Elastic IPs
aws ec2 describe-addresses \
--query 'Addresses[?AssociationId==null].{IP:PublicIp,AllocationId:AllocationId}' \
--output table
# Find idle load balancers (no targets)
aws elbv2 describe-target-groups \
--query 'TargetGroups[*].{ARN:TargetGroupArn,Name:TargetGroupName}' \
--output table
# Find stopped instances still consuming EBS
aws ec2 describe-instances \
--filters Name=instance-state-name,Values=stopped \
--query 'Reservations[*].Instances[*].{ID:InstanceId,Type:InstanceType,StopTime:StateTransitionReason}' \
--output table
常见废物来源
| 废物来源 | 典型每月费用 | 修复 |
|---|---|---|
| 独立的 EBS 卷 | 每卷 10-100 美元 | 删除或快照并删除 |
| 使用 EBS 停止实例 | 每个实例 20-200 美元 | 终止或创建 AMI |
| 未使用的弹性 IP | 每个 3.60 美元 | 发布 |
| 旧快照 | 0.05 美元/GB | 生命周期政策 |
| 超大 NAT 网关 | 每个网关 32 美元以上 | 整合、使用 VPC 端点 |
| 空闲的RDS实例 | $50-500+ | 停止或终止开发实例 |
第 2 步:调整大小
分析实际使用情况
# Get average CPU utilization over the last 14 days
aws cloudwatch get-metric-statistics \
--namespace AWS/EC2 \
--metric-name CPUUtilization \
--dimensions Name=InstanceId,Value=i-0123456789abcdef0 \
--start-time $(date -u -d '14 days ago' +%Y-%m-%dT%H:%M:%S) \
--end-time $(date -u +%Y-%m-%dT%H:%M:%S) \
--period 3600 \
--statistics Average Maximum \
--output json
正确调整决策矩阵
| 平均 CPU | 峰值CPU | 行动 |
|---|---|---|
| <10% | <30% | 缩小 2 个步骤(例如,从大到中) |
| 10-30% | <60% | 缩小 1 步(例如,从大到大) |
| 30-60% | <80% | 目前尺寸合适 |
| >60% | >80% | 考虑扩大规模或自动缩放 |
实例类型优化
| 当前实例 | 尺寸合适 | 每月储蓄 |
|---|---|---|
| m5.xlarge(140 美元) | m5.large (70 美元) | 70 美元 (50%) |
| r5.2xlarge(365 美元) | r6g.xlarge (146 美元) | 219 美元 (60%) |
| t3.large ($60) | t3.medium (30 美元) | 30 美元 (50%) |
| c5.xlarge(124 美元) | c6g.large ($62) | 62 美元 (50%) |
迁移到 Graviton (ARM) 实例(r6g、c6g、m6g)可额外节省 20% 的成本,并且对大多数工作负载具有相同或更好的性能。
步骤 3:定价模型
预留实例与储蓄计划
| 特色 | 预留实例 | 计算储蓄计划 | EC2 储蓄计划 |
|---|---|---|---|
| 折扣 | 30-60% | 30-54% | 40-60% |
| 灵活性 | 特定实例类型/区域 | 任何实例系列/区域 | 特定实例系列/区域 |
| 承诺 | 1 或 3 年 | 1 或 3 年 | 1 或 3 年 |
| 最适合 | 稳定、可预测的工作负载 | 混合工作负载 | 具体实例家族 |
建议:从计算储蓄计划开始以获得灵活性。承诺您有信心的最低基线使用量。
Spot 实例
Spot 实例提供 60-90% 的折扣,但可以在提前 2 分钟通知的情况下中断。
适合:
- CI/CD 构建运行程序
- 批处理和数据管道
- 开发和暂存环境
- 负载均衡器后面的无状态 Web 服务器(具有按需回退功能)
不适合:
- 数据库
- 单实例应用程序
- 无检查点的有状态工作负载
# Launch template with Spot Instance
Resources:
SpotFleet:
Type: AWS::EC2::SpotFleet
Properties:
SpotFleetRequestConfigData:
AllocationStrategy: lowestPrice
TargetCapacity: 5
LaunchSpecifications:
- InstanceType: t3.large
ImageId: ami-0123456789abcdef0
- InstanceType: t3.xlarge
ImageId: ami-0123456789abcdef0
- InstanceType: m5.large
ImageId: ami-0123456789abcdef0
步骤 4:存储优化
S3 生命周期策略
{
"Rules": [
{
"ID": "ArchiveOldBackups",
"Status": "Enabled",
"Filter": {
"Prefix": "backups/"
},
"Transitions": [
{
"Days": 30,
"StorageClass": "STANDARD_IA"
},
{
"Days": 90,
"StorageClass": "GLACIER"
},
{
"Days": 365,
"StorageClass": "DEEP_ARCHIVE"
}
],
"Expiration": {
"Days": 730
}
}
]
}
S3 存储类定价
| 存储类 | 每 GB 价格/月 | 检索 | 最适合 |
|---|---|---|---|
| 标准 | 0.023 美元 | 即时 | 活跃数据 |
| 标准-IA | 0.0125 美元 | 即时($0.01/GB 检索) | 每月访问 |
| 冰川即时 | 0.004 美元 | 即时($0.03/GB 检索) | 按季度访问 |
| 冰川 | 0.004 美元 | 1-12 小时 | 年度访问 |
| 深度存档 | 0.00099 美元 | 12 小时 | 合规,长期 |
EBS 优化
# Convert gp2 volumes to gp3 (20% cheaper, better performance)
for vol_id in $(aws ec2 describe-volumes --filters Name=volume-type,Values=gp2 --query 'Volumes[*].VolumeId' --output text); do
echo "Converting $vol_id from gp2 to gp3"
aws ec2 modify-volume --volume-id "$vol_id" --volume-type gp3
done
步骤 5:自动缩放
基于计划的扩展
大多数 B2B 应用程序在工作时间之外的流量会减少 70%:
# Scale down at night
aws autoscaling put-scheduled-action \
--auto-scaling-group-name production-asg \
--scheduled-action-name scale-down-night \
--recurrence "0 20 * * 1-5" \
--desired-capacity 2 \
--min-size 1
# Scale up in the morning
aws autoscaling put-scheduled-action \
--auto-scaling-group-name production-asg \
--scheduled-action-name scale-up-morning \
--recurrence "0 7 * * 1-5" \
--desired-capacity 5 \
--min-size 3
开发环境调度
在工作时间之外停止非生产环境:
# Stop dev/staging instances at 7 PM
aws ec2 stop-instances --instance-ids i-dev123 i-staging456
# Start at 8 AM
aws ec2 start-instances --instance-ids i-dev123 i-staging456
每月节省:每天运行开发实例 10 小时而不是 24 小时,可节省 58%。
每月成本审查清单
- 检查 AWS Cost Explorer 是否存在异常
- 检查未使用的资源(卷、IP、快照)
- 验证合适的规模建议(AWS 计算优化器)
- 查看预留实例/储蓄计划覆盖范围
- 检查 S3 存储增长和生命周期策略的有效性
- 查看数据传输费用(通常占总账单的 10-15%)
- 验证自动缩放阈值是否匹配当前流量模式
- 检查失败部署中的孤立资源
常见问题
降低 AWS 成本最快的方法是什么?
删除未使用的资源。大多数 AWS 账户每月都有数百美元的未附加 EBS 卷、未使用的弹性 IP、旧快照和已停止的实例。这需要不到一个小时,并且立即省钱。第二个最快的胜利是将 gp2 EBS 卷转换为 gp3——相同或更好的性能,但成本降低 20%。
我们应该使用 Savings Plans 还是预留实例?
计算大多数企业的储蓄计划。它们提供与预留实例相当的折扣,但具有更大的灵活性 --- 您不会被锁定到特定的实例类型。仅当您确定实例类型 1-3 年时才使用 EC2 预留实例。
我们如何按项目或团队跟踪 AWS 成本?
使用 AWS 资源标签。使用 project、team、environment 和 cost-center 标签标记每个资源。在计费控制台中启用成本分配标签。创建按标签分组的 Cost Explorer 报告,以按项目查看支出。使用标记未标记资源的 AWS Config 规则强制执行标记。
迁移到容器是否更具成本效益?
与每台服务器运行一个应用程序相比,容器将资源利用率提高了 30-50%。 ECS Fargate 和 EKS 简化了容器管理,但增加了按任务定价。对于大多数中小型企业来说,带有 Docker Compose 的 EC2 提供了简单性和成本的最佳平衡。请参阅我们的Docker 部署指南 了解实施细节。
接下来会发生什么
成本优化是一项持续的实践,而不是一次性的项目。安排每月成本审查并将成本监控集成到您的生产警报 设置中。有关完整的基础架构策略,请参阅我们的小型企业 DevOps 指南。
联系 ECOSIRE 获取 AWS 成本优化咨询,或探索我们的 Odoo 支持服务 以获取具有内置成本优化的托管基础设施。
由 ECOSIRE 发布——帮助企业优化云基础设施支出。
作者
ECOSIRE Research and Development Team
在 ECOSIRE 构建企业级数字产品。分享关于 Odoo 集成、电商自动化和 AI 驱动商业解决方案的洞见。