Serverless - Lambda Function

2 phút đọcSeries: NoteBook: AWS Certified Solutions Architect Associate SAA-C031 lượt xem

Tổng quan

  • Serverless là một mô hình (paradigm) mới, trong đó các lập trình viên không còn phải quản lý server nữa...
  • Họ chỉ cần deploy code, deploy... các function!
  • Ban đầu... Serverless đồng nghĩa với FaaS (Function as a Service).
  • Serverless được tiên phong bởi AWS Lambda, nhưng hiện nay nó còn có ý nghĩa bao gồm bất kỳ thứ gì được quản lý sẵn (managed): "databases, messaging, storage, etc."
  • Serverless không có nghĩa là không có server...
    Nó chỉ đơn giản là bạn không cần phải quản lý / cấp phát (provision) / nhìn thấy chúng.

Các Serverless Service trong AWS

  • AWS Lambda 
  • DynamoDB
  • AWS Cognito
  • AWS API Gateway
  • Amazon S3
  • AWS SNS & SQS
  •  AWS Kinesis Data Firehose
  • Aurora Serverless
  • Step Functions
  • Fargate

Tại sao dùng AWS Lambda

Amazon EC2

  • Máy chủ ảo trên nền tảng đám mây
  • Bị giới hạn bởi RAM và CPU
  • Luôn chạy liên tục
  • Việc scale (mở rộng) yêu cầu can thiệp thủ công để thêm/bớt server

Amazon Lambda

  • Hàm ảo – không cần quản lý server
  • Bị giới hạn theo thời gian – chạy ngắn hạn
  • Chạy theo yêu cầu (on-demand)
  • Scale tự động!

Lợi ích của AWS Lambda

  • Chi phí đơn giản:
    • Tính phí theo số lần gọi và thời gian thực thi (compute time)
    • Miễn phí 1.000.000 request AWS Lambda và 400.000 GBs thời gian thực thi mỗi tháng
  • Tích hợp với toàn bộ hệ sinh thái dịch vụ của AWS
  • Tích hợp với nhiều ngôn ngữ lập trình
    • Node.js (JavaScript)
    • Python
    • Java
    • C# (.NET Core) / PowerShell
    • Ruby
    • Custom Runtime API (được cộng đồng hỗ trợ, ví dụ như Rust hoặc Golang)
  • Lambda Container Image
    • Image container phải implement Lambda Runtime API
    • Đối với các Docker image tùy ý (arbitrary), ECS / Fargate là lựa chọn phù hợp hơn
  • Dễ dàng giám sát thông qua AWS CloudWatch
  • Dễ dàng mở rộng tài nguyên cho từng hàm (lên đến 10GB RAM!)
  • Tăng RAM đồng thời cũng tăng cả CPU và băng thông mạng
  • Tích hợp với các AWS Service khác:

Ví dụ

Tạo ảnh Thumbnail

  • Người dùng upload ảnh lên S3
    • Một hình ảnh mới được upload vào một S3 bucket.
    • Bucket này được cấu hình để trigger một Lambda function khi có đối tượng mới (ObjectCreated event).
  • Lambda được kích hoạt bởi sự kiện mới
    • Lambda nhận sự kiện từ S3 bao gồm các metadata cơ bản như tên file, bucket, key,...
    • Lambda function được viết để thực hiện các tác vụ xử lý ảnh (resize, crop, compress,...).
    • Trong ví dụ này, Lambda tạo ảnh thumbnail từ ảnh gốc.
  • Lambda xử lý và push kết quả
    • Sau khi xử lý xong, Lambda thực hiện hai thao tác song song:
      • Lưu ảnh thumbnail vào một bucket S3 khác hoặc thư mục khác
        • Lambda ghi ảnh đã xử lý (thumbnail) vào một S3 bucket (hoặc folder) riêng biệt.
      •  Lưu metadata ảnh vào DynamoDB
        • Lambda ghi lại metadata như:
          • image_name: tên ảnh gốc
          • thumbnail_size: kích thước thumbnail
          • created_at: thời gian tạo
          • Các thông tin khác (nếu cần: user, IP upload, ảnh gốc,...)

Serverless CRON Job

Bạn thấy bài này thế nào?