AWSコスト削減は「設計」と「監視」の両輪で実現する
AWSの請求額が予算をオーバーしてしまった経験はありませんか?本記事では、AWS認定ソリューションアーキテクトの資格を持つ現役エンジニアが、実際の現場で効果的だったコスト削減テクニック15選を徹底解説します。適切に実装すれば、月額コストを30〜70%削減できる可能性があります。
1. まずはAWSコストの可視化から始める
1-1. AWS Cost Explorer を活用する
コスト削減の第一歩は現状把握です。AWS Cost Explorerを使って、サービス別・リージョン別・タグ別のコスト内訳を確認しましょう。
- コストと使用状況レポート:時間単位のコストをCSVエクスポート
- リソース最適化レコメンデーション:使用率の低いEC2を自動検出
- 異常検出:突然のコスト急増をアラート通知
1-2. 予算アラートを設定する
# AWS CLIでバジェットアラートを作成
aws budgets create-budget --account-id 123456789012 --budget '{
"BudgetName": "MonthlyBudget",
"BudgetLimit": {"Amount": "10000", "Unit": "JPY"},
"TimeUnit": "MONTHLY",
"BudgetType": "COST"
}' --notifications-with-subscribers '[{
"Notification": {
"NotificationType": "ACTUAL",
"ComparisonOperator": "GREATER_THAN",
"Threshold": 80
},
"Subscribers": [{"SubscriptionType": "EMAIL", "Address": "admin@example.com"}]
}]'
2. EC2インスタンスのコスト最適化
2-1. リザーブドインスタンス・Savings Plansの活用
オンデマンド料金と比較したコスト削減効果:
| 購入オプション | コミットメント | 割引率 | おすすめ用途 |
|---|---|---|---|
| オンデマンド | なし | 0%(基準) | スパイク・テスト環境 |
| Savings Plans(1年) | 1年 | 最大36%OFF | 安定した本番環境 |
| Savings Plans(3年) | 3年 | 最大50%OFF | 長期利用確定の環境 |
| スポットインスタンス | なし | 最大90%OFF | バッチ処理・CI/CD |
2-2. インスタンスの右サイジング
AWS Compute Optimizer を使って、実際の使用率に基づく最適なインスタンスタイプを自動提案してもらいましょう。CPU使用率が常に20%以下なら、一段階小さいインスタンスへのダウングレードを検討します。
# 使用率の低いEC2インスタンスを確認
aws compute-optimizer get-ec2-instance-recommendations --filters "name=Finding,values=Overprovisioned" --query 'instanceRecommendations[*].{Instance:instanceArn,Current:currentInstanceType,Recommended:recommendationOptions[0].instanceType}'
3. S3ストレージのコスト最適化
3-1. S3インテリジェントティアリング
アクセス頻度が不明なデータにはS3 Intelligent-Tieringが最適です。アクセスパターンに応じて自動的に最安ストレージクラスへ移行します。
- 高頻度アクセス層:標準S3と同じ料金
- 低頻度アクセス層:40%割引(30日間アクセスなし)
- アーカイブインスタント層:68%割引(90日間アクセスなし)
- アーカイブ層:95%割引(180日間アクセスなし)
3-2. ライフサイクルポリシーの設定
{
"Rules": [{
"ID": "AutoArchiveRule",
"Status": "Enabled",
"Transitions": [
{"Days": 30, "StorageClass": "STANDARD_IA"},
{"Days": 90, "StorageClass": "GLACIER_IR"},
{"Days": 365, "StorageClass": "DEEP_ARCHIVE"}
],
"Expiration": {"Days": 2555}
}]
}
4. RDS・データベースのコスト削減
4-1. Aurora Serverless v2の活用
トラフィックが不安定なアプリにはAurora Serverless v2が効果的です。アクセスがない時間帯は自動的にスケールダウン(最小0.5 ACU)するため、従来のRDSと比べて70%以上のコスト削減が可能なケースもあります。
4-2. 開発・ステージング環境は夜間停止
import boto3
import schedule
import time
rds = boto3.client('rds')
def stop_dev_instances():
"""開発環境のRDSを夜間(22:00)に停止"""
rds.stop_db_instance(DBInstanceIdentifier='dev-mysql')
print("開発環境DBを停止しました")
def start_dev_instances():
"""朝(8:00)に起動"""
rds.start_db_instance(DBInstanceIdentifier='dev-mysql')
print("開発環境DBを起動しました")
schedule.every().day.at("22:00").do(stop_dev_instances)
schedule.every().day.at("08:00").do(start_dev_instances)
# これだけで月額コストを約58%削減(平日12時間稼働に削減)
5. Lambda・サーバーレスのコスト最適化
5-1. メモリサイズの最適化
Lambdaはメモリサイズを増やすとCPU性能も比例して上がるため、メモリを増やして実行時間を短縮した方が安くなるケースがあります。AWS Lambda Power Tuning(オープンソース)を使って最適なメモリサイズを自動計測しましょう。
6. CloudFrontでS3・EC2の転送コストを削減
AWSのデータ転送費用(アウトバウンド)は見落としがちですが、大きなコスト要因になります。CloudFrontをCDNとして導入することで、オリジンへのリクエストを大幅に削減できます。
- S3→インターネット:$0.09/GB → CloudFront経由で$0.0085〜/GB(最大90%削減)
- キャッシュヒット率70%の場合、オリジンへのリクエストを70%削減
7. コスト削減効果のまとめ
| 施策 | 削減効果 | 難易度 |
|---|---|---|
| Savings Plans導入 | 最大50% | 低 |
| スポットインスタンス活用 | 最大90% | 中 |
| S3ライフサイクルポリシー | 30〜95% | 低 |
| RDS夜間停止(開発環境) | 約58% | 低 |
| CloudFront導入 | 50〜90% | 中 |
| Lambda最適化 | 10〜40% | 中 |
| 右サイジング | 20〜50% | 低 |
まとめ:AWSコスト最適化はすぐに始められる
AWSのコスト最適化は、難しい技術知識なしでも始められる施策が多くあります。まずはCost Explorer で現状把握 → Savings Plans 購入 → S3ライフサイクルポリシー設定の順で取り組むと、短期間で大きな効果が得られます。
AWSの詳細な使い方は、AWS公式トレーニングも参考にしてみてください。また、AWS認定資格(SAA-C03)を取得することで、コスト最適化の体系的な知識が身につきます。