🤯

Amazon SESでメールアドレスごとに開封率を出してみた

2024/06/28に公開

背景

Amazon SESで送ってるメールで送信先アドレスごとに開封率を出したい!
が、既存の機能ではできなかったため、AWSのサービスを組んで出してみた

構成

  1. SES
  2. Kinesis Data Firehose
  3. S3
  4. Glue
  5. Athena

1.SES

設定セットの作成
イベント送信先の設定で送信先の追加
欲しいイベントタイプの選択を選択し、送信先オプションでKinesis Data Firehoseを指定
https://docs.aws.amazon.com/ja_jp/ses/latest/dg/monitor-using-event-publishing.html#event-publishing-terminology

2.Kinesis Data Firehose

SESから受け取ったJSONをParquet形式にし、S3へ保存してくれる人
Parquet形式への変換は出力形式を「Apache Parquet」を選択し、Glueのデータベースとテーブルを指定

3.S3

SESのログをFirehose経由でParquet形式で保持

4.Glue

データベースとテーブルの管理
テーブルはAthenaから作成する
Crawlersで日次でS3のログを収集するよう設定し、Athenaで作成したテーブルに取り込む

5.Athena

テーブルはDDLを実行して作成する
あとはゴリゴリなクエリを書いて、メールアドレスごとの開封率を出す
クエリが一番苦労しました

  • mailカラムはパッと見JSONっぽいが、STRUCTデータタイプ
    • mail.xxxで参照
  • 中身の配列はCROSS JOIN UNNSETで展開

注意!!!

クエリは必ず期間などの条件を絞り込んだ状態で実行すること!!!
Athenaがスキャンしたデータ容量で課金されるため、絞り込みをせずにクエリを投げると膨大なデータをスキャンしてしまい、高額請求になります
、、、とSREチームからキツく3回くらい注意喚起されました^^;

コストは大事!

感想

AWSの機能を組み合わせて色々できるんだなあ、と実感
初めて触る機能もあって勉強になりました

Goals Tech Blog

Discussion