コスト最適化
AWS のクラウドコストを削減しながら、必要なパフォーマンスと可用性を維持する取り組み
AWS運用
コスト最適化とは
コスト最適化は、AWS のクラウドコストを削減しながら、必要なパフォーマンスと可用性を維持する取り組みである。AWS Well-Architected Framework の 5 本柱の 1 つ。詳細は「FinOps」を参照。
サーバーレスのコスト特性
Lambda: リクエスト数 × 実行時間 × メモリ
トラフィック 0 → コスト 0
トラフィック増加 → 比例して増加
EC2: 時間課金 (常時稼働)
トラフィック 0 → コストは変わらない
→ 小〜中規模はサーバーレスが安い
コスト削減の手法
| 手法 | 対象 | 削減率 |
|---|---|---|
| 未使用リソースの削除 | EBS, EIP, NAT GW | 100% |
| 適切なサイズ選択 | Lambda メモリ, EC2 | 20〜50% |
| Savings Plans | EC2, Lambda, Fargate | 30〜72% |
| S3 ライフサイクル | 古いデータ | 50〜80% |
| DynamoDB オンデマンド | 予測不能なトラフィック | 変動 |
Lambda のコスト最適化
Lambda はメモリサイズを適切に設定し (過剰に大きくしない)、タイムアウトを短く設定する。esbuild でバンドルサイズを削減し、@aws-sdk/* を外部化するとコールドスタートも改善する。
S3 ライフサイクル
S3 ライフサイクルルールで、古いデータを Glacier に移行し、一定期間後に自動削除する。90 日で Glacier 移行、365 日で削除が一般的な設定だ。
DynamoDB のコスト
| モード | 適用 |
|---|---|
| オンデマンド | トラフィックが予測不能 |
| プロビジョンド | トラフィックが安定 |
| プロビジョンド + Auto Scaling | トラフィックにパターンがある |
コスト監視
AWS Budgets で月額予算を設定し、閾値 (80% など) を超えたらメール通知を送る。Cost Explorer で未使用リソースを定期的に確認する。
コスト最適化のチェックリスト
定期的に以下を確認する。Cost Explorer で未使用リソース (アタッチされていない EBS ボリューム、未使用の Elastic IP、不要な NAT Gateway) がないか確認し、発見次第削除する。開発環境は夜間・休日にスケジュール停止する。CloudWatch Logs の保持期間 (TTL) を適切に設定し、不要なログが蓄積しないようにする。VPC 内の Lambda は NAT Gateway 経由で外部通信するため、NAT Gateway のコストが Lambda 自体より高くなることがある点に注意する。
コスト最適化の理解を深めるには関連書籍が参考になる。