0
0
Lập trình
Admin Team
Admin Teamtechmely

Phát hiện lỗi mục tiêu EventBridge: Phần 1 - sử dụng Dead Letter Queue

Đăng vào 4 tuần trước

• 5 phút đọc

Giới thiệu

Khi EventBridge gửi tin nhắn đến mục tiêu của nó, có nhiều lý do có thể gây ra việc không thể gửi tin nhắn. Các vấn đề về quyền truy cập, giới hạn tần suất, hoặc sự không khả dụng của mục tiêu, thậm chí có thể là sự cố trong AWS, chỉ là một vài lý do.

Dù lý do là gì, việc nhận thông báo về vấn đề gửi tin nhắn và lý do thất bại là điều cực kỳ cần thiết. Trong bài viết này, tôi sẽ thảo luận về cách mà Dead Letter Queue (DLQ) có thể hữu ích để nhận thông báo khi EventBridge không thể gửi tin nhắn đến mục tiêu.

Dead Letter Queue (DLQ)

Dead Letter Queue là những người hùng không được công nhận của kiến trúc dựa trên sự kiện. Chúng dễ thiết lập và quản lý nhưng lại cải thiện đáng kể khả năng phục hồi của hệ thống. Hơn nữa, nó cũng rất tiết kiệm chi phí.

Hãy cùng xem cách chúng ta có thể ghi lại các lỗi gửi mục tiêu trong EventBridge bằng cách sử dụng một Dead Letter Queue.

Lưu ý rằng EventBridge hỗ trợ DLQ ở một số "cấp độ". Bus EventBridge có thể có một DLQ riêng, hoặc bạn có thể thiết lập DLQ cho từng mục tiêu. Hãy cùng thảo luận về những khác biệt này.

DLQ ở cấp độ Bus EventBridge

Bus EventBridge có thể có một DLQ riêng. Tuy nhiên, điều này chỉ giới hạn trong việc ghi nhận các lỗi liên quan đến mã hóa KMS. EventBridge sẽ gửi các sự kiện không được mã hóa thành công đến DLQ.

Bạn chỉ có thể thấy cài đặt DLQ này trong EventBridge trên bảng điều khiển AWS nếu sử dụng KMS do khách hàng quản lý để mã hóa tin nhắn. Thực tế, nó là một phần của cài đặt Mã hóa.

Lưu ý: DLQ cho Bus Event chỉ khả dụng khi sử dụng KMS do khách hàng quản lý.

Tuy nhiên, DLQ này sẽ KHÔNG ghi nhận bất kỳ lỗi nào liên quan đến mục tiêu, vì vậy chúng ta không thể sử dụng nó cho mục đích của mình.

DLQ ở cấp độ mục tiêu EventBridge

Khi EventBridge không thể gửi một tin nhắn đến một mục tiêu, chúng ta có thể thiết lập một hàng đợi SQS để lưu tin nhắn đó lại, ở cấp độ mục tiêu.

Lưu ý: DLQ ở mục tiêu.

Vì một quy tắc có thể có nhiều mục tiêu, mỗi mục tiêu có thể có các DLQ khác nhau. Bạn có thể sử dụng cùng một hàng đợi SQS làm DLQ cho tất cả các mục tiêu, nhưng bạn phải cấu hình nó cho từng mục tiêu riêng biệt. Điều này có thể nghe có vẻ như công việc lặp đi lặp lại, nhưng nếu bạn sử dụng một công cụ hạ tầng như mã như CDK hoặc CloudFormation, điều này không phức tạp.

Cách thức hoạt động

  1. EventBus cố gắng gửi một tin nhắn đến mục tiêu của nó (ở đây, là một hàng đợi SQS) thông qua quy tắc EventBridge.

  2. Giả sử có một vấn đề về quyền truy cập, và tin nhắn không thể được gửi đi.

  3. Sau đó, EventBridge sẽ đưa tin nhắn vào DLQ được cấu hình cho mục tiêu cụ thể này.

  4. Trong CloudWatch, có một cảnh báo được thiết lập để kích hoạt bất cứ khi nào có tin nhắn trong DLQ.

  5. Khi tin nhắn thất bại ở trong DLQ, cảnh báo sẽ kích hoạt và có một chủ đề SNS được cấu hình như hành động của cảnh báo.

  6. Khi hành động cảnh báo phát hành một tin nhắn đến chủ đề SNS, nó sẽ gửi thông báo đến tất cả các người đăng ký để thông báo về sự thất bại.

Thử nghiệm bản thân bạn

Tôi đã tạo một mẫu AWS SAM để thử nghiệm tình huống này trong tài khoản AWS của bạn.

  1. Nhân bản kho GitHub: https://github.com/pubudusj/event-bridge-target-failure-detection-with-dlq

  2. Triển khai ngăn xếp bằng lệnh dưới đây:

    Copy
    sam deploy \
    --template-file template.yaml \
    --stack-name event-bridge-target-failure-detection-with-dlq \
    --capabilities CAPABILITY_IAM \
    --no-confirm-changeset \
    --parameter-overrides NotificationEmail=[YourEmailAddress]
  3. Tại đây, thêm địa chỉ email của bạn vào NotificationEmail, để bạn nhận được thông báo qua email khi mục tiêu thất bại.

  4. Khi ngăn xếp được triển khai, bạn sẽ nhận được một email xác nhận đăng ký SNS. Bạn cần xác nhận nó để nhận thông báo.

  5. Sau đó, phát hành một tin nhắn vào bus sự kiện đã tạo với nguồn là xyzcorp.

  6. Bằng cách này, tin nhắn sẽ phù hợp với quy tắc và cố gắng gửi tin nhắn đến mục tiêu.

  7. Tôi đã cố tình chặn quyền phát hành đến mục tiêu để mô phỏng sự thất bại.

  8. Trong một thời gian ngắn, bạn sẽ nhận được một email với trạng thái cảnh báo.

  9. Hơn nữa, nếu bạn kiểm tra các tin nhắn trong DLQ, bạn có thể thấy tin nhắn thất bại và trong thuộc tính tin nhắn, bạn có thể thấy lý do thất bại (tùy thuộc vào lý do).

  10. Bạn có thể cấu hình ngưỡng, khoảng thời gian và số chu kỳ đánh giá của cảnh báo theo nhu cầu để kiểm soát tần suất thông báo khi có sự cố xảy ra. Link đến template.yaml

Tóm tắt

  1. Bus EventBridge có một DLQ nhưng nó phục vụ cho mục đích khác và không thể ghi nhận bất kỳ lỗi nào liên quan đến mục tiêu.

  2. Bạn có thể sử dụng phương pháp Dead Letter Queue này để ghi nhận bất kỳ tin nhắn nào không thể gửi đến mục tiêu. Dựa trên số lượng tin nhắn trong hàng đợi, bạn có thể nhận thông báo bằng cách sử dụng chỉ số CloudWatch và SNS. Tuy nhiên, bạn sẽ cần cấu hình nó cho từng mục tiêu EventBridge riêng biệt. Việc sử dụng một công cụ IAC để cấu hình điều này có thể thuận tiện.

  3. Tôi sẽ thảo luận về một giải pháp khác để đạt được điều tương tự trong phần 2 của bài viết này.

Tài nguyên

  1. Sử dụng Dead Letter Queue để xử lý các sự kiện không được gửi đến EventBridge: Tài liệu AWS

👋 Tôi thường xuyên tạo nội dung về AWSServerless, và nếu bạn quan tâm, hãy kết nối với tôi để không bỏ lỡ các bài viết mới nhất của tôi!

LinkedIn: https://www.linkedin.com/in/pubudusj
Twitter/X: https://x.com/pubudusj
Medium: https://medium.com/@pubudusj
Blog cá nhân: https://pubudu.dev

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào