12 điểm bởi GN⁺ 2025-11-21 | 1 bình luận | Chia sẻ qua WhatsApp
  • Một trường hợp phát sinh chi phí truyền dữ liệu S3 khoảng $900 chỉ trong một ngày, vượt $1.000 cộng dồn theo tháng do lỗi cấu hình AWS VPC networking và NAT Gateway
  • Nhiều người cho rằng truyền dữ liệu từ EC2 sang S3 là miễn phí, nhưng nếu đi qua NAT Gateway trong VPC thì sẽ phát sinh phí xử lý dữ liệu có tính phí
  • Nguyên nhân là thiếu VPC Gateway Endpoint cho S3, tức không có cấu hình kết nối trực tiếp tới S3 mà không đi qua NAT Gateway
  • Gateway Endpoint miễn phí và không phát sinh phí truyền dữ liệu, có thể cấu hình đơn giản bằng Terraform
  • Đây là ví dụ cho thấy tầm quan trọng của việc giám sát chi phí và kiểm tra cấu hình VPC Endpoint khi vận hành hạ tầng AWS

Bối cảnh vấn đề

  • Geocodio sử dụng AWS để mirror các tệp dữ liệu địa lý nội bộ dung lượng lớn lên S3
    • Dữ liệu gồm các điểm địa chỉ, dữ liệu ranh giới, thông tin điều tra dân số..., với quy mô từ vài GB đến hàng trăm GB
    • Cần đồng bộ định kỳ từ nền tảng ETL được host trên Hetzner sang hạ tầng xử lý trên AWS
  • Chi phí truyền dữ liệu của AWS cao là một phàn nàn phổ biến trong toàn ngành; Cloudflare và Corey Quinn cũng từng chỉ ra vấn đề này
  • Tác giả đã xem xét cấu trúc chi phí trước khi bắt đầu dự án và xác nhận rằng
    1. truyền EC2–S3 trong cùng region là miễn phí
    2. upload vào S3 (lưu lượng đi vào) là miễn phí
      từ đó ước tính chi phí

Chi phí phát sinh ngoài dự kiến

  • Sau khi triển khai quy trình đồng bộ S3, hệ thống AWS Cost Anomaly Detection gửi cảnh báo bất thường
    • Chỉ trong một ngày, lưu lượng qua NAT Gateway đạt 20,167.32GB, tạo ra chi phí $907.53
    • Chi phí cộng dồn theo tháng đã vượt $1.000
  • Trong bối cảnh tin rằng truyền EC2–S3 là miễn phí, tác giả đã điều tra vì sao lại bị tính phí NAT Gateway

Phân tích nguyên nhân: đi qua NAT Gateway

  • Khi VPC sử dụng NAT Gateway, traffic tới S3 theo mặc định cũng được route qua NAT Gateway
    • Ngay cả khi request hướng tới dịch vụ AWS trong cùng region, nếu đi qua NAT thì vẫn bị tính phí xử lý dữ liệu $0.045 mỗi GB
  • Vì vậy, dù truyền EC2–S3 là miễn phí, chi phí NAT Gateway vẫn bị tính
  • Cách giải quyết là tạo VPC Gateway Endpoint cho S3
    • Kết nối trực tiếp từ VPC tới S3 mà không đi qua NAT Gateway hay Internet Gateway
    • Hoàn toàn miễn phí, không có phí theo giờ hay phí truyền dữ liệu

Quá trình khắc phục

  • Hạ tầng được quản lý bằng Terraform, nên tác giả thêm resource Gateway Endpoint và liên kết với route table
    • AWS tự động cập nhật routing để gửi traffic S3 qua Endpoint thay vì NAT Gateway
  • Sau đó, việc tính phí liên quan tới NAT Gateway đã dừng lại

Bài học và khuyến nghị

  • Dù đã dùng AWS trong thời gian dài, tác giả vẫn phát sinh chi phí do bỏ sót cấu hình VPC Endpoint cho S3
  • AWS networking rất phức tạp, và cấu trúc chi phí có thể thay đổi lớn tùy theo cách cấu hình
  • Các khuyến nghị để tránh tái diễn
    • Bật AWS Cost Anomaly Detection: giúp phát hiện chi phí bất thường sớm
    • Sử dụng VPC Endpoint: gần như bắt buộc khi truy cập S3 hoặc DynamoDB trong VPC có dùng NAT Gateway
    • Kiểm chứng giả định: đừng chỉ tin vào tiền đề “truyền EC2–S3 là miễn phí”, hãy test với khối lượng nhỏ và theo dõi chi phí
    • Cloud rất phức tạp: kể cả người dùng lâu năm vẫn cần liên tục cẩn trọng
  • Bài viết cũng nhắc tới trường hợp tương tự khi Recall.ai trả $1 triệu mỗi năm cho chi phí xử lý dữ liệu WebSocket

Hành động tiếp theo

  • Geocodio đã kiểm tra đường truyền S3 của toàn bộ VPC và hoàn tất cấu hình Gateway Endpoint
  • Khuyến nghị người dùng AWS xác nhận lại cấu hình VPC Endpoint
  • Tóm lại: NAT Gateway vẫn tính phí cả với traffic tới dịch vụ AWS, và có thể tránh chi phí này bằng cách dùng VPC Endpoint

Tài liệu bổ sung

1 bình luận

 
GN⁺ 2025-11-21
Ý kiến Hacker News
  • Tôi thường thấy những ca hóa đơn bùng nổ chi phí như thế này xuất hiện gần như mỗi ngày một lần trên ba subreddit lớn về cloud
    Các nhà cung cấp cloud lúc nào cũng chỉ đưa ra cảnh báo trễ, còn người dùng thì chỉ biết cầu nguyện và xin cứu trợ
    Hơn nữa, có người còn nói rằng “về mặt kỹ thuật thì không thể cung cấp tài khoản có hard cap”, nhưng trên thực tế Azure đã có loại tài khoản như vậy

    • Tôi nghĩ đây không hẳn là ác ý, mà là sự kết hợp giữa bất tài và thiếu động lực khuyến khích
      Tôi đã dùng AWS hơn 10 năm, và thấy rõ sự đứt gãy trong thiết kế giữa các dịch vụ cùng mức độ phân mảnh theo silo trong nội bộ tổ chức rất nghiêm trọng
      Trong các tổ chức lớn, chẳng có lãnh đạo nào muốn xử lý những vấn đề có thể làm xấu KPI; thay vào đó họ tập trung kiếm điểm thăng chức bằng cách tung ra các dịch vụ hợp mốt như AI hay blockchain
    • Hôm qua AWS đã công bố gói giá cố định không tính phí vượt mức
      Bạn có thể chọn các gói $0, $15, $200 mỗi tháng để tránh hóa đơn tăng vọt do số lượng request hoặc lưu lượng truyền dữ liệu tăng ngoài dự kiến
      Liên kết blog chính thức của AWS
    • Cũng là tin đó, nhưng lần này là gói giá cố định cho CDN. Có cả tier $0 bao gồm storage S3 và băng thông
      Chuỗi thảo luận HN liên quan
      Việc đặt trần chi phí mà vẫn giữ được độ ổn định dịch vụ quả thật không dễ, nhưng trường hợp lần này đã chứng minh là về mặt kỹ thuật hoàn toàn khả thi
    • AWS chọn cách hoàn tiền cho khách sau khi họ bị tính phí nhầm
      Mục đích là để tránh rủi ro danh tiếng do gián đoạn dịch vụ hoặc sự cố hạ tầng
    • Điều buồn nhất trong những bài như thế này là chúng thường kết lại bằng câu “lẽ ra chúng ta phải hiểu hóa đơn kỹ hơn”
      Nhưng vấn đề có thể nằm ở chính cloud. Với các doanh nghiệp nhỏ cần cấu trúc chi phí có thể dự đoán được, cloud có thể không phải lựa chọn phù hợp
  • Chuyện này xảy ra quá thường xuyên đến mức tôi nghĩ S3 VPC Endpoint nên được bật mặc định khi tạo VPC
    Và nếu dùng các lựa chọn thay thế như fck-nat thay cho NAT Gateway thì có thể tiết kiệm phí lưu lượng theo GB

    • Nhưng S3 Gateway Endpoint sẽ làm hỏng các tác vụ S3 liên vùng, nên thay đổi mặc định có thể phá vỡ hệ thống của khách hàng
    • Cũng có thể chuyển sang IPv6 và dùng Egress Gateway
    • Khi tạo VPC trên console thì có thể cấu hình chỉ bằng một checkbox
    • Nếu triển khai không phải qua console mà bằng IAC (Infrastructure as Code) thì đúng là nên viết tường minh toàn bộ cấu hình
    • Về mặc định, VPC nên được thiết kế theo mô hình ưu tiên bảo mật
      Phải ở trạng thái từ chối truy cập mặc định và chỉ cho phép truy cập Internet một cách tường minh; nếu không thì kẻ tấn công có thể rò rỉ dữ liệu
  • Tôi cũng từng mắc lỗi tương tự
    Tôi tải dữ liệu thử nghiệm lên thuật toán gợi ý của AWS rồi quên mất, đến vài tháng sau thì ngân hàng báo số dư không đủ
    Thuật toán cứ tiếp tục chạy và bị tính hơn 1.000 đô mỗi tháng, cuối cùng tôi mất 5.000 đô

    • Tôi từng làm ở bộ phận billing nên đã hình thành một kiểu hoang tưởng lành mạnh về những chuyện như thế này
      Tôi kiểm tra số dư mỗi ngày và đánh dấu tất cả email tính phí là quan trọng
      Ngoài ra tôi còn có thói quen đặt hạn mức thẻ ảo cho từng dịch vụ
  • Tôi cũng từng mắc đúng lỗi đó và mất 60.000 đô
    Tôi không hiểu vì sao S3 endpoint lại không được triển khai mặc định

    • Tôi có cảm giác nếu trong cuộc họp nội bộ ai đó nói “hãy bật mặc định cái này”, thì sẽ bị gác lại vì lý do “doanh thu sẽ giảm”
    • Cũng có người đùa kiểu “đó là cả một năm lương đấy, nhưng hãy nghĩ đến độ phức tạp của việc tự self-host hạ tầng đi”
  • Tôi thường được hỏi “vì sao hóa đơn AWS lại nổ tung”, và trong đa số trường hợp đó là tổ hợp NAT + S3 + giả định sai
    Truyền EC2→S3 thì miễn phí, nhưng nếu đi qua NAT thì sẽ bị tính tiền
    Vì vậy tôi thường đưa checklist sau

    1. Với private subnet thường xuyên giao tiếp với S3 hoặc DynamoDB, hãy cân nhắc dùng Gateway Endpoint
    2. Theo dõi chi phí NAT bằng dashboard riêng
    3. Trước khi di chuyển lượng dữ liệu lớn, hãy vẽ sơ đồ luồng tính phí
      May mà Cost Anomaly Detection đã hoạt động kịp thời. Mất 1.000 đô cũng đau thật, nhưng vẫn còn đỡ hơn 20.000 đô
  • Tôi đã sốc khi biết tải dữ liệu xuống từ AWS phải trả $0.09 cho mỗi GB
    Tải dữ liệu lên thì miễn phí, nhưng muốn lấy ra lại phải trả tiền sao?

    • Đây là một phần của chiến lược khóa chặt khách hàng. Vào thì dễ nhưng ra thì đắt
      Trường hợp lần này là một ca đặc biệt, trong đó lỗi cấu hình NAT khiến lưu lượng nội bộ bị tính như lưu lượng đi ra ngoài
    • 9 cent mỗi GB gần như là mức chặt chém kiểu gói cước di động. Có lẽ đó cũng là lý do Cloudflare được ưa chuộng
    • Upload thì rẻ nhưng download thì đắt. Mỗi lần khách hàng cung cấp dữ liệu cho người dùng, AWS lại lấy một phần trong đó
    • Các dịch vụ cho người tiêu dùng thì thường gộp trong gói thuê bao tháng, còn AWS là kiểu buộc bạn phải trực tiếp nhận thức về chi phí
    • Tôi lại nhớ đến câu đùa “sản xuất tại California, có thể đi ra nhưng không thể rời đi”
  • Tôi tò mò không biết Amazon có hoàn tiền cho những lỗi kiểu này không

    • Còn tùy số tiền và hoàn cảnh. Tôi cũng từng được hoàn một khoản lớn, nhưng phải giải trình nhiều lần và nộp kế hoạch ngăn tái diễn
    • Tác giả nói rằng “sẽ cập nhật kết quả nếu AWS có thể cấp credit cho tài khoản”
    • Trên thực tế AWS khá hay hoàn tiền trong các trường hợp như vậy. Vì nhiều khả năng dữ liệu thực ra không hề đi ra ngoài
    • Tôi cũng từng được hoàn vài lần. Dù vậy thường sẽ kèm điều kiện ngăn tái diễn
    • Cuối cùng thì vẫn tùy vào quy mô khách hàng và khả năng chi trả. Khách trả 20 đô mỗi tháng thì không thể gánh 1.000 đô, còn khách trả 3.000 đô mỗi tháng thì có thể chẳng mấy bận tâm
  • VPC NAT Gateway nổi tiếng tai tiếng
    Trước đây khi còn làm ở Amazon tôi cũng gặp vấn đề tương tự, nhưng vì là tài khoản công ty nên không phải trả tiền
    Tôi thật sự thấy tội cho những người phải tự bỏ tiền ra trả

    • Cá nhân tôi không hiểu vì sao NAT gateway lại phổ biến đến vậy. Trong phần lớn trường hợp thì Internet Gateway là đủ
  • Trường hợp này không giúp trực tiếp, nhưng hôm qua AWS đã ra mắt gói giá cố định cho CDN
    Cũng có cả tier $0 bao gồm storage S3 và băng thông
    Liên kết liên quan
    Hy vọng sau này sẽ được mở rộng sang các dịch vụ khác

  • Hồi 22 tuổi, lần đầu tôi đụng vào hạ tầng và chỉ trong hai ngày đã dính hóa đơn 300 đô
    AWS rất tuyệt, nhưng với người mới thì cách tính chi phí quá thiếu minh bạch

    • Tôi không hiểu vì sao họ không cải thiện chuyện đó