
Serverless Framework: Triển khai ứng dụng không máy chủ trên AWS Lambda và Google Cloud Functions
Serverless computing (tính toán không máy chủ) đang trở thành xu hướng chính trong phát triển ứng dụng đám mây. Với mô hình trả tiền theo phép tính (pay-per-execution), các nhà phát triển không cần quản lý máy chủ mà chỉ tập trung vào code logic. Serverless Framework là lựa chọn hàng đầu giúp triển khai ứng dụng lên nhiều nền tảng đám mây khác nhau như AWS Lambda, Google Cloud Functions và Azure Functions một cách đồng nhất và hiệu quả.
Serverless Framework là gì?
Serverless Framework là một công cụ dòng lệnh (CLI) mã nguồn mở, giúp triển khai và quản lý ứng dụng serverless trên nhiều nhà cung cấp đám mây khác nhau thông qua một tập tin cấu hình duy nhất có tên serverless.yml.
Khác với việc viết code triển khai trực tiếp trên từng nền tảng đám mây riêng lẻ, Serverless Framework cung cấp một lớp trừu tượng thống nhất cho phép bạn định nghĩa hàm số (functions), sự kiện kích hoạt (events/triggers) và tài nguyên (resources) trong một file cấu hình, sau đó tự động triển khai tới cloud provider đã chỉ định.
Mặc dù tên gọi chứa từ “serverless”, thực tế là server vẫn tồn tại – chỉ là việc quản lý máy chủ đã được nhà cung cấp dịch vụ thực hiện thay thế cho người dùng. Lợi thế chính của mô hình này là chúng ta không cần phải lo lắng về mặt móng (infrastructure) mà chỉ tập trung vào phần business logic và code ứng dụng.
Kiến trúc serverless.yml
Tập tin cấu hình serverless.yml là lõi trung tâm của mọi dự án. Cấu trúc cơ bản bao gồm:
service: my-serverless-app
provider:
name: aws
runtime: nodejs18.x
region: ap-southeast-1
environment:
STAGE: ${self:custom.stage}
functions:
hello:
handler: handler.hello
events:
- http:
path: hello
method: get
resources:
Resources:
MyDynamoDBTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: MyTable
AttributeDefinitions:
- AttributeName: id
AttributeType: S
KeySchema:
- AttributeName: id
KeyType: HASH
BillingMode: PAY_PER_REQUEST
Trong đó:
- Dịch vụ (service): Tên định danh toàn bộ dự án serverless
- Nhà cung cấp (provider): Chỉ định nền tảng đám mây (aws, google, azure)
- Hàm số (functions): Định nghĩa các hàm Lambda với handler và event kích hoạt
- Tài nguyên (resources): Khai báo các dịch vụ đám mây phụ trợ như DynamoDB, S3, API Gateway
Triển khai trên AWS Lambda
AWS Lambda là nền tảng điện toán serverless phổ biến nhất thế giới với hỗ trợ đa dạng ngôn ngữ như Node.js, Python, Java, Go và .NET. Để triển khai trên AWS Lambda bằng Serverless Framework:
Bước 1: Cài đặt và cấu hình AWS CLI
npm install -g serverless
npm install
serverless config credentials --provider aws --key ACCESS_KEY --secret SECRET_KEY
Bước 2: Triển khai
serverless deploy
Sau khi lệnh deploy thành công, hệ thống sẽ tự động tạo API Gateway endpoint, gán IAM role cho hàm Lambda và cấu hình CloudWatch Logs để giám sát hoạt động.
AWS Lambda hỗ trợ tối đa thời gian thực thi 15 phút, bộ nhớ từ 128MB đến 10GB, và tự động quy mô theo số lần gọi. Chi phí được tính theo số lần thực thi và thời gian chạy cộng thời gian khởi động (cold start).
Triển khai trên Google Cloud Functions
Google Cloud Functions (GCF) là dịch vụ serverless của Google Cloud, nổi tiếng với thời gian khởi động nhanh và khả năng tích hợp chặt chẽ với hệ sinh thái Google Cloud như BigQuery, Firestore và Pub/Sub.
Để triển khai trên Google Cloud Functions với Serverless Framework:
Cấu hình provider:
provider:
name: google
runtime: python311
project: your-gcp-project-id
region: asia-northeast1
functions:
process_order:
handler: main.process_order
events:
- http: true
- event:
eventType: providers/cloud.pubsub/eventTopic/order_created
Bước triển khai:
serverless deploy --package target
Một lợi thế quan trọng của GCF là khả năng trigger từ nhiều dịch vụ của Google Cloud chỉ với một vài dòng cấu hình. Ví dụ bạn có thể dễ dàng thiết lập trigger từ Pub/Sub để xử lý thông tin đặt hàng ngay khi có sự kiện mới được đăng trên hàng đợi.
Quản lý môi trường và triển khai đa môi trường
Làm framework, bạn có thể dễ dàng triển khai ứng dụng lên nhiều môi trường khác nhau như development, staging và production chỉ bằng cách sử dụng các biến môi trường (environment variables) và deployment profiles:
Sử dụng biến môi trường trong serverless.yml:
custom:
stage: ${opt:stage, 'dev'}
provider:
environment:
DB_TABLE: ${self:custom.table.${self:custom.stage}}
API_KEY: ${ssm:${self:custom.stage}_api_key}
Triển khai lên môi trường khác nhau:
serverless deploy --stage dev
serverless deploy --stage prod
Phương pháp này giúp đảm bảo cấu hình và tài nguyên luôn đồng nhất giữa các môi trường, đồng thời tuân thủ nguyên tắc Infrastructure as Code (IaC).
Những thách thức và cách giảm thiểu cold start
Một trong những thách thức lớn nhất của serverless computing chính là cold start – thời gian khởi động ban đầu của hàm khi chưa có instance đang chạy. Cold start có thể kéo dài từ vài trăm mili giây đến vài giây tùy theo ngôn ngữ và kích thước package.
Các cách giảm cold start:
- Sử dụng ngôn ngữ khởi động nhanh như Go hoặc Node.js thay vì Java hoặc .NET
- Tối ưu hóa package deployment bằng tree-shaking và loại bỏ dependency không cần thiết
- Sử dụng provisioned concurrency trên AWS Lambda hoặc minimum instances trên Google Cloud Functions để giữ instance luôn sẵn sàng
- Chia nhỏ logic thành nhiều hàm nhỏ (micro-functions) để giảm thời gian khởi động mỗi hàm
- Sử dụng container-based deployment để đóng gói dependency cùng code, tránh phải tải lên lại các layer phụ thuộc
Bên cạnh đó, cần lưu ý đến chi phí: mặc dù serverless có vẻ rẻ hơn cho khối lượng nhỏ, khi số lượng yêu cầu tăng lên liên tục, chi phí có thể vượt quá mức mong đợi so với việc chạy trên một máy chủ truyền thống nếu traffic dự đoán được.
Kết luận
Serverless Framework cung cấp một cách tiếp cận thống nhất để triển khai ứng dụng serverless trên đa nền tảng đám mây. Với file cấu hình serverless.yml duy nhất, các nhà phát triển có thể dễ dàng đưa ứng dụng lên AWS Lambda, Google Cloud Functions và Azure Functions mà không cần học cách cấu hình riêng cho từng nhà cung cấp. Điều này giúp giảm đáng kể thời gian triển khai và duy trì độ nhất quán giữa các môi trường. Tuy nhiên, trong khi serverless mang lại nhiều lợi ích về chi phí và khả năng mở rộng, nên cân nhắc cẩn thận về cold start, vendor lock-in và giới hạn thời gian thực thi khi lựa chọn kiến trúc này cho dự án của bạn.



