SESのバウンス率・苦情率を監視するためのCloudWatch Alarmを作成してみた
SESのバウンス率・苦情率を監視したい
こんにちは!AWS事業本部のおつまみです。
SESをお使いのみなさん、バウンス率・苦情率を監視していますか?私はもちろんやっています。
SESでは評価ダッシュボードを開いて、バウンス率・苦情率を確認できます。
ただし、特定のしきい値に達した場合、ダッシュボードからは通知をおこなってくれません。
SES バウンス率・苦情率が高いまま、SESを使用し続けるとアカウントの E メール送信機能が一時停止されてしまいます。
Amazon SES 送信レビュープロセスに関するよくある質問 - Amazon Simple Email Service
そのため今回は公式ドキュメントから案内されているとおり、特定のしきい値に達した場合にメール通知する方法をご紹介します。
やってみた
構成図
今回の構成図です。
SESの評判メトリクスをCloudWatchで監視します。バウンス率・苦情率が特定のしきい値に達した場合、CloudWatch Alarmが通知されるよう設定します。
そしてCloudWatch Alarmに紐づく SNS トピックが、サブスクライブしたエンドポイント (E メールアドレスなど) に通知を送信します。
前提条件
今回はSESの設定は省略します。以下の設定がされている状態からの手順となります。
- ドメインと検証用メールアドレスが設定されている。
- 送信制限(サンドボックス)が解除されている。
手順
- Amazon SES コンソールを開きます。
-
左側のナビゲーションペインで、「標準メトリクス」をクリックし、「アカウントレベル」タブの「バウンス率」で「CloudWatch で表示する」を選択します。
-
CloudWatch コンソールが開きます。「アクション」列 のアラームベルアイコンをクリックします。
-
「メトリクスと条件の指定」のページが開きます。以下のパラメータを指定し、[次へ]をクリックします。
- ・・よりも: 0.05
- 欠落データの処理: 欠落データを無視として処理する (アラーム状態を維持する)
なおCloudWatch アラームのしきい値を設定するときは、以下の推奨事項があります。
Amazon SES では、苦情率を 0.1% 未満に維持することをお勧めします。苦情率が 0.5% を超えると、Amazon SES はアカウントの E メール送信機能を一時停止することがあります。しきい値は 0.001 (0.1%) に設定することをお勧めします。
5. 「アクションの設定」のページが開きます。以下のパラメータを指定し、[トピックの作成]をクリックします。
- アラーム状態トリガー: アラーム状態
- 次のSNSトピック通知に送信: 新しいトピックの作成
- トピック名: CloudWatch_Alarm_Topic_for_SES(任意の名前)
- 通知を受け取るEメールエンドポイント: 通知先のEメールアドレス
6. SNSトピックのEメールアドレスが表示されるので、「次へ」をクリックします。
7. 「名前と説明を追加」のページが開きます。以下のパラメータを指定し、[次へ]をクリックします。
- アラーム名: CloudWatch_Alarm_SES_BounceRate(任意の名前)
8. 「プレビューと作成」のページが開きます。設定値を確認し、「アラームの作成」をクリックします。
9. 作成されたアラームが表示されます。
10. SNSトピック作成時に指定したメールアドレス宛にサブスクリプション通知のメールが件名「AWS Notification - Subscription Confirmation」で届いています。メール内の「Confirm subscription」を押下し、サブスクリプションを承認します。
11. 同様の手順で「苦情率」についても設定します。パラメータについては以下の通りです。
- 「メトリクスと条件の指定」
- ・・よりも: 0.001
- 欠落データの処理: 欠落データを無視として処理する (アラーム状態を維持する)
- 「アクションの設定」
- アラーム状態トリガー: アラーム状態
- 次のSNSトピック通知に送信: 既存トピックの指定
- トピック名: CloudWatch_Alarm_Topic_for_SES
- 「名前と説明を追加」
- アラーム名: CloudWatch_Alarm_SES_ComplaintRate
- 作成されたアラームが表示されます。
設定は以上です。
検証
アラームが問題なく設定されたことを確認するために対象のSESを使用し、あえて存在しないアドレス宛にメールを送信します。
メール送信はThunderbirdから行いました。
送信方法はこちらの公式ドキュメント「ソフトウェアパッケージを使用し、Amazon SES を介して E メールを送信します」をご確認ください。
メールを送信すると、しばらくすると通知先メールアドレスに件名「ALARM: "CloudWatch_Alarm_SES_BounceRate" in Asia Pacific (Tokyo)」が送信されることを確認できます。(※アラーム確認のために一時的にしきい値を下げています。)
問題なく設定できたようでよかったです!
CloudFormationでサクッと作ってみた
以下は、SNSトピックとCloudWatch Alarmを作成するCloudFormationテンプレートです。
手動で作成するのが面倒な方はこちらをご参考ください。
AWSTemplateFormatVersion: '2010-09-09' Description: Cloudwatch Alarm For SES Bounce and Complaint # ------------------------------------------------------------# # Resources # ------------------------------------------------------------# Resources: SNSTopic: Type: AWS::SNS::Topic Properties: TopicName: CloudWatch_Alarm_Topic_for_SES Subscription: - Endpoint: xxxxxxxx@test.jp Protocol: email CloudWatchAlarmForSesBounceNotice: Type: "AWS::CloudWatch::Alarm" Properties: AlarmName: "CloudWatch_Alarm_SES_BounceRate" ActionsEnabled: true AlarmActions: - !Ref SNSTopic MetricName: "Reputation.BounceRate" Namespace: "AWS/SES" Statistic: "Maximum" Period: 300 EvaluationPeriods: 1 DatapointsToAlarm: 1 Threshold: 0.05 ComparisonOperator: "GreaterThanOrEqualToThreshold" TreatMissingData: "ignore" CloudWatchAlarmForSesComplaintNotice: Type: "AWS::CloudWatch::Alarm" Properties: AlarmName: "CloudWatch_Alarm_SES_ComplaintRate" ActionsEnabled: true AlarmActions: - !Ref SNSTopic MetricName: "Reputation.ComplaintRate" Namespace: "AWS/SES" Statistic: "Maximum" Period: 300 EvaluationPeriods: 1 DatapointsToAlarm: 1 Threshold: 0.001 ComparisonOperator: "GreaterThanOrEqualToThreshold" TreatMissingData: "ignore"
おまけ:送信ログも保存しよう
Amazon SESでは自動でメールの送信ログ取得を行ってくれません。
そのため、ログの保存が必要な場合は別途追加で実装する必要があります。
ログはバウンス率・苦情率が上がってきた場合やトラブルシューティングに役立つため、可能であれば取得することをおすすめします!
実装方法は下記ブログをご参考ください。
最後に
今回はSESのバウンス率・苦情率を監視するためのCloudWatchAlarmを作成する方法をご紹介しました。
監視することでSESをいつまでも安全にお使いいただければと思います!
最後までお読みいただきありがとうございました!
どなたかのお役に立てれば幸いです。
以上、おつまみ(@AWS11077)でした!
参考
CloudWatch を使用して評価モニタリングアラームを作成する - Amazon Simple Email Service