Mục lục bài viết
- Tổng quan cập nhật này
- Nội dung cập nhật
- Cách sử dụng các APIs này
- Thử nghiệm thực tế bằng AWS Console
- Sử dụng bằng AWS CLI
- Về việc mở rộng tính năng này cho các dịch vụ AWS khác
- Kết luận
Tổng quan cập nhật này
Vấn đề vòng lặp vô hạn xảy ra khi AWS Lambda function tương tác với các dịch vụ aws.
Nguyên nhân thường là do lỗi code hoặc cấu hình sai, dẫn đến tăng chi phí sử dụng aws không mong muốn.
Cho nên cập nhật lần này giúp người dùng cấu hình phát hiện vòng lặp vô hạn trên từng hàm lambda riêng lẻ.
Nội dung cập nhật
Mặc định tính năng phát hiện vòng lặp vô hạn sẽ được bật cho tất cả các lambda function.
Hiện tại nó hoạt động với các dịch vụ: Lambda, SQS và SNS.
Cơ chế hoạt động như sau:
- Nó sử dụng AWS X-Ray trace header để theo dõi số lần function được gọi
- Giới hạn ở 16 lần gọi cho cùng một sự kiện, sau ngưỡng này, Lambda dừng thực thi và đẩy vào metric CloudWatch.
Nó còn xử lý ngoại lệ bằng 2 cách:
- Gọi đồng bộ: trả về RecursiveInvocationException
- Gọi bất đồng bộ: gửi sự kiện đến dead-letter queue hoặc on-failure destination
Các APIs giới thiệu lần này là:
- GetFunctionRecursiveConfig: trả về thông tin chi tiết về cấu hình phát hiện vòng lặp vô hạn của hàm
- PutFunctionRecursiveConfig: đặt cấu hình phát hiện vòng lặp vô hạn cho một hàm. Theo mặc định, tính năng phát hiện vòng lặp vô hạn được BẬT cho tất cả các function.
Cách sử dụng các APIs này
Có 3 cách sử dụng các api này gồm:
- AWS Console
- AWS CLI
- Thông qua các công cụ Infrastructure as Code như:
- AWS CloudFormation
- AWS Serverless Application Model (SAM) phiên bản 1.123.0 trở lên
- AWS Cloud Development Kit (CDK) phiên bản v2.153.0 trở lên
Thử nghiệm thực tế bằng AWS Console
- Vào hàm lambda, chọn tab Configuration bạn sẽ thấy mục Concurrency and recursion detection
Tính năng này mặc định được bật lên.
- Để tắt tính năng này nhấn Edit sau đó chọn Allow recursive loops rồi nhấn Save
Sử dụng bằng AWS CLI
CLI bên dưới để lấy cấu hình tính năng này
aws lambda get-function-recursion-config \
--region $AWS_REGION \
--function-name $FUNCTION_NAME
CLI bên dưới để cập nhật cấu hình tính năng này
aws lambda put-function-recursion-config \
--region $AWS_REGION \
--function-name $FUNCTION_NAME \
--recursive-loop Allow|Terminate
Thay giá trị thích hợp cho AWS_REGION và FUNCTION_NAME
Ở hàm aws lambda put-function-recursion-config dùng tham số recursive-loop với giá trị
- Allow → Sử dụng khi bạn có chủ đích cho phép vòng lặp vô hạn
- Terminate → Bật lại tính năng phát hiện vòng lặp vô hạn
Sử dụng bằng AWS CloudFormation
LambdaFunction:
Type: AWS::Lambda::Function
Properties:
Code:
S3Bucket:S3_BUCKET
S3Key: S3_KEY
Handler: com.example.App::handleRequest
MemorySize: 1024
Role:
Fn::GetAtt:
- LambdaFunctionRole
- Arn
Runtime: java17
RecursiveLoop : Allow
Timeout: 20
TracingConfig:
Mode: Active
Về việc mở rộng tính năng này cho các dịch vụ AWS khác
Hiện tại tính năng này hoạt động cho tính năng Lambda, SQS và SNS.Giới hạn 16 lần gọi trước khi dừng vòng lặp.
Tuy nhiên AWS Lambda dự định mở rộng hỗ trợ phát hiện vòng lặp vô hạn cho nhiều dịch vụ AWS khác nữa.
Một cách bạn có thể xác định các hàm sử dụng mẫu vô hạn là dùng metric RecursiveInvocationsDropped trong Cloudwatch
- CLI bên dưới sẽ tạo một CloudWatch Alarm cho tất cả các hàm Lambda dựa trên metric CloudWatch RecursiveInvocationsDropped. Cấu hình alarm để kích hoạt khi giá trị của metric này lớn hơn ngưỡng 0.
aws cloudwatch put-metric-alarm --alarm-name lambda-recursive-alarm --metric-name RecursiveInvocationsDropped --namespace AWS/Lambda --statistic Sum --period 60 --threshold 0 --comparison-operator GreaterThanOrEqualToThreshold --evaluation-periods 1 --alarm-actions $arn-of-sns-notification-topic
- Khi Lambda phát hiện các lệnh gọi vòng lặp vô hạn, nó sẽ phát ra metric RecursiveInvocationsDropped, điều này sẽ kích hoạt alarm. Lưu ý rằng Lambda chỉ phát hiện và dừng các lệnh gọi này nếu tất cả các dịch vụ trong vòng lặp đều hỗ trợ tính năng phát hiện vòng lặp vô hạn
Kết luận
Tính năng phát hiện vòng lặp vô hạn của Lambda tự động phát hiện và dừng các lệnh gọi vô hạn giữa Lambda và các dịch vụ được hỗ trợ, ngăn chặn các workload chạy không kiểm soát. Trong hầu hết các trường hợp, bạn nên thiết kế workload của mình để tránh bất kỳ vòng lặp vô hạn nào. Trong một số tình huống hiếm gặp và đặc biệt, bạn có thể muốn tắt hành vi mặc định này trên từng trường hợp cụ thể. Các API phát hiện vòng lặp vô hạn cho phép bạn thiết lập cấu hình trên từng hàm riêng lẻ.
Tính năng này có sẵn ở tất cả các Region AWS.
Để lại một bình luận