Quyết định theo hình dạng traffic, thời lượng request và mức vận hành team gánh nổi, không theo "cái nào hiện đại hơn".
Lambda — chọn khi traffic thưa hoặc bùng nổ theo đợt, mỗi request ngắn (dưới vài giây), và bạn muốn không quản server. Trả tiền theo lần gọi và GB-giây, nên lúc không ai dùng thì gần như không tốn. Đánh đổi: cold start, giới hạn thời gian tối đa 15 phút, kích thước gói//tmp hạn chế, và vấn đề connection tới RDS khi số instance đồng thời tăng.
ECS Fargate — mặc định hợp lý cho API HTTP chạy thường trực của team nhỏ. Đóng gói Docker, khai báo CPU/RAM, ECS lo đặt container; không phải vá OS, không quản AMI hay ASG. Giá mỗi vCPU-giờ cao hơn EC2 nhưng tiết kiệm thời gian vận hành, mà với team 5 người thì thời gian mới là chi phí lớn nhất. Tiến trình sống lâu nên connection pool tới DB ổn định.
EC2 — chọn khi cần kiểm soát mức máy: GPU, instance đặc thù, phần mềm phải cài trên host, hoặc khi tải ổn định và lớn tới mức chênh lệch đơn giá bù được công vận hành (thêm Reserved/Savings Plans, Spot cho worker). Đổi lại phải tự lo patch, AMI, ASG, health check.
Chốt cho tình huống này: API Node.js thường trực, team nhỏ → Fargate. Tách phần việc bất đồng bộ (resize ảnh, webhook, cron) sang Lambda vì đúng dạng burst ngắn. Chỉ chuyển xuống EC2 khi có nhu cầu cụ thể mà Fargate không đáp ứng.