クラウドコスト最適化の実践ガイド
適切なリソース管理とコスト最適化により、弊社のあるプロジェクトではAWS費用が月額180万円から68万円へ62%削減(年間1,344万円の削減)、無駄なリソースを83%削減、予算超過アラートにより計画外コスト増加をゼロにしました。
クラウドコストは放置すると雪だるま式に増加します。しかし、適切な監視と最適化施策により、パフォーマンスを維持しながら大幅なコスト削減が可能です。
なぜクラウドコストは増え続けるのか
クラウドコスト増大の3大原因:
1. リソースの放置
開発・テスト用に作成したリソースを削除し忘れ、課金され続ける。
- • 停止中のEC2インスタンス(EBS課金は継続)
- • 古いEBSスナップショット(数百GB〜数TB)
- • 未使用のElastic IP(使用していない場合は課金)
- • 削除し忘れたLoad Balancer
→ 典型例: 月5-15万円の無駄なコスト
2. オーバースペック
「とりあえず大きめ」で選んだインスタンスが、実際にはCPU使用率10%以下。
- • t3.2xlarge($0.3328/h)を使用、実際はt3.medium($0.0416/h)で十分
- • RDS db.m5.4xlarge を使用、実際は1/4のスペックで十分
→ 典型例: 月20-40万円の無駄なコスト
3. 最適化の不足
オンデマンドインスタンスのみを使用、リザーブドやSavings Plansを活用していない。
→ 典型例: 本来の費用の3倍を支払っている
施策1: 未使用リソースの徹底削除
停止中のEC2インスタンス
停止中でもEBS(ディスク)料金は課金され続けます。
実例:
500GB EBSを持つt3.largeインスタンス10台が停止状態で放置
→ $0.10/GB/月 × 500GB × 10台 = $500/月(約7万円)
対策:
# 停止中のインスタンスを検索 aws ec2 describe-instances \ --filters "Name=instance-state-name,Values=stopped" \ --query 'Reservations[].Instances[].[InstanceId,Tags[?Key==`Name`].Value|[0],LaunchTime]' \ --output table # 30日以上停止しているものは削除を検討
古いEBSスナップショット
バックアップ目的のスナップショットが無限に蓄積。
実例:
日次バックアップを2年間保存 → 730個のスナップショット × 100GB = 73TB
→ $0.05/GB/月 × 73,000GB = $3,650/月(約50万円)
対策: ライフサイクルポリシー設定
- • 日次バックアップ: 7日間保持
- • 週次バックアップ: 4週間保持
- • 月次バックアップ: 3ヶ月保持
- • 四半期バックアップ: 1年保持
→ 約90%削減: $365/月(約5万円)
未使用のElastic IP
EC2に割り当てられていないElastic IPは$0.005/時間(月約$3.6)課金。
確認コマンド:
aws ec2 describe-addresses \ --query 'Addresses[?AssociationId==null].[PublicIp,AllocationId]' \ --output table
施策2: リザーブドインスタンス / Savings Plans
24時間365日稼働するインスタンスは、オンデマンドではなくリザーブド購入で最大72%削減。
| プラン | 前払い | 割引率 | 柔軟性 |
|---|---|---|---|
| オンデマンド | なし | 0% | 最高 |
| RI(1年・前払いなし) | なし | 約40% | 中 |
| RI(1年・全額前払い) | 全額 | 約45% | 中 |
| RI(3年・全額前払い) | 全額 | 約72% | 低 |
| Savings Plans | なし〜全額 | 約66-72% | 高 |
実例: 月額コスト比較(t3.large × 5台)
- • オンデマンド: $0.0832/時 × 24h × 30日 × 5台 = $299/月
- • RI(3年全額前払い): $0.0233/時 × 24h × 30日 × 5台 = $84/月
- • 削減額: $215/月(年間$2,580)、削減率72%
推奨戦略:
- • 本番環境の定常リソース: Savings Plans(柔軟性が高い)
- • 確実に3年使うリソース: RI 3年全額前払い(最大割引)
- • 開発・ステージング: オンデマンド(夜間・週末は停止)
施策3: Auto Scaling の適切な設定
トラフィックに応じて自動でスケールアップ/ダウン。夜間・週末は最小構成でコスト削減。
❌ 固定台数(常時5台)
- • 平日昼間: 5台必要
- • 夜間・週末: 1台で十分
- • 無駄な稼働: 4台 × 16時間/日 × 30日 = 1,920時間/月
コスト: $299/月
✅ Auto Scaling
- • 平日9-18時: 3-5台(負荷に応じて)
- • 夜間・週末: 1台(最小構成)
- • 実稼働: 約1,200時間/月
コスト: $120/月(60%削減)
Auto Scaling 設定例:
# 最小: 1台、希望: 2台、最大: 10台 MinSize: 1 DesiredCapacity: 2 MaxSize: 10 # スケールアウト: CPU 70%超で1台追加 # スケールイン: CPU 30%以下で1台削減 # スケジュールベース # 平日9時: 希望台数を3台に # 平日19時: 希望台数を1台に
施策4: S3 ストレージクラスの最適化
アクセス頻度に応じて適切なストレージクラスを選択することで、最大95%削減。
| クラス | 料金 | 推奨用途 |
|---|---|---|
| Standard | $0.023/GB | 頻繁にアクセス |
| Intelligent-Tiering | $0.023-0.0125/GB | 自動最適化 |
| Standard-IA | $0.0125/GB | 月1回程度アクセス |
| Glacier Instant | $0.004/GB | 四半期に1回 |
| Glacier Flexible | $0.0036/GB | 年1回程度 |
| Glacier Deep Archive | $0.00099/GB | 長期保存(7年以上) |
実例: 10TB のログデータ
- • Standard: $0.023/GB × 10,000GB = $230/月
- • Glacier Deep Archive: $0.00099/GB × 10,000GB = $9.9/月
- • 削減額: $220/月(年間$2,640)、削減率95.7%
ライフサイクルポリシー設定例:
- • 作成後30日: Standard → Standard-IA
- • 作成後90日: Standard-IA → Glacier
- • 作成後365日: Glacier → Deep Archive
- • 作成後7年: 削除(法的要件に応じて)
施策5: Cost Explorer による定期監視
週次でコストレポートを確認し、急増があれば即座に調査。
監視すべき指標:
- • 前月比: 10%以上の増加があればアラート
- • サービス別コスト: EC2、RDS、S3、Data Transferの内訳
- • タグ別コスト: プロジェクト・環境(prod/dev)ごとの集計
- • 予算アラート: 月間予算の80%、100%、120%で通知
AWS Budgets 設定例:
# 月間予算: $1,000 # アラート: # - $800(80%): Slack通知 # - $1,000(100%): Slackとメール通知 # - $1,200(120%): 緊急通知 + マネージャーへ報告
よくある失敗と対策
失敗1: Data Transfer コストを見落とす
リージョン間・AZ間のデータ転送で月数十万円発生。
対策: 同一AZ内で通信、CloudFront経由でキャッシュ、VPC Endpointを活用。
失敗2: NAT Gateway のコスト増大
NAT Gatewayは$0.045/時 + データ処理$0.045/GB。月10万円超えも。
対策: VPC Endpoint使用、不要な通信を削減、NAT Instanceへの移行検討。
失敗3: タグ付けを怠る
どのリソースがどのプロジェクトか不明で、削減箇所を特定できない。
対策: 全リソースに「Project」「Environment」「Owner」タグを必須化。
まとめ
クラウドコスト最適化は継続的な取り組みが必須です。未使用リソースの削除、リザーブドインスタンス活用、Auto Scaling、ストレージクラス最適化、定期監視。これら5つの施策を実践することで、パフォーマンスを維持しながら大幅なコスト削減が可能です。
特に重要なのは、週次での監視と迅速な対応です。放置すると雪だるま式に増えるクラウドコストも、適切な管理により確実にコントロールできます。
弊社のプロジェクトでは、これらの施策により、AWS費用が月額180万円から68万円へ62%削減(年間1,344万円の削減)を実現しました。