Lambda là gì?
AWS Lambda là dịch vụ serverless compute của AWS, cho phép bạn chạy code mà không cần provision hay quản lý server. Bạn chỉ cần upload code, Lambda sẽ tự động xử lý mọi thứ cần thiết để chạy và scale ứng dụng với high availability. Bạn chỉ trả tiền cho thời gian compute thực tế sử dụng — tính theo millisecond.
Mô hình hoạt động
Lambda hoạt động theo mô hình event-driven: một sự kiện (event) xảy ra → Lambda function được invoke → code xử lý event → trả về kết quả. Toàn bộ quá trình diễn ra tự động, không cần bạn can thiệp vào infrastructure.
Use Cases phổ biến
- API Backend: Kết hợp API Gateway để xây dựng REST/GraphQL API serverless
- Data Processing: Xử lý file upload trên S3, transform data, ETL pipelines
- Real-time Stream Processing: Xử lý data từ Kinesis, DynamoDB Streams
- Scheduled Tasks (Cron): Chạy tác vụ định kỳ với EventBridge/CloudWatch Events
- Chatbot & IoT: Backend cho Alexa skills, IoT rule actions
- Image/Video Processing: Resize ảnh, transcode video khi upload lên S3
- Security Automation: Tự động respond khi phát hiện security event từ GuardDuty
- CI/CD Pipeline: Custom steps trong CodePipeline, deployment automation
So sánh Lambda vs EC2 vs Fargate
| Tiêu chí | Lambda (Serverless) | EC2 (Server) | Fargate (Container) |
|---|---|---|---|
| Quản lý server | Không cần | Tự quản lý toàn bộ | Không cần (serverless container) |
| Scaling | Tự động, tức thì (ms) | Auto Scaling Group (phút) | Auto Scaling (giây-phút) |
| Thời gian chạy tối đa | 15 phút | Không giới hạn | Không giới hạn |
| Memory | 128 MB – 10,240 MB | Tùy instance type | 0.5 GB – 120 GB |
| Pricing | Per request + duration (ms) | Per hour/second (chạy liên tục) | Per vCPU + memory (giây) |
| Cold start | Có (100ms – vài giây) | Không (luôn chạy) | Có (chậm hơn Lambda) |
| Use case phù hợp | Event-driven, API, short tasks | Long-running, stateful, GPU | Microservices, batch jobs |
Pricing Model tổng quan
Lambda tính phí dựa trên 3 yếu tố:
- Số lượng requests: $0.20 / 1 triệu requests (sau free tier 1M requests/tháng)
- Duration: Tính theo GB-second. Ví dụ: 128 MB chạy 1 giây = 0.125 GB-second
- Provisioned Concurrency: Phí riêng nếu bạn cấu hình provisioned concurrency
Kiến trúc Lambda
Hiểu kiến trúc bên trong Lambda giúp bạn tối ưu hiệu năng, giảm cold start, và thiết kế ứng dụng serverless hiệu quả hơn.
Execution Environment (Môi trường thực thi)
Mỗi Lambda function chạy trong một execution environment (hay còn gọi là micro-VM) được cách ly hoàn toàn. Execution environment bao gồm:
- Runtime: Ngôn ngữ lập trình (Python, Node.js, Java, ...)
- /tmp storage: 512 MB – 10,240 MB ephemeral storage
- Memory: 128 MB – 10,240 MB (CPU tỷ lệ thuận với memory)
- Layers: Tối đa 5 layers, tổng unzipped ≤ 250 MB
- Environment variables: Tối đa 4 KB tổng cộng
Vòng đời Execution Environment
Execution environment trải qua 3 giai đoạn chính:
1. INIT Phase (Cold Start)
- Tạo execution environment mới
- Download code và layers
- Khởi tạo runtime (JVM, Python interpreter, ...)
- Chạy code ngoài handler (global scope / static initialization)
- Thời gian: 100ms – vài giây (tùy runtime, package size, VPC)
2. INVOKE Phase (Warm)
- Gọi handler function với event và context
- Xử lý logic business
- Trả về response
- Thời gian: tùy code của bạn (tối đa 15 phút)
3. SHUTDOWN Phase
- Sau một khoảng thời gian không có request (thường 5-15 phút)
- Runtime shutdown hooks được gọi
- Execution environment bị destroy
- Mọi data trong
/tmpbị xóa
Cold Start vs Warm Start
- Xảy ra khi không có execution environment sẵn
- Phải trải qua toàn bộ INIT phase
- Latency thêm: 100ms (Python) → 10s (Java trong VPC)
- Xảy ra khi: request đầu tiên, scale up, code update
- Java/C# cold start chậm hơn Python/Node.js
- Tái sử dụng execution environment đã có
- Bỏ qua INIT phase → chỉ chạy INVOKE
- Latency: vài milliseconds
- Biến global, DB connections được giữ lại
- File trong /tmp vẫn còn từ lần chạy trước
/tmp — chúng có thể bị xóa bất cứ lúc nào.
Firecracker MicroVM
Lambda sử dụng Firecracker — một Virtual Machine Monitor (VMM) do AWS phát triển — để tạo micro-VM cho mỗi execution environment. Firecracker cung cấp:
- Isolation mạnh: Mỗi function chạy trong VM riêng biệt (không phải container)
- Boot nhanh: Khởi tạo micro-VM trong <125ms
- Memory overhead thấp: Mỗi micro-VM chỉ tốn ~5 MB overhead
- Security: Hardware-level isolation giữa các tenant
Lambda Function Configuration
Cấu hình đúng Lambda function là bước quan trọng để đảm bảo hiệu năng, chi phí, và reliability. Dưới đây là tất cả các thông số cấu hình quan trọng.
Runtime (Ngôn ngữ hỗ trợ)
| Runtime | Ngôn ngữ | Phiên bản | Cold Start | Ghi chú |
|---|---|---|---|---|
| python3.12 | Python | 3.12 | Nhanh (~200ms) | Phổ biến nhất, boto3 built-in |
| nodejs20.x | Node.js | 20 LTS | Nhanh (~200ms) | AWS SDK v3 built-in |
| java21 | Java | 21 (Corretto) | Chậm (~3-8s) | Hỗ trợ SnapStart để giảm cold start |
| dotnet8 | C# / .NET | .NET 8 | Trung bình (~1-3s) | Native AOT giảm cold start |
| provided.al2023 | Custom | Amazon Linux 2023 | Tùy thuộc | Go, Rust, C++ qua custom runtime |
| ruby3.3 | Ruby | 3.3 | Nhanh (~300ms) | Ít phổ biến hơn |
Handler
Handler là entry point của Lambda function — nơi Lambda gọi khi function được invoke.
# Handler format: {file_name}.{function_name} # Ví dụ: lambda_function.lambda_handler import json def lambda_handler(event, context): """ event: dict chứa data từ trigger (S3, API GW, SQS, ...) context: object chứa runtime info (request_id, memory, timeout, ...) """ # Xử lý business logic name = event.get('name', 'World') return { 'statusCode': 200, 'body': json.dumps({'message': f'Hello, {name}!'}) }
// Handler format: {file_name}.{export_name} // Ví dụ: index.handler export const handler = async (event, context) => { const name = event.name || 'World'; return { statusCode: 200, body: JSON.stringify({ message: `Hello, ${name}!` }) }; };
Memory & CPU
Lambda phân bổ CPU tỷ lệ thuận với memory. Đây là cách duy nhất để tăng CPU cho function:
| Memory | vCPU tương đương | Ghi chú |
|---|---|---|
| 128 MB | ~0.08 vCPU | Tối thiểu. Chỉ cho task rất nhẹ |
| 512 MB | ~0.3 vCPU | API đơn giản, CRUD operations |
| 1,024 MB | ~0.6 vCPU | Phổ biến cho hầu hết workload |
| 1,769 MB | 1 vCPU | Mốc quan trọng: full 1 vCPU |
| 3,538 MB | 2 vCPU | Multi-threaded workload |
| 5,307 MB | 3 vCPU | Data processing nặng |
| 10,240 MB | 6 vCPU | Tối đa. ML inference, video processing |
Timeout
- Mặc định: 3 giây
- Tối đa: 900 giây (15 phút)
- Nên set timeout phù hợp với workload thực tế + buffer
- API Gateway integration: timeout tối đa 29 giây (giới hạn của API GW)
Environment Variables
# Python — đọc env var import os TABLE_NAME = os.environ['DYNAMODB_TABLE'] STAGE = os.environ.get('STAGE', 'dev') API_KEY = os.environ['API_KEY'] # Nên encrypt bằng KMS # Node.js — đọc env var const tableName = process.env.DYNAMODB_TABLE; const stage = process.env.STAGE || 'dev';
Ephemeral Storage (/tmp)
- Mặc định: 512 MB, có thể tăng lên 10,240 MB
- Dùng để cache file, download tạm, xử lý data
- Tồn tại giữa các warm invocations (nhưng không đảm bảo)
- Phí thêm: $0.0000000309 / GB-second (phần vượt 512 MB)