AWS Lambda: Run Code Without Server

4 min read

  • FaaS – Functions as a Service
  • Serverless: chúng ta không cần quan tâm về vấn đề quản lý các servers thật

So sánh EC2 và Lambda

EC2Lambda
Là server ảo trên cloudLà các functions
Giới hạn về RAM và CPUGiới hạn về thời gian chạy
Thường sẽ chạy liên tụcSẽ chỉ chạy khi được request (thường sẽ ngắn)
Chỉ có thể scale bằng cách tăng giảm số lượng (scale theo chiều ngang) – Cần setup thủ côngCho phép chạy song song (tự có phần scale mà ko cần setup)
  • Giá rất rẻ: tiền được tính theo số lần invoke và thời gian thực hiện yêu cầu
  • Free 1M request đầu và 400K GBs thời gian tính toán trong FREE TIER
  • Thương thích với các services khác một cách dễ dàng
  • Với mỗi 1GB RAM thì sẽ tăng thêm 1 CPU ảo ⇒ tăng khả năng xử lý

Synchronous Invocations

  1. Các request được tạo bởi CLI, SDK, API Gateway, ALB
  2. Kết quả sẽ được trả về ngay lập tức sau khi được tính toán xong
  3. Phía client sẽ cần phải handle các lỗi

Asynchronous Invocations

  • Các request được tạo bởi S3, SNS, Cloudwatch Event, Event Bridge…..
  • Các request được đưa vào trong event queue
  • Có thể áp dụng cơ chế retry on error ⇒ có thể dẫn tới việc một request được xử lý 2 lần
  • Có thể tích hợp thêm DLQ (cần config IAM role cho hợp lý)
  • Tăng tốc quá trình xử lý ⇒ xử lý đồng thời nhiều request mà KHÔNG cần chờ result

Event và Context

EventContext
Chứa các thông tin về service đã invoke lambdaChứa các thông tin về invocation của lambda, runtime env, các thông số cái đặt của lambda
Chứa các thông tin về input, arguments, ….

Destination

  • Kết quả của một lambda có thể được chuyển tới một thực thể nào đó khác
  • Chỉ hoạt động với Async Invocation hoặc Stream Invoc
  • Có thể là:
    • SQS
    • SNS
    • Một lambda khác
    • Event bridge
    • DLQ cho các request lỗi

Execution Role

  • Cấp quyền để lambda có thể access đến các service khác trong AWS như là (S3, Cloudwatch, SQS, SNS)
  • Có thể sử dụng các policy trong các service để thay thế – tuỳ trường hợp

Resource Based Policies

  • Tương tự như các service khác, dùng để cho phép service nào làm gì trên một lambda

Environment Variables

  • Dynamic cho các môi trường một cách đơn giản hơn

CloudFront Function và Lambda Edge

Một số usecase hay gặp

CloudFront FunctionLambda Edge
Dùng một số giá trị trong headers, cookies để làm cache keyTime dài hơn, có cả CPU và RAM
Thay đổi một số thông tin trong headersDùng được thư viện bên thứ 3
Redirect/Rewrite URLsThay đổi headers, body, cookies, …..
Tạo JWT để validate request

Lambda /tmp space

  • Một vùng lưu trữ tạm thời
  • Có thể được chia sẻ cho các lần invocation khác
  • Dùng để làm một vùng checkpoint tạm thời (trong case đệ quy chẳng hạn)

Layers

  • External Dependecies

File Systems Mounting

So sánh các dạng storage

Concurrency và Throttling

  • Có tối đa 1000 concurrencies với mỗi account
  • Các lambda chia chung concurrencies pool
  • Có thể set số lượng concurrencies (X) cho mỗi lamda ⇒ lúc đó thì số lượng concurrencies trong pool sẽ giảm còn (1000-X)
  • Có thể setup cơ chế retry, exponential backoff khi sử dụng Async Invoke
  • 2 khái niệm quan trọng cần phân biệt:
Provisioned ConcurrencyReserved Concurrency
Số lượng lambda instance sẽ được tạo sẵn – dùng để tránh cold startSố lượng tối đa instances của một lambda có thể chạy song song với nhau
Tốn kha khá tiền để duy trìKhi set cái này thì số lượng concurrencies trong pool sẽ bị giảm

Cold start

  • Khi một lambda instance mới được khởi tạo, sẽ mất thời gian để load code, load các dependencies, SDK, ……
  • Sau khi một lambda được invoke, lambda sẽ bị ‘cold’ sau khoảng 45’ nếu ko được invoke lại
  • Các giải pháp có thể được sử dụng:
    • Pinging lambda: qua event bridge
    • Sử dụng Provisoned Concurrency: luôn có một số lượng lambda instance được tạo sẵn, nên có một số các requests đầu sẽ không rơi vào Cold start

Lambda dependencies

  • Có thể zip file cùng với code lambda để push thẳng lên lambda (NẾU dung lượng file nhỏ hơn 50 MB)
  • Nếu dung lượng file code quá lớn sẽ cần push lên S3 ⇒ thường sẽ dùng CloudFormation để update lambda
  • SDK mặc định là sẽ có trong mỗi lambda function

Alias và Version

Một số giới hạn

  • RAM: từ 128GB tới 10GB (càng nhiều RAM thì có càng nhiều vCPU)
  • Có thể có tối đa 6 vCPU
  • Timeout: tối đa 900 secs – 15 phút
  • Env variables: max 4 kbs
  • /tmp space: 512 MBs to 10GBs
  • Concurrencies: 1000 (có thể tăng thêm, cần liên hệ AWS supports)

📚 Tài liệu tham khảo AWS Lambda

Avatar photo

Leave a Reply

Your email address will not be published. Required fields are marked *