Serverless Framework: Triển khai ứng dụng trên AWS Lambda và Google Cloud Functions

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.

So sánh mô hình dịch vụ đám mây: SaaS, PaaS, IaaS, FaaS - Function as a Service
Mô hình dịch vụ và triển khai đám mây: Deployment models (private, public, hybrid, multi)
Kiến trúc tính toán đám mây: Cloud computing stack với SaaS, PaaS, FaaS, IaaS
Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

Clean Architecture trong Node.js: Nguyên tắc và folder structure chuẩn

Clean Architecture trong Node.js: Nguyên tắc và folder structure chuẩn Clean Architecture (Kiến trúc sạch) là một phong cách thiết kế phần mềm được Robert C. Martin (Uncle Bob) đề…

Xem thêm

Python: So sánh và đánh giá

Python: So sánh và đánh giá Python là một trong những ngôn ngữ lập trình phổ biến nhất thế giới, được dùng rộng rãi trong lĩnh vực khoa học dữ…

Xem thêm

OpenTelemetry cho microservices: Tracing, metrics, logs

OpenTelemetry cho microservices: Từ tracing tới observability toàn diện Trong thế giới kiến trúc microservices ngày càng phổ biến, việc theo dõi và hiểu rõ hành vi của hệ thống…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất