Tech Blog

ค้นพบต้นทุนคงที่ของ ECS Fargate (ALB + NAT Gateway) และการทบทวนสถาปัตยกรรม

by Tech Writer
AWS ECS Fargate ALB

บทนำ

ผมคิดว่า ECS Fargate คือ “จ่ายเฉพาะที่ใช้” แต่เมื่อรันจริงๆ พบว่ามีต้นทุนคงที่รายเดือนหลายพันบาทหรือมากกว่า

ตัวการคือ ALB (Application Load Balancer) และ NAT Gateway


ทำความเข้าใจโครงสร้างต้นทุน

ต้นทุน ECS Fargate แบ่งเป็น 2 ประเภทหลัก

ต้นทุนผันแปร (จ่ายตามที่ใช้)

รายการหน่วยการเรียกเก็บ
Fargate containervCPU & memory × เวลาทำงาน
RDSเวลาทำงานของ DB instance

ต้นทุนคงที่ (เรียกเก็บตลอดเวลาที่รัน)

รายการประมาณการ region Tokyo (2024)ประมาณรายเดือน
ALB$0.0243/ชม. + LCU~$18+ / เดือน
NAT Gateway (ต่อ AZ)$0.062/ชม. + data transfer~$45+ / เดือน

NAT Gateway เรียกเก็บต่อ AZ ด้วย multi-AZ (2 AZ) เพื่อความซ้ำซ้อน NAT Gateway อย่างเดียวมีราคา $90+/เดือน


ทำไมถึงไม่สังเกตเห็น

ผมมีความเข้าใจว่า “ECS Fargate แทบจะฟรีเมื่อไม่มี container รัน” อย่างไรก็ตาม ALB และ NAT Gateway ถูกเรียกเก็บเพียงแค่มีอยู่ โดยไม่คำนึงถึงจำนวน container instance

แม้จะ scale tasks ลงเป็น 0 คิดว่ากำลังประหยัดเงิน ต้นทุนคงที่ก็ยังคงมีอยู่ตราบเท่าที่ ALB และ NAT Gateway ยังทำงานอยู่


การทบทวนสถาปัตยกรรม

ก่อนการทบทวน

Internet → ALB → ECS Fargate (Private Subnet)

                         NAT Gateway → Internet (ECR/SSM outbound)

                            RDS

หลังการทบทวน (ต้นทุนต่ำสุด)

Internet → ALB → ECS Fargate (Private Subnet)

                    VPC Endpoint (ECR/S3/SSM) ← แทน NAT Gateway

                            RDS

แทนที่ NAT Gateway ด้วย VPC Endpoints

Resourceวัตถุประสงค์ทางเลือกแทน
NAT Gatewayดึง images จาก ECRVPC Endpoint for ECR
NAT Gatewayเข้าถึง S3VPC Gateway Endpoint for S3 (ฟรี)
NAT GatewaySSM Parameter StoreVPC Endpoint for SSM

ต้นทุน VPC Endpoint

VPC Endpoint (Interface type) ราคา $0.014/ชม. × จำนวน AZ

ใช้ 3 endpoints ใน single AZ:

  • $0.014 × 3 = $0.042/ชม.
  • รายเดือน: ~$30

ถูกกว่า NAT Gateway ($0.062/ชม. × 1 AZ = $45/เดือน)


ทางเลือกแทน ALB (สำหรับ dev/test environments)

สำหรับการลดต้นทุน dev ลบ ALB และเข้าถึง ECS โดยตรงก็เป็นตัวเลือก

วิธีต้นทุนข้อเสีย
มี ALB$18+/เดือน
ไม่มี ALB (direct public IP)ฟรีไม่มี HTTPS (ต้องใช้ self-signed cert ฯลฯ)
ไม่มี ALB (ผ่าน CloudFront)ต้นทุนต่ำการตั้งค่าซับซ้อน

ALB จำเป็นสำหรับ production แต่เราทบทวนว่า ALB จำเป็นสำหรับ dev/test environments หรือไม่


ประมาณการต้นทุนรายเดือนหลังการทบทวน

Resourceการตั้งค่าประมาณรายเดือน
ECS Fargate0.25vCPU × 0.5GB, 1 task, 24 ชม.~$10
RDS PostgreSQLdb.t4g.micro, single AZ~$15
ALB1 หน่วย~$18
VPC EndpointInterface × 3 (single AZ)~$30
S3ส่งไฟล์ static~$1
รวม~$74/เดือน

เปรียบเทียบกับก่อน (NAT Gateway × 2 AZ) ประหยัดได้ประมาณ $30–40 ต่อเดือน


การประหยัดด้วยการ Scale Down Tasks

ใน dev environments การ scale ECS tasks ลงเป็น 0 ตอนกลางคืนช่วยลดต้นทุน compute ของ Fargate

# Scale down เป็น 0 tasks (กลางคืน/วันหยุดสุดสัปดาห์)
aws ecs update-service \
    --cluster dvd-rental-cluster \
    --service dvd-rental-service \
    --desired-count 0

# Scale กลับเป็น 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+/เดือน — เรียกเก็บแม้ tasks = 0
  2. NAT Gateway ราคา $45+/เดือน (ต่อ AZ) — เพิ่มเป็น 2 เท่าด้วย multi-AZ
  3. เปลี่ยน NAT Gateway → VPC Endpoint อาจประหยัดได้ $15–30/เดือน
  4. ใช้การตั้งค่าที่ต่างกันสำหรับ dev กับ production — production ต้องการ multi-AZ, single-AZ เพียงพอสำหรับ dev

“Serverless ถูก” เป็นความจริงครึ่งเดียว — การเข้าใจต้นทุนคงที่ของ ALB และ NAT Gateway ตั้งแต่แรกเป็นสิ่งสำคัญ


บทความที่เกี่ยวข้อง

การสร้างแอพ DVD Rental สำหรับผู้ใช้ควบคู่กับหน้าจัดการ — ภาพรวมโครงสร้าง Vue 3 + Spring Boot
การสร้างแอพจัดการ DVD Rental ด้วย Spring Boot + Thymeleaf บนฐานข้อมูลตัวอย่าง dvdrental

ส่งข้อความได้ตามสบาย

กรุณาส่งข้อความ หากมีคำปรึกษาด้านเทคนิค ความคิดเห็น หรือคำถาม