Trang chủTác giảLiên hệ

Alarming, Pausing Email Sending cho Amazon SES

By Trịnh Minh Hùng
Published in CSS
December 07, 2020
3 min read

Hầu như các dự án của chúng ta đều sử dụng đến dịch vụ gửi mail. Hôm nay mình sẽ nói về Mail Service của AWS là SES. Tất nhiên như với tiêu đề, mình sẽ không nói về cách tạo và sử dụng nó như thế nào, mình sẽ nói về 1 vấn đề mà dự án của chúng ta có thể gặp phải trong tương lai.

Giả dụ hệ thống của bạn gửi mail (với lưu lượng gửi mail được coi là nhiều) vì lý do nào đó dẫn tới việc send mail bị fail nhiều. Con số thì có thể xem SES statistics với Reputation.BounceRateReputation.ComplaintRate cao. Khiến cho AWS khóa luôn SES ở cấp Region bạn đang sử dụng => Lỗi chức năng gửi mail cả hệ thống (rất nghiêm trọng). Mình có thể lấy vài ví dụ mình đã thấy để xảy ra trường hợp này như:

  • Ví dụ môi trường Dev và production dùng chung 1 SES Region. Developer hoặc Tester nghịch chức năng ở môi trường Dev, spam mail không tồn tại. Lại sơ xuất không chú ý. Dẫn tới hệ thông Dev gửi mail fail liên tục đạt ngưỡng => khóa SES Region => ảnh hưởng production
  • Môi trường production bị spam mail. => khóa region

Nói chung dù vấn đề gì việc để mail send fail quá nhiều chắc chắn ảnh hưởng production. Khi đã khóa SES ở Region thì mất nhiều thời gian để mở lại hoặc enable ở region khác. Vì vậy để giải quyết chúng ta nên pause SES lại, xử lý vấn đề về mail ở logic, sau đó enable lại service thì có vẻ ok hơn.

Hơn nữa chúng ta cũng cần quan tâm tới statistics. Theo dõi được các metrics như: Deliveries, Rejects, Bounces và Complaints. Ngoài việc sử dụng metrics này để phân tích dữ liệu thì nó cũng liên quan tới sức khỏe của hệ thống.

Ngoài ra, mình cũng có suggest là mỗi môi trường nên sử dụng SES trên các Region khác nhau. Yên tâm là infra của bạn ở region nào thì vẫn dùng SES ở Region khác được. Ngoài mục đích tránh tình trạng khóa region ở ví dụ mình nêu. Thì nó còn liên quan đến vấn đề thống kê. Không vị data ở Dev, Test ảnh hưởng đến Production.

Nói chung bài này mình đã đưa ra vấn đề, ý tưởng, còn thực hành có lẽ là làm theo AWSLab dưới đây là uki nhất roài. Ae có thể customize theo dự án nhé. https://github.com/awsdocs/amazon-ses-developer-guide/blob/master/doc-source/monitoring-sender-reputation-pausing-account.md

Flow cụ thể là:

  • Sử dụng Cloudwatch Metric để theo dõi SES Statistic.
  • Đặt Alarm cho các metrics
  • Khi có Alarm, triggers Action tới SNS topic
  • Lambda function (cái mà trigger SNS Topic) nhận được thông báo thì thực hiện logic pause Email Sending.

Part 1: Create a IAM Role

Phần tạo role này mình lưu ý 2 cái là:

  • Áp dụng cho service là lambda
  • Attach các policies: AWSLambdaBasicExecutionRole, AmazonSESFullAccess (cái này có thể thu nhỏ quyền cũng đk)

Part 2: Create a Lambda function

Tạo lambda function cần chú ý:

  • Runtime: chọn NodeJS, version nào mới mới nhé
  • Role: Sử dụng role tạo ở trên
  • Nội dung function thì sử dụng ở dưới. Code có sử dụng aws sdk mặc định đã được import rồi.

Ae có thể test function này nhé. Sẽ có log hiện ra kết quả success hay không. Nếu success thì Email Sending của bạn sẽ bị pause.

Part 3: Re-Enable Email Sending for Your Account

Sau khi test ở part 2, Chúng ta cần enable lại Email Sending lại nhé. Có thế sử dụng console hoặc CLI:

Để kiểm tra xem SES service có enable không, bạn có thể vào console kiểm tra hoặc sử dụng CLI:

Output ntn là ok:

###Part 4: Create an Amazon SNS Topic

Chúng ta cần tạo 1 cái SNS Topic để nhận notification từ Cloudwatch Alarm. Khi mà Lambda fuction thực hiện subscribe SNS topic này để xử lý logic pause Email Sending.

###Part 5: Create a CloudWatch Alarm

Chúng ta cần tạo 1 Alarm. Khi mà Cloudwatch nhận biết được vi phạm ngưỡng thì sẽ gửi alarm. Các bạn tham khảo hướng dẫn chi tiết ở trên. Nhưng chúng ta cần lưu ý:

  • Tạo 2 Alarm theo các metrics: Reputation.BounceRateReputation.ComplaintRate
  • Với Alarm Threshold thì mình lựa chọn: BounceRate là 10% và ComplaintRate là 5%
  • Và cuối cùng, Action của Alarm sẽ send notification to tới SNS topic tạo ở trên.

###Part 6: Test the solution

Sau khi cấu hình 1 hồi, ae có thể sử dụng CLI để Test việc Pause Email Sending bằng cách set trạng thái cho Alarm.

Và đợi chờ thành quả. Nhớ enable lại sau khi test nhé.

###Kết luận

Ae có thể tham khảo chi tiết từng steps với:


Tags

awsses

Trịnh Minh Hùng

Related Posts

Seri CSS cơ bản - [CSS Basic 2] Making layout
June 09, 2021
7 min
© 2021, All Rights Reserved.

Quick Links

Liên hệ quảng cáoThông tinLiên hệ

Social Media