Hôm nay, AWS đã công bố tính năng mới có thể phát hiện và dừng vòng lặp đệ quy trong hàm Lambda. Cùng Sunny Cloud tìm hiểu về tính năng này nhé.

Nội dung cập nhật

Khi sử dụng các hàm Lambda để xây dựng ứng dụng dựa trên sự kiện, chúng ta thường xử lý sự kiện từ các nguồn như Amazon SQS hoặc Amazon SNS. Tuy nhiên, trong quá trình cấu hình tài nguyên hoặc do lỗi trong mã nguồn, có thể xảy ra tình trạng mà hàm Lambda rơi vào vòng lặp, dẫn đến chi phí cao không mong muốn.

Với bản cập nhật lần này, Lambda có thể phát hiện hàm đang chạy trong vòng lặp đệ quy giữa các dịch vụ được hỗ trợ như Amazon SQS, AWS Lambda, Amazon SNS sau 16 lần gọi đệ quy nó sẽ trả về RecursiveInvocationException cho nguồn gọi. Cập nhật này có sẵn và không tốn thêm phí.

Trong trường hợp gọi bất đồng bộ, Lambda sẽ gửi sự kiện đến hàng đợi để xử lý sau hoặc địa chỉ để xử lý lỗi (nếu được cài đặt). Do đó, có thể tránh được việc xảy ra vòng lặp đệ quy như trước đây.

Các dịch vụ AWS được hỗ trợ trong bản cập nhật

Có thể phát hiện vòng lặp đệ quy giữa các hàm, Amazon SQS, Amazon SNS.

Sơ đồ thông tin vòng lặp đệ quy giữa các hàm, Amazon SQS, Amazon SNS
Sơ đồ thông tin vòng lặp đệ quy giữa các hàm, Amazon SQS, Amazon SNS

Version SDK được hỗ trợ

Bảng thông tin các version SDK được hỗ trợ
Bảng thông tin các version SDK được hỗ trợ

Làm thế nào để nhận thông báo?

Khi Lambda dừng vòng lặp đệ quy, bạn có thể nhận được thông báo từ AWS Health Dashboard hoặc qua email.

Bạn cũng có thể sử dụng CloudWatch Metrics để theo dõi số lần gọi đệ quy mà Lambda dừng. Mặc định nó sẽ dừng sau 16 lần nhưng bạn có thể thiết lập ngưỡng khác.

Ngoài việc nhận thông báo từ AWS Health Dashboard, khi Lambda dừng lần đầu tiên sau khi thực hiện hàm đệ quy, một cảnh báo sẽ được gửi qua email. Lambda sẽ gửi tối đa 1 email cho mỗi hàm trong tài khoản AWS hàng ngày. Hơn nữa, thông báo sẽ được gửi không chỉ đến tài khoản AWS gốc mà còn đến các địa chỉ liên hệ thay thế.

Email thông báo AWS Health Dashboard
Email thông báo AWS Health Dashboard

“RecursiveInvocationsDropped” trong CloudWatch Metrics ghi lại số lần gọi hàm mà Lambda đã dừng vì hàm này được gọi trên 16 lần trong một chuỗi yêu cầu.

Nếu phát hiện vòng lặp đệ quy của Lambda

Để ngăn chặn sự phát sinh của vòng lặp đệ quy mà Lambda đã dừng, bạn có thể thực hiện các hành động sau: 

  • Giảm số lượng thực thi đồng thời của hàm xuống 0.
  • Xóa hoặc vô hiệu hóa nguồn gây ra lỗi cho việc gọi hàm
  • Xác định lỗi trong code và trong sự kiện từ AWS resource đang gọi hàm.
  • Đảm bảo rằng bạn không sử dụng cùng một giá trị cho cả nguồn và mục tiêu khi định nghĩa sự kiện và nguồn cho hàm

Tổng kết

Hôm nay, chúng tôi đã giới thiệu một cập nhật cho AWS Lambda, cho phép nó phát hiện và dừng lại các vòng lặp đệ quy trong các hàm Lambda. Tuy nhiên, tính năng này hiện vẫn chưa được hỗ trợ trên các event từ dịch vụ khác như DynamoDB hoặc S3. Chúng tôi hy vọng rằng trong tương lai, tính năng này sẽ được mở rộng để trở nên tiện lợi hơn.

Tham khảo : 【アップデート】AWS Lambda は Lambda 関数内の再帰ループを検出して停止するようになりました