Làm theo hướng dẫn chính thức của AWS Amplify và bị tính phí 1.100 USD
(elliott-king.github.io)- Sau khi thử nghiệm theo hướng dẫn chính thức về tích hợp OpenSearch của AWS Amplify, chi phí Amazon OpenSearch Service đã tăng lên tới 1.124,88 USD trong một tháng dù mức sử dụng không nhiều
- Chi phí tích lũy vì OpenSearch domain do
npx ampx sandboxtạo ra vẫn còn tồn tại sau khi sandbox bị dừng/xóa, rồi mỗi lần chạy tiếp theo lại thêm một domain mới - Cấu hình chính thức mặc định tạo instance
r5.large.search, nhưng giá trị mặc định tối thiểu khoảng 134 USD/tháng này không được thể hiện rõ trong mã boilerplate hay hướng dẫn - AWS Support đã cung cấp credit một lần cho OpenSearch và storage, đồng thời yêu cầu thiết lập AWS Budgets để tránh tái diễn
- Khi dùng Amplify cùng OpenSearch, cần tự kiểm tra các tài nguyên còn sót lại sau khi xóa sandbox và loại instance mặc định để tránh bị tính phí ngoài dự kiến
Khoản phí OpenSearch ngoài dự kiến
- Sau khi làm theo hướng dẫn chính thức về tích hợp OpenSearch trong AWS Amplify, vài tuần sau hóa đơn AWS lên tới hơn 1.200 USD
- Dịch vụ được ghi nhận trong yêu cầu Support là Amazon OpenSearch Service, với tổng chi phí trong tháng là 1.124,88 USD
- Tác giả từng có kinh nghiệm dùng Amplify và OpenSearch vào năm 2020, và cho rằng với mục đích cá nhân thì thường đắt ở mức khoảng 50 USD/tháng, nhưng không đến mức 1.200 USD
- AWS Customer Support sau khi xem xét chi tiết đã xử lý một billing adjustment dạng one time courtesy cho khoản phí ngoài dự kiến
- Trong quá trình Support, credit cho OpenSearch và dịch vụ storage đã được cung cấp, đồng thời cũng bị yêu cầu thiết lập AWS Budgets
- AWS Budgets có thể dự báo chi tiêu tương lai cho một dịch vụ cụ thể hoặc toàn bộ AWS, và gửi cảnh báo nếu dự kiến vượt ngân sách
Tài nguyên được tạo bởi hướng dẫn chính thức
- Quickstart của Amplify tạo một ứng dụng đồ chơi để ghi chú TODO bằng mã do AWS cung cấp, và Amplify tạo cơ sở dữ liệu DynamoDB cùng các yêu cầu CRUD có xác thực
- Có thể chạy cục bộ, nhưng Amplify cũng tạo kèm một domain có thể truy cập được
- Ở bước thiết lập OpenSearch, người dùng viết boilerplate TypeScript để khai báo tài nguyên Amplify
- Gán bảng DynamoDB vào một biến để tham chiếu trong pipeline
- Tạo instance OpenSearch, index và indexMapping
- Viết truy vấn để truy cập dữ liệu trong OpenSearch
- Tạo OpenSearchIngestionService pipeline để sao chép từ DynamoDB sang OpenSearch
- Cấu hình liên quan được quản lý bằng TypeScript/JavaScript trong repository cùng với mã frontend
npx ampx sandboxkhởi chạy các dịch vụ AWS, phát hiện thay đổi cấu hình và tự động chỉnh sửa các dịch vụ AWS hiện có
Domain vẫn còn sau khi xóa sandbox
- Cấu hình này bao gồm nhiều tài nguyên như cơ sở dữ liệu DynamoDB, 1 dịch vụ OpenSearch, 1 OSIS pipeline, IAM role, v.v.
- Boilerplate chính thức mặc định tạo instance OpenSearch
r5.large.search- Giá trị mặc định này không được thể hiện rõ trong mã boilerplate hay trong hướng dẫn
r5.large.searchtốn tối thiểu 134 USD/tháng
- Khi kết thúc một ngày làm việc và dừng sandbox bằng
CTRL-C, một prompt hỏi có muốn xóa vĩnh viễn hay không xuất hiện, và người dùng có thể chọnY - Lúc này DynamoDB bị xóa, nhưng nhìn trong AWS console thì OpenSearch domain vẫn còn nguyên
- Ngày hôm sau, khi chạy lại
npx ampx sandbox, một instance OpenSearch mới được tạo, vànpx ampx sandbox deletecũng không xóa instance ban đầu - Nếu lặp lại quy trình này, nhiều OpenSearch domain của cùng một dự án sẽ còn lại trong nền và chi phí sẽ cộng dồn
Khả năng là lỗi và loại instance mặc định
- Hành vi này trông giống một footgun nghiêm trọng, và tại thời điểm đó vẫn chưa được giải quyết ngay cả sau ticket AWS Support
- Có các báo cáo lỗi liên quan đã cũ, nhưng không tìm thấy mục nào trong vòng 1 năm gần đây
- Ví dụ được đưa ra là issue #10523 của aws-amplify/amplify-cli
- Có khả năng OpenSearch domain được xóa đúng ở v1 nhưng không như vậy ở v2, tuy nhiên đây không phải nguyên nhân đã được xác nhận
- Luồng hiện tại được chạy qua
npx, chứ không phải Amplify CLI - Việc
r5.large.searchlà loại máy mặc định cũng vẫn là một yếu tố rủi ro- Tác giả cho rằng nên để đây là trường bắt buộc, không có giá trị mặc định
- Nếu hướng dẫn hiển thị
r5.large.searchlà giá trị mặc định, người dùng sẽ dễ nhận biết hơn - Giá trị mặc định này không dành riêng cho Amplify mà là một phần của AWS CDK, nên tác giả không xem đây chỉ là trách nhiệm của đội Amplify
Lưu ý khi dùng Amplify và OpenSearch
- Tác giả đã dự đoán rằng công cụ giúp tăng tốc phát triển công nghệ mới có thể đắt hơn bare metal, nhưng cho rằng khoản phí lần này đã vượt quá mức đó
- Sử dụng budget console của AWS có thể giúp nhận cảnh báo khi chi tiêu dự kiến vượt ngân sách
- Chỉ riêng việc làm theo phần OpenSearch cũng tạo ra IAM account, OpenSearch domain, OSIS pipeline, log group và S3 storage, khiến có nhiều tài nguyên ẩn
- OpenSearch là dịch vụ thường được khách hàng doanh nghiệp dùng, nên có thể bị xem là dịch vụ “nâng cao”, và người dùng được kỳ vọng hiểu hệ sinh thái AWS tốt hơn
- Tác giả dùng OpenSearch vì hỗ trợ truy vấn bounding-box
geo_point, nhưng không chắc liệu một sản phẩm đơn giản hơn có làm được hay không - Theo cập nhật, hướng dẫn của AWS sau đó đã được sửa đổi; dù 3 tháng trước khi vấn đề được nêu lần đầu thì tài liệu chưa được cập nhật, có vẻ công việc PR tài liệu đã bắt đầu trước khi bài viết được công bố
1 bình luận
Các ý kiến trên Hacker News
Cảnh báo thanh toán chẳng khác gì trò đùa; thực tế phải cung cấp giới hạn chi tiêu cứng
Cũng cần cung cấp cách thiết lập giới hạn đó trong quá trình onboarding
Việc xây dựng hoạt động kinh doanh trên những tấm séc trắng và các khoản phí ngoài ý muốn là đáng ngờ, và cũng tạo rào cản lớn cho việc áp dụng
Càng thấy nhiều trường hợp kiểu “làm theo tutorial 20 phút rồi bị tính phí bằng cả số tiền tích cóp cả đời; lần này hỗ trợ khách hàng miễn cho, nhưng lần sau có vẻ họ sẽ lấy luôn cả nhà”, các lập trình viên càng không muốn khám phá sản phẩm AWS
Những nơi đẩy rủi ro sang khách hàng như AWS hay DigitalOcean, và những nơi bán các gói giá “không giới hạn”·“không đo đếm” đáng ngờ
Cả hai đều không phải hình thức mong muốn
Ước gì có nhà cung cấp cho phép lập kế hoạch dung lượng đúng đắn với các giới hạn rõ ràng, được ghi trong tài liệu, trong đó khách hàng chịu rủi ro về tính sẵn sàng nhưng nhà cung cấp chịu rủi ro tài chính
Nếu không quá mức, tôi cũng sẵn sàng trả mức phí cố định cao hơn
Hầu như không có khoản phí ngoài ý muốn nào, nếu rẻ, lại tệ hơn việc gây downtime hoặc mất dữ liệu ở một ứng dụng quan trọng
Chỉ cần tồn tại dưới dạng tùy chọn thì đội kế toán cũng có thể gây áp lực buộc dùng, và khi có vấn đề, nó có nguy cơ dẫn đến sự cố mất dữ liệu
Điều này có thể hợp lý với các nhà cung cấp cloud tập trung vào lập trình viên độc lập hoặc doanh nghiệp vừa và nhỏ
Đây thuộc nhóm thông tin nội bộ khá thú vị mà tôi biết được ở đây
Dùng VPS rẻ và tính phí cố định thì an toàn hơn là phải hối tiếc
Yêu cầu Amazon làm gì đó không có nhiều ý nghĩa
Cần dùng luật để buộc Amazon và các công ty khác tôn trọng tiền của người dùng
Về cơ bản, doanh nghiệp không làm những việc tốt cho đạo đức hay nền kinh tế, mà làm những việc kiếm ra tiền
So ra thì chuyện này nhỏ hơn, nhưng khi cố triển khai app lên ECS, tôi nhận hóa đơn 100 đô la và quyết định không bao giờ dùng AWS nữa
Lỗi khiến dịch vụ không chạy là vấn đề phía app của tôi, nhưng log CloudWatch chỉ hiện khoảng 20%, nên để lấy được log tôi phải redeploy năm lần, sửa xong rồi lại redeploy thêm năm lần nữa
Mỗi lần triển khai thất bại đều bị tính phí, và sau khoảng hai ngày vật lộn, tôi xóa tài khoản rồi triển khai lên DigitalOcean App Platform
Ở đó deployment cũng thất bại vì lỗi app, nhưng lần nào log cũng hiện ra, tôi sửa và chạy được trong vòng 10 phút, tổng phí chỉ vài cent
Từ ngày đó tôi tự hứa nếu có lựa chọn thì tuyệt đối không dùng AWS và cũng không khuyến nghị AWS
Với mục đích phát triển·kiểm thử, mô hình tính phí theo mức tiêu thụ rất rẻ
Không biết với workload lớn thì thế nào, nhưng tính phí theo mỗi lần deployment thì thật kỳ lạ
Với dự án lớn thì hỗ trợ có thể tốt hơn, nhưng với quy mô nhỏ đến trung bình thì GCP tốt hơn nhiều
Nó có các thành phần nền tảng phù hợp với cách dùng container hiện nay, và còn có BigQuery
Có vẻ có lỗi rõ ràng trong script mà lệnh
npxđó chạyTác giả nói đúng; nếu là tutorial thì 100% phải chọn tài nguyên rẻ nhất, và khi chạy script con
deletethì phải dọn dẹp tài nguyênKỳ vọng rằng sau khi chạy những thứ như thế, lập trình viên phải rà soát toàn bộ tài khoản AWS một cách hoang tưởng để tìm tài nguyên lang thang là không công bằng
Nếu một startup vận hành kiểu này, liệu người ta có bỏ qua bằng câu “chuyện này vốn hay xảy ra, nên phải cẩn thận” không?
Tôi không hiểu vì sao lại áp dụng tiêu chuẩn khác cho AWS
Không có cách nào dễ dàng để xem tất cả tài nguyên mà hiện tại tôi đang phải trả tiền
Nếu có thì tôi cũng chưa tìm ra
Khi không có một cái nhìn tổng quan dễ hiểu, tôi cảm thấy mình không kiểm soát hoàn toàn tài khoản của mình
Tôi cũng xem nếu dùng vượt mức đó thì chuyện gì xảy ra, và có thể giới hạn các khoản phí ngoài dự kiến hay không
Nếu không được thì tôi tìm thứ khác
Sau thay đổi về tính phí Google Maps vài năm trước, chúng tôi cũng rất thận trọng với việc để mình bị trói sâu vào các dịch vụ Google “miễn phí”, và cuối cùng việc đó đã tốn rất nhiều tiền
Tôi luôn phải kiểm tra theo từng dịch vụ, từng region; việc đó vừa nhàm chán vừa dễ sai
Ngay cả nếu họ coi đó là bug, nó cũng sẽ có độ ưu tiên thấp hơn nhiều so với những việc khác trực tiếp ảnh hưởng đến lãi lỗ của họ
Tuy nhiên, trên thực tế thì điều đó hợp lý
Khi xây dựng thứ gì đó trên AWS, tôi đối xử với AWS như một tổ chức tài chính thù địch đã mất kiểm soát
Vì những trường hợp như thế này mà tôi đã trì hoãn việc tìm hiểu sâu về AWS suốt mấy năm nay
Cần có một chương trình đào tạo tiêu chuẩn cho phép mọi người thử nghiệm miễn phí mà không yêu cầu thông tin thẻ tín dụng
Thay vào đó, có vẻ có những nhân viên văn phòng tính toán rằng họ có thể moi vài nghìn đô la từ khắp nơi nhờ “lỗi của người dùng”
Những khoản tính phí như vậy cũng khó tranh chấp, thậm chí có trường hợp hoàn toàn không thể
Chắc không chỉ mình tôi tránh môi trường AWS vì nỗi sợ hợp lý rằng một hóa đơn khổng lồ có thể xuất hiện
Nhiều khả năng họ cho rằng xử lý hoàn tiền ít gánh nặng hơn việc cung cấp các hướng dẫn chính xác và rẻ
Điều đó không biện minh cho hành vi này, nhưng tôi từng được hủy cả khoản phí 600 đô la phát sinh hợp lệ khi dùng AWS Textract
Khi đó tôi đang làm việc tại một công ty trị giá hàng tỷ đô la
Bảng giá dễ truy cập và không phải lúc nào cũng dễ hiểu, nhưng phần lớn chi phí tăng gần như tuyến tính nên tương đối dễ thử nghiệm
Tốt nhất nên tránh các dịch vụ wrapper như AWS Amplify, CloudFormation và các loại Stack
Cứ dùng trực tiếp các dịch vụ cốt lõi là được
Mọi dịch vụ đều có API, và việc lấy API key gắn với IAM user cũng đơn giản như bấm nút
Phần còn lại có thể quản lý bằng caching phù hợp và căn chỉnh mô hình chi phí với mô hình doanh thu
Hãy làm sao để chi phí của dịch vụ tự động mở rộng trở thành một tỷ lệ gần như cố định của doanh thu, bất kể nhu cầu hiện tại
Băng thông là cơn ác mộng thực sự trên AWS, nhưng console có cung cấp tự động các mức giảm giá dài hạn, và qua đại diện kinh doanh thì còn có thể nhận chiết khấu hợp đồng tốt hơn một chút
Vì vậy tôi cho rằng nên tránh EC2; băng thông nội bộ của EC2 cũng đắt hơn, nên dùng trực tiếp Lambda + S3 + CloudFront thì tốt hơn
Sau khoảng 3 tháng, khi triển khai tính năng mới hướng tới người dùng, tôi đã có thể dự đoán khá dễ tổ hợp dịch vụ nào hiệu quả chi phí nhất
Có thể chúng phục vụ mục đích đó, nhưng tôi chưa dùng trực tiếp nên không chắc
Theo kinh nghiệm của tôi, AWS thiên về tránh các vấn đề có thể gây chi phí lớn hơn do tổn hại danh tiếng
AWS không rẻ, và trong một số trường hợp đặc biệt đắt kinh khủng, như phí truyền dữ liệu, nhưng tôi không nghĩ cách của họ là lừa khách hàng vô tình chi thêm vài trăm đô la
Đúng chất AWS
Vài tháng trước tôi làm theo hướng dẫn quick start SageMaker chính thức để chạy Llama 2; đúng là nó khởi động rất nhanh, nhưng hôm sau nhìn lại thì thấy đang tốn 400 đô la mỗi ngày
Tôi đã được hủy khoản tính phí, nhưng chắc chắn học được rằng không nên tin các hướng dẫn chính thức
Vào giai đoạn đầu của sản phẩm, khoảng 2017–2018, việc cấu hình khá trực quan
Notebook instance, inference, REST API để serving, một chút EFS, và việc S3 là trung tâm của dịch vụ đều rất rõ ràng
Giá cũng ở dạng khép kín nên không có gì gây sốc
Tổng thể có cảm giác như DigitalOcean, và ngay cả data scientist có kiến thức nền tảng về hạ tầng cùng chút tò mò cũng có thể tạo cấu hình rẻ, dễ dự đoán và đơn giản
Giờ thì có Wrangler, Feature Store, RStudio; trải nghiệm người dùng của notebook console thì khủng khiếp, còn bên trong nhiều dịch vụ di chuyển dữ liệu qua lại và tính phí việc đó
Vì hoàn cảnh, tôi phải gửi yêu cầu HTTP thô thay vì dùng SDK cồng kềnh của AWS; với header
content-type: application/jsonthì thất bại, còncontent-type: application/x-amz-json-1.0thì thành côngTôi thật sự mong họ thôi những thứ vô nghĩa kiểu này
Quá cồng kềnh, quá phức tạp hoặc có quá nhiều cách tự triển khai kỳ quặc mà không đem lại lợi ích rõ ràng
Vì trong nội bộ, phần lớn app dùng Coral framework cũ và dùng định dạng JSON này, với dạng input, output và error được định nghĩa rõ
Mọi hướng dẫn chính thức của AWS đều được thiết kế để khiến bạn dùng càng nhiều dịch vụ AWS càng tốt, và rủi ro chi tiêu cũng tăng tương ứng
Cần nhìn những gì AWS khuyến nghị—tức default của GUI, công cụ CLI, hướng dẫn, kiến trúc đề xuất—một cách cực kỳ phê phán
Có lý do mà trong công ty tồn tại một vị trí lương cao để hướng dẫn đồng nghiệp dùng AWS sao cho hiệu quả chi phí và ít rủi ro
Với các triển khai nhỏ hoặc thử nghiệm, phần đắt nhất hầu như luôn là các thứ phụ trợ, hoặc các dịch vụ mới nhất được khuyến nghị thay vì những lựa chọn đơn giản hơn
Nếu bạn đang dùng OpenSearch vì truy vấn bounding box
geo_point, vậy PostgreSQL + PostGIS thì sao?https://postgis.net/docs/using_postgis_query.html
Tôi nghĩ kiểu thiết lập không ma sát này, trải nghiệm người dùng/giao diện kém trực quan, tâm lý ít cảnh giác khi đăng ký thẻ tín dụng, và tính phí gộp giữa các dịch vụ như AWS Batch + Lambda + EC2 là một phần của mô hình kinh doanh
Không biết diễn đạt thế nào, nhưng nó giống một công viên giải trí hiện đại: bạn trả vé vào cổng rồi phải trả riêng cho mọi trò chơi, thậm chí cả nhà vệ sinh
Mô hình tính phí cloud chuyển trách nhiệm sang người dùng dưới danh nghĩa “linh hoạt” và “tùy chỉnh”
Hãy tưởng tượng một công ty cho thuê xe tính phí từng bộ phận theo mili-giây—vòng quay trục cam động cơ, vòng quay lốp, hoạt động gạt mưa, thời gian sưởi ghế—rồi nói rằng khách hàng “kiểm soát” mức sử dụng và ngân sách vì có thể đặt cảnh báo cho từng hạng mục
Ngay từ mặc định, đó đã là một mô hình chi phí thù địch và nguy hiểm với người dùng