Open4

SESのメール送信に関するログを見たい!

mocknmockn

概要

背景

  • AWSで運用をする中で、SESで送信されたメールがユーザーに届いていないという問い合わせが時々発生していた。特にCognitoと連携して送信するようなメール。
  • CloudTrailでは送信結果やエラー内容などを見ることができないため、原因不明で迷宮入りしてしまうケースがあった。
  • SESのメール送信に関するログを見るためには「SESイベント発行」というオプションがあるらしい。

SES イベント発行

SES イベント発行とは?

  • 定義した特性に基づいてE メール送信イベントを CloudWatch、Data Firehose、Pinpoint、または SNSに発行するようにSES を設定できる機能。
  • 送信、配信、オープン、クリック、バウンス、苦情、拒否、レンダリングの失敗、配信遅延など、さまざまな種類の E メール送信イベントを追跡できる。

ユースケース

- CloudWatchE メールキャンペーンのパフォーマンスを追跡するダッシュボードを作成
- SNS を使用して特定のイベントが発生したときにメールやSlackに通知を送信する
- Data Firehoseを使ってS3にログを保存する
  • 今回は運用時の調査が目的なので、Data Firehoseを使ってS3にログを保存するケースが合致しそう。
mocknmockn

料金

https://aws.amazon.com/jp/firehose/pricing/

形式の変換の料金: JSON から Parquet または ORC への変換 (オプション)
0.5 KB のレコードサイズ (500 バイト) = 0.5 KB (5 KB の増分はなし)

最初の 500 TB/月の料金 = 0.13 USD/GB

取り込みで請求される GB = (100 レコード/秒 × 0.5 KB/レコード) / 1,048,576 KB/GB × 30 日/月 × 86,400 秒/日 = 123.59 GB

月間の取り込み料金 = 123.59 GB × 0.13 USD/GB = 16.06 USD
データ形式の変換は、データインジェストにオプションのアドオンで、コストの計算には取り込みで請求された GB を使用します。

取り込み GB あたりの料金変換= 0.018 USD

月間の形式変換料金 = 1,235.96 GB * 0.018 USD/GB 変換 = 22.25 USD



mocknmockn

設計

要件

  • SESの送信ログを保存し、詳細情報を後から確認することができる。
  • ログの保存形式
    • Raw Data (JSON, TXT, CSV, バイナリなど), Apache Parquet, Apache ORC (Optimized Row Columnar)から選択可
  • 調査フロー
    • 全てのメールから対象メールを特定する
      • 一日のメール送信件数:
      • メールの種類:
    • 対象メールの内容を確認する
      • 見やすい形式が良い
        • JSONよりはAthenaでORCもしくはParquetデータを検索する?
  • ファイルの保存形式
    • JSON(SESのデフォルト形式)もしくは
  • 料金
    • データをORCかParquetに変換すると追加料金が発生する
  • S3動的パーティショニング

構成

  • SES (設定セット) + Data Firehose + S3

参考

https://dev.classmethod.jp/articles/firehose-ses-default-configuration-set/
https://dev.classmethod.jp/articles/create-ses-configuration-for-log-by-one-cfn-stack/
https://dev.classmethod.jp/articles/ses-log-deliver-use-firehose-dynamic-partition/
https://zenn.dev/yktakaha4/articles/ses_delivery_log_with_athena
https://qiita.com/hyj624117615/items/6bf44f2f86c252e3e00b
https://blog.denet.co.jp/amazon-ses-email-logs-analyzed-with-amazon-athena/