ECS Fargate の固定費(ALB + NAT Gateway)に気づいて構成を見直した話
はじめに
「サーバーレスだから使った分だけ課金」だと思っていたECS Fargateですが、
実際に動かしてみると、月に数千円〜数万円の固定費が発生していることに気づきました。
犯人は ALB(Application Load Balancer)と NAT Gateway です。
課金構造の整理
ECS Fargate の課金は大きく2種類に分かれます。
変動費(使った分だけ課金)
| 項目 | 課金単位 |
|---|---|
| Fargate コンテナ | vCPU・メモリ × 稼働時間 |
| RDS | DB インスタンス稼働時間 |
固定費(起動している間は常に課金)
| 項目 | 東京リージョン目安(2024年) | 月額目安 |
|---|---|---|
| ALB | $0.0243/時間 + LCU | 約 $18〜 / 月 |
| NAT Gateway(AZごと) | $0.062/時間 + データ転送 | 約 $45〜 / 月 |
NAT Gateway は AZの数だけ課金されます。
マルチAZ構成(2AZ)で冗長性を持たせると、NAT Gateway だけで月 $90〜 になります。
なぜ気づかなかったか
ECS Fargateを使うにあたり、「コンテナが動いていないときはほぼ無料」のイメージがありました。
しかし ALB と NAT Gateway はコンテナのインスタンス数とは無関係に、作成して放置するだけで課金されます。
タスクを0台にスケールダウンして「節約できた」と思っていても、
ALB と NAT Gateway が動いている限り固定費は発生し続けます。
構成の見直し
見直し前の構成
Internet → ALB → ECS Fargate (Private Subnet)
↓
NAT Gateway → Internet(ECR/SSM等へのアウトバウンド)
↓
RDS
見直し後の構成(最小コスト)
Internet → ALB → ECS Fargate (Private Subnet)
↓
VPC Endpoint(ECR/S3/SSM用)← NAT Gateway の代替
↓
RDS
NAT Gateway を VPC Endpoint に置き換える
| リソース | 用途 | 代替手段 |
|---|---|---|
| NAT Gateway | ECRからイメージをpull | VPC Endpoint for ECR |
| NAT Gateway | S3へのアクセス | VPC Gateway Endpoint for S3(無料) |
| NAT Gateway | SSM Parameter Store | VPC Endpoint for SSM |
VPC Endpoint の費用
VPC Endpoint(Interface型)は $0.014/時間 × AZ数 です。
3つのEndpointをシングルAZで使う場合:
- $0.014 × 3 = $0.042/時間
- 月換算:約 $30
NAT Gateway($0.062/時間 × 1AZ = $45/月)より安くなります。
ALB の代替(開発・検証環境向け)
開発環境のコスト削減であれば、ALBをなくしてECSに直接アクセスする構成も選択肢です。
| 方法 | コスト | デメリット |
|---|---|---|
| ALB あり | $18/月〜 | — |
| ALB なし(パブリックIP直接) | 無料 | HTTPS不可(自己署名証明書等が必要) |
| ALB なし(CloudFront経由) | 低コスト | 設定が複雑 |
本番環境にはALBが必要ですが、開発・検証環境でALBが必要かどうかを再検討しました。
実際の月額見積もり(見直し後)
| リソース | 構成 | 月額目安 |
|---|---|---|
| ECS Fargate | 0.25vCPU × 0.5GB、1タスク、24時間 | 約$10 |
| RDS PostgreSQL | db.t4g.micro、シングルAZ | 約$15 |
| ALB | 1台 | 約$18 |
| VPC Endpoint | Interface × 3(シングルAZ) | 約$30 |
| S3 | 静的ファイル配信 | 約$1 |
| 合計 | 約$74/月 |
見直し前(NAT Gateway × 2AZ)と比べると、月$30〜40 ほどの削減になりました。
タスクのスケールダウンによる節約
開発環境では夜間にECSのタスクを0台にスケールダウンすることで、Fargate の計算費用を削減できます。
# タスクを0台にスケールダウン(夜間・週末)
aws ecs update-service \
--cluster dvd-rental-cluster \
--service dvd-rental-service \
--desired-count 0
# 開発開始時に1台に戻す
aws ecs update-service \
--cluster dvd-rental-cluster \
--service dvd-rental-service \
--desired-count 1
ただし ALB と NAT Gateway(または VPC Endpoint)の固定費は変わらないことに注意してください。
まとめ
ECS Fargate のコストで見落としやすいポイント:
- ALB は月$18〜の固定費 — タスクが0台でも課金される
- NAT Gateway は月$45〜(AZごと) — マルチAZだと倍になる
- NAT Gateway → VPC Endpoint に変えると月$15〜30 削減できる場合がある
- 開発環境と本番環境で構成を分ける — 本番はマルチAZ、開発はシングルAZで十分
「サーバーレスだから安い」は半分正解ですが、ALBとNAT Gatewayという固定費の存在を最初に把握しておくことが重要です。
このシリーズの記事マップ
→ dvdrental 管理アプリと対になるエンドユーザー向けDVDレンタルアプリを作っている話 — Vue 3 + Spring Boot の全体構成と記事マップ
→ PostgreSQL のサンプル DB dvdrental をベースに Spring Boot + Thymeleaf で DVD レンタル管理アプリを作った話