Lập trình & Kỹ thuậtĐộ khó: Chuyên sâu / Nhật ngữ N3–N2⏱ 16 phút đọc

Thực Chiến AWS Lambda Web Functions: Có Thực Sự Thay Thế Được API Gateway?

概Điểm nhấn trọng tâm của bài viết (Overview)

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ực Chiến AWS Lambda Web Functions: Có Thực Sự Thay Thế Được API Gateway?

Thông tin bài viết gốc & Loại nội dung

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

  1. 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).
  2. 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

  1. 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ình event 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.
  2. 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.
  3. 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 IamAuth kết hợp với CloudFront OAC chế độ always-amz-auth và 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課金メリット)

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.

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による保護)

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 (参考回答例)

Nguồn tham khảo và phạm vi xác minh

Quay lại danh sách bài viết
架
Ban biên tập BrSE.vnKỹ sư Cầu nối & Chuyên gia Dự án Nhật - Việt

Đội ngũ biên tập BrSE.vn gồm các Bridge Software Engineer (BrSE) và Solution Architect với hơn 10 năm kinh nghiệm thực chiến trong các dự án hợp tác công nghệ Việt - Nhật. Chia sẻ kiến thức về kỹ thuật làm rõ yêu cầu (要件定義), tài liệu đặc tả hệ thống, lược dịch chuyên sâu từ Qiita và kỹ năng cầu nối song hành công nghệ - nghiệp vụ.