Tech Blog

ECS Fargate の固定費(ALB + NAT Gateway)に気づいて構成を見直した話

AWS ECS Fargate ALB

はじめに

「サーバーレスだから使った分だけ課金」だと思っていたECS Fargateですが、
実際に動かしてみると、月に数千円〜数万円の固定費が発生していることに気づきました。

犯人は ALB(Application Load Balancer)と NAT Gateway です。


課金構造の整理

ECS Fargate の課金は大きく2種類に分かれます。

変動費(使った分だけ課金)

項目課金単位
Fargate コンテナvCPU・メモリ × 稼働時間
RDSDB インスタンス稼働時間

固定費(起動している間は常に課金)

項目東京リージョン目安(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 GatewayECRからイメージをpullVPC Endpoint for ECR
NAT GatewayS3へのアクセスVPC Gateway Endpoint for S3(無料)
NAT GatewaySSM Parameter StoreVPC 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 Fargate0.25vCPU × 0.5GB、1タスク、24時間約$10
RDS PostgreSQLdb.t4g.micro、シングルAZ約$15
ALB1台約$18
VPC EndpointInterface × 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 のコストで見落としやすいポイント:

  1. ALB は月$18〜の固定費 — タスクが0台でも課金される
  2. NAT Gateway は月$45〜(AZごと) — マルチAZだと倍になる
  3. NAT Gateway → VPC Endpoint に変えると月$15〜30 削減できる場合がある
  4. 開発環境と本番環境で構成を分ける — 本番はマルチAZ、開発はシングルAZで十分

「サーバーレスだから安い」は半分正解ですが、ALBとNAT Gatewayという固定費の存在を最初に把握しておくことが重要です。


このシリーズの記事マップ

dvdrental 管理アプリと対になるエンドユーザー向けDVDレンタルアプリを作っている話 — Vue 3 + Spring Boot の全体構成と記事マップ
PostgreSQL のサンプル DB dvdrental をベースに Spring Boot + Thymeleaf で DVD レンタル管理アプリを作った話

気軽にメッセージください

技術相談・ご感想・ご質問があればメッセージをお願いします。