Giới thiệu
Với SQS standard, Lambda sẽ poll message trên queue, lúc đầu khởi tạo 5 concurrency, khi message trên SQS tăng lên, Lambda tiếp tục tăng số lượng concurrency lên để đủ đáp ứng, tối đa 1000
Chi phí sẽ đội lên khi số lượng concurrency tăng lên quá nhiều, để ngăn chặn, chúng ta có thể đăng ký số lượng reserved concurrency cho từng Lambda function.
Khi nó chạm đến ngưỡng reserved concurrency, message sẽ được đẩy trả về queue, sau đó sẽ tiếp tục retry hoặc gửi vào DLQ (SQS Dead letter queue) nếu đã quá số lần retry cho phép
maximum concurrency cũng khá giống với reserved concurrency, chỉ khác là nó chỉ hoạt động khi nơi gọi Lambda là SQS, khi đạt tới ngưỡng maximum concurrency Lambda sẽ ngừng lấy message từ queue, nó sẽ linh động hơn nếu chúng ta cần điều chỉnh giới hạn concurrency theo nơi gọi
Ngoài việc hạn chế Lambda dùng hết nguồn lực để xử lý message trên queue, chừa sức để xử lý những công việc đến từ các nguồn khác, nó còn tránh được việc message bị đưa về queue và đưa vào DLQ không cần thiết
Thiết đặt
Bên trong màn hình cấu hình Trigger của Lambda
Nếu sử dụng CLI
aws lambda create-event-source-mapping --function-name my-function --ScalingConfig {MaxConcurrency=2} --event-source-arn arn:aws:sqs:us-east-2:123456789012:my-queue
Nếu sử dụng Cloudformation
Resources:
MaxConcurrencyFunction:
Type: AWS::Serverless::Function
Properties:
Handler: MyLambdaFunction
Events:
SQSEventFromMax:
Type: SQS
Properties:
Queue: MySQSQueueArn
BatchSize: 1
Enabled: true
ScalingConfig:
MaximumConcurrency: 5
Initializing...