Thực Chiến AWS Lambda Web Functions: Có Thực Sự Thay Thế Được API Gateway?
Góc nhìn hạ tầng thực tế về AWS Lambda Web Functions: benchmark chạy trực tiếp Express, hiểm họa race condition khi chia sẻ biến toàn cục giữa các request và giải pháp định tuyến CloudFront OAC.
Thông tin bài viết gốc & Loại nội dung
- Tác giả: yuki_1012_1101
- Tiêu đề gốc: インフラ屋が書く Lambda Web Functions:API Gateway+Lambda を置き換えるか、動かして判断する
- Nguồn: Qiita (Công bố ngày 17/10/2026 - Qiita ID:
793368a704ff47e7a348) - Loại nội dung: Trích đoạn ngắn nguyên văn đối chiếu kết hợp với bài đọc tiếng Nhật do ban biên tập xây dựng chi tiết theo chuỗi đo kiểm hạ tầng thực nghiệm của tác giả.
Hero image là sơ đồ khái niệm SVG 1200×675 do BrSE.vn tự vẽ, phát hành theo giấy phép CC0 1.0. Alt của ảnh là tiêu đề bài viết. Phân tích đối chiếu kiến trúc tiến trình và ranh giới bảo mật CloudFront OAC.
Mục tiêu học tập
- Kiến thức công nghệ: Thấu hiểu sự khác biệt cốt lõi giữa mô hình FaaS truyền thống (1 container xử lý 1 request tại một thời điểm) và mô hình Web Functions (1 tiến trình MicroVM xử lý đồng thời tối đa 64 request); nắm vững cách phòng chống lỗi rò rỉ dữ liệu chéo (cross-request state pollution) trong Node.js/Express và phương pháp bảo mật chặn endpoint công khai bằng CloudFront Origin Access Control (OAC
always-amz-auth). - Năng lực tiếng Nhật: Nâng cao kỹ năng đọc hiểu văn bản vận hành hạ tầng đám mây (インフラ運用), giải thích sự cố bất thường ngẫu nhiên (
回によっても違う,たまたまの不具合), đàm phán giải pháp kiến trúc với khách hàng Nhật Bản.
Key Takeaways
- Sự thay đổi về mô hình xử lý tiến trình: Lambda Web Functions chuyển từ cơ chế tương tự Apache
prefork(1 tiến trình - 1 kết nối) sang mô hìnhevent MPM(1 tiến trình nhận nhiều kết nối đồng thời). Điều này giúp tiết kiệm tài nguyên nhưng mang rủi ro lớn nếu ứng dụng viết sai quy tắc luồng. - Cảnh báo nguy cơ rò rỉ thông tin người dùng do biến toàn cục: Trong môi trường Lambda truyền thống, việc đặt biến ở mức module (
let currentName) ít khi phát sinh lỗi vì mỗi container chỉ phục vụ 1 yêu cầu. Nhưng trong Web Functions, nếu có độ trễ I/O (chờ DB 0.3s), các request đến sau sẽ ghi đè lên biến này, khiến người dùng A nhìn thấy dữ liệu của người dùng B. - Chiến lược định tuyến an toàn với CloudFront: Do endpoint Web Functions mặc định mở ra Internet, nếu muốn áp dụng WAF và Custom Domain mà không bị bypass, bắt buộc phải dùng xác thực
IamAuthkết hợp với CloudFront OAC chế độalways-amz-authvà Resource Policy nghiêm ngặt.
Nội dung Bài học & Đọc hiểu Nhật – Việt
Phần 1: Chuyển dịch kiến trúc tiến trình và bài toán tính cước I/O
(第1部:プロセスモデルの変革とI/O課金メリット)
Lambdaの実行環境が「1件ずつ処理するプロセス」から「普通のWebサーバーのプロセス」になった。従来のLambdaは、同時に10件来れば実行環境が10個できる。Web Functions は、1つの実行環境が複数のリクエストを同時に抱える。DBの応答待ちのようなI/O待ちの間のCPU時間は、課金されない。
Bản dịch tiếng Việt tương ứng
Môi trường thực thi của Lambda đã chuyển đổi từ một “tiến trình chỉ xử lý từng yêu cầu một” sang một “tiến trình máy chủ Web thông thường”. Với Lambda truyền thống, nếu có 10 yêu cầu đến cùng lúc, hệ thống sẽ sinh ra 10 môi trường thực thi độc lập. Trong khi đó, với Web Functions, một môi trường thực thi đơn lẻ có thể đồng thời ôm đồm nhiều yêu cầu. Đặc biệt, thời gian CPU trong các khoảng chờ I/O (chẳng hạn như chờ cơ sở dữ liệu phản hồi) sẽ không bị tính cước.
費用面では、API Gatewayを排除できるだけでなく、リクエストが重なるほど1つのインスタンスに「相乗り」できるため、インフラコストの劇的な削減が期待できます。しかし、これにはアプリケーション設計がマルチリクエストに耐えられるという前提が必須となります。
Bản dịch đoạn đọc mở rộng
Xét về mặt chi phí, giải pháp này không những cho phép loại bỏ hoàn toàn tầng API Gateway mà các yêu cầu càng dồn dập thì lại càng cùng “đi chung chuyến xe” trên một instance, mở ra kỳ vọng cắt giảm chi phí hạ tầng một cách ngoạn mục. Tuy nhiên, điều này đòi hỏi một điều kiện tiên quyết bắt buộc: thiết kế ứng dụng phải có khả năng chịu tải đa luồng đồng thời.
- Giải thích kỹ thuật: Mô hình Web Functions chạy trực tiếp framework Express, lắng nghe trên cổng TCP (như 8080) trong MicroVM Firecracker, hỗ trợ tối đa 64 kết nối đồng thời trên mỗi container.
Phần 2: Hiểm họa rò rỉ dữ liệu chéo và chốt chặn CloudFront OAC
(第2部:共有変数による情報漏洩とCloudFront OACによる保護)
モジュールのトップレベルに let currentName を置いてリクエストごとに代入すると、DB待ちの間に後のリクエストで上書きされ、Aさんの画面にBさんの名前が返るという重大な事故になります。また、Web Functions のエンドポイントは公開URLなので、CloudFrontを迂回したアクセスを防ぐには、IamAuth と OAC の always-amz-auth による署名検証が欠かせません。
Bản dịch tiếng Việt tương ứng
Nếu bạn đặt let currentName ở cấp module ngoài cùng và gán giá trị theo từng yêu cầu, thì trong thời gian chờ cơ sở dữ liệu, biến này sẽ bị yêu cầu đến sau ghi đè lên, dẫn đến sự cố nghiêm trọng: màn hình của anh A lại hiển thị tên của anh B. Thêm vào đó, do endpoint của Web Functions là URL công khai, nên để ngăn chặn việc người dùng đi đường vòng vượt qua CloudFront, việc xác thực chữ ký bằng IamAuth kết hợp với chế độ always-amz-auth của OAC là không thể thiếu.
Ví dụ Mã Nguồn Minh Họa Lỗi & Cách Khắc Phục
import express from 'express';
const app = express();
const port = process.env.PORT || 8080;
// ❌ SAI LẦM NGUY HIỂM: Biến module toàn cục bị race condition!
// let currentName;
// ✅ CÁCH LÀM ĐÚNG: Cô lập state hoàn toàn bên trong hàm xử lý
app.get('/user', async (req, res) => {
const userName = req.query.name;
// Giả lập truy vấn I/O cơ sở dữ liệu
await new Promise(resolve => setTimeout(resolve, 300));
res.json({
requestedUser: userName,
status: 'success'
});
});
app.listen(port, () => {
console.log(`Web Function da san sang lang nghe tai cong ${port}`);
});
6. Học tiếng Nhật qua chủ đề — 技術日本語を学ぶ
6.1. Sổ tay thuật ngữ Hạ tầng Serverless và Xử lý Đồng thời
Bảng tổng hợp các thuật ngữ cốt lõi về kiến trúc máy chủ web, tối ưu hóa I/O và phòng chống race condition:
| Thuật ngữ Nhật | Furigana | Hán Việt | Nghĩa tiếng Việt / English | Câu ví dụ Nhật | Dịch nghĩa |
|---|---|---|---|---|---|
| 相乗り | あいのり | Tương Thừa | Dùng chung tài nguyên, gộp tiến trình | 複数リクエストが同じ環境に相乗りする。 | Nhiều yêu cầu cùng chia sẻ một môi trường. |
| 取り違え | とりちがえ | Thủ Vi | Lẫn lộn, hoán đổi dữ liệu ngoài ý muốn | ユーザー情報の取り違え事故を防ぐ。 | Ngăn chặn sự cố hoán đổi thông tin người dùng. |
| 排除 | はいじょ | Bài Trừ | Loại bỏ thành phần thừa (Elimination) | API Gatewayを排除して構成を簡素化する。 | Loại bỏ API Gateway để tinh giản kiến trúc. |
| 劇的 | げきてき | Kịch Đích | Đột phá, ngoạn mục, rõ rệt | インフラ費用の劇的な削減を達成した。 | Đạt được mức cắt giảm chi phí hạ tầng ngoạn mục. |
| 抱える | かかえる | Bão | Gánh vác, duy trì xử lý đồng thời | 単一プロセスで多数の接続を抱える。 | Một tiến trình duy trì xử lý nhiều kết nối. |
| 迂回 | うかい | Vu Hồi | Vòng qua, lách luật, bypass | セキュリティ機構を迂回したアクセスを遮断する。 | Chặn truy cập đi đường vòng qua bảo mật. |
| 課金 | かきん | Khóa Kim | Tính phí, tính cước dịch vụ đám mây | I/O待ちのCPU時間は課金されない。 | Thời gian CPU lúc chờ I/O không bị tính cước. |
| 混入 | こんにゅう | Hỗn Nhập | Lẫn vào, pha trộn tạp chất hoặc lỗi | 他者データの混入を防止する。 | Ngăn chặn việc bị lẫn dữ liệu của người khác. |
| 耐える | たえる | Nại | Chịu đựng, chống chịu được tải trọng | マルチリクエストに耐える設計を行う。 | Thiết kế có khả năng chống chịu tải đa luồng. |
| 徹底 | てってい | Triệt Để | Quán triệt, thực hiện nghiêm ngặt | コードレビューの徹底を図る。 | Quán triệt thực hiện khâu code review. |
| 割当 | わりあて | Cát Đương | Phân bổ tài nguyên (Allocation) | メモリ割当を最適化する。 | Tối ưu hóa phân bổ bộ nhớ. |
Tra cứu Kanji trong bài
6.2. Ngữ pháp và mẫu diễn đạt trọng tâm
Bảng tổng hợp các cấu trúc ngữ pháp dùng trong tài liệu kiến trúc hạ tầng và cảnh báo rủi ro:
| Mẫu | Ý nghĩa | Ví dụ |
|---|---|---|
| 〜に伴い | Cùng với sự thay đổi của A | Web Functionsへの移行に伴い、規約を変更する。 |
| 〜を前提として | Lấy A làm tiền đề / Dựa trên giả định | マルチリクエストを前提としてコードを書く。 |
| 〜に応じて | Tùy theo, tương ứng với… | リクエスト負荷に応じてインスタンスを調整する。 |
Chi tiết từng mẫu ngữ pháp:
-
〜に伴い (
N2): Cùng với sự biến đổi của A thì B diễn ra- Cấu trúc: Danh từ + に伴い / に伴って
- Ý nghĩa & sắc thái: Nêu lên sự biến đổi tất yếu của hệ thống hoặc quy trình khi có sự chuyển dịch hạ tầng.
- Ví dụ 1: Lambda Web Functionsへの移行に伴い、コーディング規約を改定いたしました。(Cùng với việc chuyển đổi sang Lambda Web Functions, chúng tôi đã sửa đổi quy chuẩn viết code.)
- Ví dụ 2: トラフィックの増加に伴って、同時実行数を引き上げます。(Đi đôi với việc lưu lượng truy cập tăng lên, chúng tôi sẽ nâng giới hạn thực thi đồng thời.)
-
〜を前提として (
N2): Lấy điều kiện A làm tiền đề bắt buộc- Cấu trúc: Danh từ + を前提として / を前提とした + Danh từ
- Ý nghĩa & sắc thái: Nhấn mạnh điều kiện nền tảng tiên quyết để một giải pháp hoặc thiết kế có thể hoạt động ổn định.
- Ví dụ 1: ステートレスな処理を前提として、コンテナを設計します。(Chúng tôi thiết kế container dựa trên tiền đề là các xử lý hoàn toàn không lưu trạng thái - stateless.)
- Ví dụ 2: 高負荷に耐えられることを前提としたインフラ構成です。(Đây là cấu trúc hạ tầng được xây dựng dựa trên tiền đề chịu được tải cao.)
-
〜に応じて (
N3): Tùy theo, ứng với mức độ của sự việc- Cấu trúc: Danh từ + に応じて / に応じた + Danh từ
- Ý nghĩa & sắc thái: Biểu thị sự thích ứng linh hoạt của hệ thống tương ứng với các biến số môi trường hoặc yêu cầu nghiệp vụ.
- Ví dụ 1: アクセス数に応じて、メモリサイズを動的に割り当てます。(Phân bổ kích thước bộ nhớ một cách linh hoạt tùy theo số lượng truy cập.)
- Ví dụ 2: ユーザーの権限に応じて表示コンテンツを切り替える。(Chuyển đổi nội dung hiển thị tùy theo quyền hạn của từng người dùng.)
7. Thực hành vai trò BrSE — 現場で伝える
7.1. Câu hỏi Luyện Đọc hiểu Tiếng Nhật (リーディング問題)
Câu 1 (Kiến trúc): Lambda Web Functionsにおける最大のプロセスモデル変更点はどれか?
- A. Node.js の使用が全面的に禁止されたこと。
- B. 1つの実行環境が複数のHTTPリクエストを同時に処理(相乗り)できるようになったこと。
- C. 必ずオンプレミスの物理サーバーを用意しなければならないこと。
- D. 実行時間が最大1秒に短縮されたこと。
Đáp án đúng: B
Giải thích tiếng Việt: Phần 1 làm rõ Web Functions chuyển từ mô hình 1 request/container sang cơ chế 1 tiến trình máy chủ web xử lý đồng thời nhiều kết nối.
Câu 2 (Cảnh báo sự cố): トップレベルの共有変数にリクエスト情報を代入した場合、何が発生するか?
- A. コンパイラが構文エラーを出してデプロイを即座に中断する。
- B. I/O待ちの間に後続のリクエストによって値が上書きされ、他人の情報が返る情報漏洩事故になる。
- C. サーバーの電源が自動で切断される。
- D. AWSから不正アクセス警告が届く。
Đáp án đúng: B
Giải thích tiếng Việt: Tác giả đã chứng minh qua thực nghiệm lệnh curl: biến toàn cục bị các request đến sau ghi đè trong thời gian chờ I/O, dẫn tới việc trả nhầm thông tin của người khác.
Câu 3 (Hạ tầng bảo mật): CloudFront経由のみに通信を絞り、直接アクセスを防ぐための必須設定はどれか?
- A. エンドポイント認証を ApplicationManaged のままにしておく。
- B. エンドポイント認証を IamAuth にし、CloudFront OAC を always-amz-auth で署名させる。
- C. Lambda のコードを Base64 で暗号化する。
- D. API Gateway を必ず併設する。
Đáp án đúng: B
Giải thích tiếng Việt: Phần bảo mật chỉ rõ muốn chặn triệt để việc người ngoài biết URL và gọi trực tiếp bypass CloudFront, bắt buộc phải dùng IamAuth kết hợp với OAC có hành vi ký always-amz-auth.
7.2. Bài luyện Viết & Báo cáo Dành cho BrSE
Đề bài: Hãy viết một đoạn khuyến nghị kỹ thuật (3-4 câu) gửi nhóm phát triển offshore cảnh báo về việc chuyển đổi mã nguồn cũ lên Lambda Web Functions, yêu cầu tuyệt đối loại bỏ các biến toàn cục để tránh sự cố hoán đổi dữ liệu người dùng.
Mẫu câu trả lời tham khảo (参考回答例)
開発チームの皆様、お疲れ様です。Lambda Web Functionsへの移行に伴い、重要なコーディング規約の変更を周知いたします。
新しい環境では1つのプロセスが複数リクエストを同時処理するため、モジュールのトップレベル変数にユーザー情報を保持すると、他者データの混入(情報漏洩)につながる危険があります。
すべてのリクエストデータは関数内のローカル変数または req オブジェクトで管理するよう、コードレビューの徹底をお願いいたします。
Nguồn tham khảo và phạm vi xác minh
- yuki_1012_1101, インフラ屋が書く Lambda Web Functions:API Gateway+Lambda を置き換えるか、動かして判断する: Bài viết gốc thực nghiệm công bố trên Qiita ngày 17/10/2026.
- AWS Official Documentation, AWS Lambda Function URLs & CloudFront OAC Integration: Hướng dẫn bảo mật IAM Auth và Resource Policy.