🤯
Amazon SESでメールアドレスごとに開封率を出してみた
背景
Amazon SESで送ってるメールで送信先アドレスごとに開封率を出したい!
が、既存の機能ではできなかったため、AWSのサービスを組んで出してみた
構成
- SES
- Kinesis Data Firehose
- S3
- Glue
- Athena
1.SES
設定セットの作成
イベント送信先の設定で送信先の追加
欲しいイベントタイプの選択を選択し、送信先オプションでKinesis Data Firehoseを指定
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の機能を組み合わせて色々できるんだなあ、と実感
初めて触る機能もあって勉強になりました
Discussion