mcpField
A
aws-cost-optimization

aws-cost-optimization

github.com/ahmedasmar云与 DevOps205204 次安装29 周前更新
代码仓库

关于 aws-cost-optimization

aws-cost-optimization 是面向 AWS 成本管理和 FinOps 流程的技能,为团队提供基于 AWS CLI 的工作流,用于发现浪费、评估节省方案、实施调整并定期复核成本。

主要功能

  1. 01查找闲置资源和成本异常
  2. 02分析规格调整及承诺购买建议
  3. 03评估 Spot 和实例代际迁移
  4. 04复核成本并编制月度报告
  5. 05组织 FinOps 治理和团队评审

适用场景

  1. 01开展每月 AWS 成本复核
  2. 02评估预留实例或 Savings Plans
  3. 03规划迁移到较新实例代际
  4. 04评估容错工作负载使用 Spot

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/ahmedasmar/devops-claude-skills --skill aws-cost-optimization

安装后在 Claude Code 中输入/aws-cost-optimization确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

assets/templates/
monthly_cost_report.md
references/
best_practices.md
finops_governance.md
service_alternatives.md

详细介绍

AWS 成本优化与 FinOps

用于 AWS 成本优化和财务运营管理的系统化工作流。

成本优化工作流

  1. 发现 — 使用 aws ec2 和 aws ce CLI 命令查找浪费,识别未使用的资源和成本异常
  2. 分析 — 使用 aws compute-optimizer、aws cloudwatch 和 aws ce,寻找调整实例规格、升级代际、Spot 和 RI 建议等优化机会
  3. 确定优先级 — 优先处理速赢事项(风险低、节省高),然后是容易实现的改进,最后是战略性改进
  4. 实施 — 删除未使用的资源、调整实例规格、购买承诺、迁移到新代际
  5. 监控 — 每月审查成本、检查标签合规性、跟踪预算偏差

核心工作流

工作流 1:每月成本优化审查

频率:每月运行一次(每月第一周)

步骤 1:查找未使用的资源

# Find unattached EBS volumes
aws ec2 describe-volumes --filters Name=status,Values=available \
  --query 'Volumes[].{ID:VolumeId,Size:Size,Created:CreateTime}' --output table

# Find unused Elastic IPs
aws ec2 describe-addresses --filters Name=domain,Values=vpc \
  --query 'Addresses[?AssociationId==null].{IP:PublicIp,AllocationId:AllocationId}' --output table

# Find idle EC2 instances (low CPU over 14 days)
aws cloudwatch get-metric-statistics --namespace AWS/EC2 \
  --metric-name CPUUtilization --period 86400 --statistics Average \
  --start-time $(date -u -v-14d +%Y-%m-%dT%H:%M:%S) --end-time $(date -u +%Y-%m-%dT%H:%M:%S) \
  --dimensions Name=InstanceId,Value=INSTANCE_ID

# Find old snapshots (>90 days)
aws ec2 describe-snapshots --owner-ids self \
  --query 'Snapshots[?StartTime<=`2025-01-01`].{ID:SnapshotId,Size:VolumeSize,Date:StartTime}' --output table

# Find unused load balancers (no healthy targets)
aws elbv2 describe-target-health --target-group-arn TARGET_GROUP_ARN

步骤 2:分析成本异常

# Get daily costs for the past 30 days
aws ce get-cost-and-usage \
  --time-period Start=$(date -u -v-30d +%Y-%m-%d),End=$(date -u +%Y-%m-%d) \
  --granularity DAILY --metrics BlendedCost \
  --group-by Type=DIMENSION,Key=SERVICE

# Get cost forecast for the next 30 days
aws ce get-cost-forecast \
  --time-period Start=$(date -u +%Y-%m-%d),End=$(date -u -v+30d +%Y-%m-%d) \
  --granularity MONTHLY --metric BLENDED_COST

# Compare month-over-month costs
aws ce get-cost-and-usage \
  --time-period Start=$(date -u -v-60d +%Y-%m-01),End=$(date -u +%Y-%m-%d) \
  --granularity MONTHLY --metrics BlendedCost

步骤 3:识别调整实例规格的机会

# Get Compute Optimizer rightsizing recommendations
aws compute-optimizer get-ec2-instance-recommendations \
  --query 'instanceRecommendations[].{Instance:instanceArn,Finding:finding,Current:currentInstanceType,Recommended:recommendationOptions[0].instanceType}'

# Check CPU utilization for a specific instance (past 30 days)
aws cloudwatch get-metric-statistics --namespace AWS/EC2 \
  --metric-name CPUUtilization --period 3600 --statistics Average Maximum \
  --start-time $(date -u -v-30d +%Y-%m-%dT%H:%M:%S) --end-time $(date -u +%Y-%m-%dT%H:%M:%S) \
  --dimensions Name=InstanceId,Value=INSTANCE_ID

# Get RDS rightsizing recommendations
aws compute-optimizer get-ecs-service-recommendations 2>/dev/null || \
  echo "Check RDS CPU/memory in CloudWatch manually"

步骤 4:生成月度报告

# Use the template to compile findings
cp assets/templates/monthly_cost_report.md reports/$(date +%Y-%m)-cost-report.md

# Fill in:
# - Findings from AWS CLI analysis
# - Action items
# - Team cost breakdowns
# - Optimization wins

步骤 5:团队审查会议

  • 向工程团队展示发现
  • 分配优化任务
  • 跟踪待办事项直至完成

工作流 2:承诺购买分析(RI/Savings Plans)

时间:每季度一次,或在使用模式趋于稳定时

步骤 1:分析当前使用情况

# Get EC2 RI purchase recommendations
aws ce get-reservation-purchase-recommendation --service "Amazon Elastic Compute Cloud - Compute" \
  --lookback-period-in-days SIXTY_DAYS --term-in-years ONE_YEAR --payment-option NO_UPFRONT

# Get RDS RI purchase recommendations
aws ce get-reservation-purchase-recommendation --service "Amazon Relational Database Service" \
  --lookback-period-in-days SIXTY_DAYS --term-in-years ONE_YEAR --payment-option NO_UPFRONT

# Get Savings Plans recommendations
aws ce get-savings-plans-purchase-recommendation \
  --savings-plans-type COMPUTE_SP --lookback-period-in-days SIXTY_DAYS \
  --term-in-years ONE_YEAR --payment-option NO_UPFRONT

步骤 2:审查建议

评估每项建议:

✅ Good candidate if:
  - Running 24/7 for 60+ days
  - Workload is stable and predictable
  - No plans to change architecture
  - Savings > 30%

❌ Poor candidate if:
  - Workload is variable or experimental
  - Architecture changes planned
  - Instance type may change
  - Dev/test environment

步骤 3:选择承诺类型

预留实例:

  • 标准 RI:折扣最高(63%),不具备灵活性
  • 可转换 RI:折扣适中(54%),可更改实例类型
  • 最适用于:特定实例类型、稳定的工作负载

Savings Plans:

  • Compute SP:可灵活用于不同实例类型和区域(节省 66%)
  • EC2 Instance SP:可灵活用于同一系列中的不同规格(节省 72%)
  • 最适用于:在约束条件内变化的工作负载

决策矩阵:

Known instance type, won't change → Standard RI
May need to change types → Convertible RI or Compute SP
Variable workloads → Compute Savings Plan
Maximum flexibility → Compute Savings Plan

步骤 4:购买并跟踪

  • 通过 AWS Console 或 CLI 购买
  • 使用购买日期和负责人为承诺添加标签
  • 每月监控使用率
  • 目标使用率 >90%

参考:详细的承诺策略请参见 references/best_practices.md


工作流 3:实例代际迁移

时间:架构审查或优化冲刺期间

步骤 1:检测旧实例

# Find old-generation instances (t2, m4, c4, r4, etc.)
aws ec2 describe-instances --filters Name=instance-state-name,Values=running \
  --query 'Reservations[].Instances[?starts_with(InstanceType, `t2.`) || starts_with(InstanceType, `m4.`) || starts_with(InstanceType, `c4.`) || starts_with(InstanceType, `r4.`)].{ID:InstanceId,Type:InstanceType,Name:Tags[?Key==`Name`]|[0].Value}' \
  --output table

# Find all running instance types to review generations
aws ec2 describe-instances --filters Name=instance-state-name,Values=running \
  --query 'Reservations[].Instances[].{ID:InstanceId,Type:InstanceType,Name:Tags[?Key==`Name`]|[0].Value}' \
  --output table
# Look for: t2→t3, m4→m6i, c4→c6i, r4→r6i, Intel→Graviton (20% savings)

步骤 2:确定迁移优先级

速赢事项(风险低):

t2 → t3: Drop-in replacement, 10% savings
m4 → m5: Better performance, 5% savings
gp2 → gp3: No downtime, 20% savings

中等工作量(需要测试):

x86 → Graviton (ARM64): 20% savings
- Requires ARM64 compatibility testing
- Most modern frameworks support ARM64
- Test in staging first

步骤 3:执行迁移

EC2 迁移(x86 到 x86):

  1. 停止实例
  2. 更改实例类型
  3. 启动实例
  4. 验证应用程序

Graviton 迁移:

  1. 创建 ARM64 AMI 或 Docker 镜像
  2. 启动新的 Graviton 实例
  3. 彻底测试
  4. 切换流量
  5. 终止旧实例

步骤 4:验证节省效果

  • 在 Cost Explorer 中监控新成本
  • 确认性能可接受
  • 记录迁移情况,供其他团队参考

参考:请参见 references/best_practices.md → 计算优化


工作流 4:评估 Spot 实例

适用场景:用于容错型工作负载或 Auto Scaling 组

步骤 1:识别候选项

# Check current Spot pricing vs On-Demand for target instance types
aws ec2 describe-spot-price-history --instance-types m5.large m5.xlarge m6i.large \
  --product-descriptions "Linux/UNIX" --start-time $(date -u +%Y-%m-%dT%H:%M:%S) \
  --query 'SpotPriceHistory[].{Type:InstanceType,AZ:AvailabilityZone,Price:SpotPrice}' --output table

# List Auto Scaling Groups (good Spot candidates)
aws autoscaling describe-auto-scaling-groups \
  --query 'AutoScalingGroups[].{Name:AutoScalingGroupName,Min:MinSize,Max:MaxSize,Desired:DesiredCapacity}' --output table

# Check which ASGs already use mixed instances (Spot)
aws autoscaling describe-auto-scaling-groups \
  --query 'AutoScalingGroups[?MixedInstancesPolicy!=null].AutoScalingGroupName'

Spot 候选项:Auto Scaling 组中的实例、开发/测试/预发布环境、批处理、CI/CD 服务器。

步骤 2:评估适用性

非常适合 Spot:

  • 无状态应用程序
  • 批处理作业
  • CI/CD 流水线
  • 数据处理
  • Auto Scaling 组

不适合 Spot:

  • 数据库(没有副本时)
  • 有状态应用程序
  • 实时服务
  • 任务关键型工作负载

步骤 3:实施策略

选项 1:Fargate Spot -- 设置 capacityProviderStrategy,其中 FARGATE_SPOT 权重为 70,FARGATE 权重为 30。

选项 2:使用 Spot 的 EC2 Auto Scaling -- 使用 MixedInstancesPolicy,并设置 OnDemandBaseCapacity: 2、OnDemandPercentageAboveBaseCapacity: 30、SpotAllocationStrategy: capacity-optimized,以及多个实例类型覆盖项(m5.large、m5a.large、m5n.large)。

选项 3:EC2 Spot Fleet -- aws ec2 request-spot-fleet --spot-fleet-request-config file://spot-fleet.json

步骤 4:实现中断处理 -- 轮询 /latest/meta-data/spot/instance-action 处的实例元数据,以获取 2 分钟终止通知。收到通知后:正常关闭、保存状态、排空连接并退出。

参考:参阅 references/best_practices.md → 计算优化 → Spot 实例


快速参考

直接使用 AWS CLI 命令 -- Claude Code 可以运行 aws ce、aws ec2、aws cloudwatch 和 aws compute-optimizer 命令来执行成本分析。

月度审查命令:

  • aws ec2 describe-volumes --filters Name=status,Values=available(未使用的卷)
  • aws ce get-cost-and-usage --granularity DAILY --metrics BlendedCost(成本趋势)
  • aws compute-optimizer get-ec2-instance-recommendations(调整实例规格)

季度优化命令:

  • aws ce get-reservation-purchase-recommendation --service EC2(RI 分析)
  • 使用实例类型筛选条件运行 aws ec2 describe-instances(旧代实例)
  • aws ec2 describe-spot-price-history(Spot 定价)

根据需要,为任何 AWS CLI 命令添加 --region REGION 和 --profile PROFILE。


特定服务优化

计算优化

关键操作:

  • 迁移到 Graviton(节省 20%)
  • 在容错型工作负载中使用 Spot(节省 70%)
  • 为稳定的工作负载购买 RI(节省 40-65%)
  • 为规格过高的实例调整规格

参考:references/best_practices.md → 计算优化

存储优化

关键操作:

  • 将 gp2 转换为 gp3(节省 20%)
  • 实施 S3 生命周期策略(节省 50-95%)
  • 删除旧快照
  • 使用 S3 Intelligent-Tiering

参考:references/best_practices.md → 存储优化

网络优化

关键操作:

  • 用 VPC 端点替换 NAT 网关(每个每月节省 $25-30)
  • 使用 CloudFront 降低数据传输成本
  • 尽可能将资源放在同一可用区

参考:references/best_practices.md → 网络优化

数据库优化

关键操作:

  • 为 RDS 实例调整规格
  • 使用 gp3 存储(比 gp2 便宜 20%)
  • 对工作负载变化较大的场景评估 Aurora Serverless
  • 购买 RDS 预留实例

参考:references/best_practices.md → 数据库优化


服务替代方案决策指南

需要帮助选择服务?

问题:“我应该使用 EC2、Lambda 还是 Fargate?” 答案:参阅 references/service_alternatives.md → 计算替代方案

问题:“我应该使用哪种 S3 存储类别?” 答案:参阅 references/service_alternatives.md → 存储替代方案

问题:“我应该使用 RDS 还是 Aurora?” 答案:参阅 references/service_alternatives.md → 数据库替代方案

问题:“NAT 网关、VPC 端点还是 NAT 实例?” 答案:参阅 references/service_alternatives.md → 网络替代方案


FinOps 治理与流程

分三个阶段逐步推行:(1)基础建设——启用 Cost Explorer,设置 Budgets,制定标签策略。(2)可见性——强制执行标签,运行 AWS CLI 成本分析命令,设置月度评审。(3)文化建设——将成本指标纳入工程 KPI、架构评审和优化冲刺。

完整指南:references/finops_governance.md

月度评审流程

第 1 周:数据收集

  • 运行 AWS CLI 成本分析命令(参见工作流 1)
  • 导出 Cost & Usage Reports
  • 汇总调查结果

第 2 周:分析

  • 识别趋势
  • 寻找机会
  • 确定行动优先级

第 3 周:团队评审

  • 向工程团队汇报
  • 讨论优化方案
  • 分配行动事项

第 4 周:高管汇报

  • 创建高管摘要
  • 预测下一季度情况
  • 汇报优化成果

模板:参见 assets/templates/monthly_cost_report.md

详细流程:参见 references/finops_governance.md → 月度评审流程


成本优化清单

快速见效项(优先处理)
  • 删除未挂载的 EBS 卷
  • 删除旧的 EBS 快照(超过 90 天)
  • 释放未使用的 Elastic IP
  • 将 gp2 卷转换为 gp3
  • 停止/终止闲置的 EC2 实例
  • 启用 S3 Intelligent-Tiering
  • 设置 AWS Budgets 和提醒
中等工作量(本季度完成)
  • 调整过度配置的实例规格
  • 迁移到更新一代的实例
  • 为稳定的工作负载购买 Reserved Instances
  • 实施 S3 生命周期策略
  • 在适用情况下,用 VPC Endpoints 替换 NAT Gateways
  • 启用自动资源调度(开发/测试环境)
  • 实施标签策略并强制执行
战略举措(持续进行)
  • 迁移到 Graviton 实例
  • 为可容错的工作负载使用 Spot
  • 建立月度成本评审流程
  • 设置按团队进行成本分摊
  • 实施分摊计费/成本回报模式
  • 建立 FinOps 文化与实践

成本问题故障排查

“我的账单突然增加了”
  1. 按服务查看每日成本明细:

    aws ce get-cost-and-usage \
      --time-period Start=$(date -u -v-30d +%Y-%m-%d),End=$(date -u +%Y-%m-%d) \
      --granularity DAILY --metrics BlendedCost \
      --group-by Type=DIMENSION,Key=SERVICE
    
  2. 在 AWS Console 中查看 Cost Explorer,了解可视化明细

  3. 查看 CloudTrail 中的资源创建事件

  4. 检查是否发生 AutoScaling 事件

  5. 确认 Reserved Instances 均未到期

“我需要降低 X% 的成本”

按优化工作流执行:

  1. 运行上方工作流 1 中的发现命令(未使用资源、成本异常、规格调整)
  2. 计算潜在节省总额
  3. 按以下方式确定优先级:节省金额 ×(1 / 工作量)
  4. 优先处理快速见效项
  5. 实施战略性变更,以实现长期优化
“如何判断 Reserved Instances 是否合适?”

运行 RI 分析:

aws ce get-reservation-purchase-recommendation \
  --service "Amazon Elastic Compute Cloud - Compute" \
  --lookback-period-in-days SIXTY_DAYS --term-in-years ONE_YEAR --payment-option NO_UPFRONT

关注以下情况:

  • 实例持续运行 60 天以上
  • 不会发生变化的工作负载
  • 节省超过 30%
“哪些资源可以安全删除?”

查找未使用的资源:

aws ec2 describe-volumes --filters Name=status,Values=available --output table
aws ec2 describe-addresses --query 'Addresses[?AssociationId==null]' --output table
aws ec2 describe-snapshots --owner-ids self \
  --query 'Snapshots[?StartTime<=`2025-01-01`]' --output table

通常可以安全删除:

  • 未挂载的 EBS 卷(核实后)
  • 超过 90 天的快照(前提是在其他位置存在备份)
  • 未使用的 Elastic IP(核实其未用于 DNS 后)
  • 停止超过 30 天的 EC2 实例(确认已废弃后)

删除前务必向资源所有者确认!


更多资源

参考资料:references/best_practices.md | references/service_alternatives.md | references/finops_governance.md

模板:assets/templates/monthly_cost_report.md

CLI 工具:直接使用 AWS CLI 命令——Claude Code 可运行 aws ce、aws ec2、aws cloudwatch 和 aws compute-optimizer 命令执行成本分析。无需其他依赖。

评论

支持 Markdown