やりたいこと
SESを使ってメールを送信していますが、メール送信に失敗することが多々ありました。
その原因調査をするために、送信失敗したSESのログをS3で集計できるようにしたいと思います。
手順
今回はKinesis
とS3
を使ってSESのログ収集できるようにします。
- S3バケットを作成
- Kinesisの配信ストリームを作成
- SESConfigurationSetsを作成
- SESConfigurationSetのロールを作成
- SESConfigurationSetのイベントと送信先を設定
- ログがS3に保存されるかテスト
- ログ収集したいドメインとConfigurationSetを紐づけ
S3にバケットを作成する
SESのログを保存するためのS3バケットを作成する。
Kinesisで配信ストリームを作成する
SESからS3にログデータを送信する繋ぎの部分をKinesisに作成する。
-
Source:
Direct PUT
-
Destination:
Amazon S3
-
Delivery stream name:
SESToS3
適当な名前を入力 -
S3 bucket:
SES-logs
先ほど作成したバケットを選択 -
S3 bucket prefix:
bounce/!{timestamp:yyyy}-!{timestamp:MM}-!{timestamp:dd}/
S3バケット内でどのようにファイル分けするか設定できる(入力しなくてもOK)
今回は日付で分けられて出力されるように設定(例えば、bounce/2022-03-24/)
カスタムプレフィックスについてはこちらを参照 -
S3 bucket error output prefix:
errors/
出力エラーがあった際に、バケット内のどこに出力するかを設定する(入力しなくてもOK) -
Buffer interval:
60
データを収集する間隔を設定する
デフォルト300のままでもOK
最後に「Create delivery stream」を押してストリームを作成する
SESの設定を作成する
SESの送信ログをKinesisに送るように設定する。
SESからKinesisにログを送るためのロールを作成する
-
信頼されたエンティティタイプ:
カスタム信頼ポリシー
-
カスタム信頼ポリシー:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "ses.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"AWS:SourceAccount": "xxxxxxxxxxx",
"AWS:SourceArn": "arn:aws:ses:ap-northeast-1:xxxxxxxxxxx:configuration-set/SendMailLog"
}
}
}
]
}
※ap-northeast-1
はSESのリージョンに合わせて変更する
※xxxxxxxxxxx
はAWSのアカウントIDに変更する
※SendMailLog
は先ほど作成したSESConfigurationSet名を指定する
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Action": [
"firehose:PutRecordBatch"
],
"Resource": [
"arn:aws:firehose:ap-northeast-1:xxxxxxxxxxxx:deliverystream/SESToS3"
]
}
]
}
※xxxxxxxxxxxx
ははAWSのアカウントIDに変更する
※SESToS3
はKinesisで作成したDeliveryStream名を指定する
SESConfigurationSetのイベントと送信先を設定する
-
イベントと送信先を設定する
AmazonSES > Configuration sets > SendMailLog(先ほど作成した設定) > Event destinations で「Add destination」を押す
-
Destination type:
Amazon Kinesis Data Firehose
-
Name:
BounceEvent_ToKinesis
適当な名前を入力する -
Delivery stream:
SESToS3
Kinesisで作成したDeliveryStreamを選択する -
Identity and Access Management (IAM) Role:
ses-to-kinesis-policy
先ほど作成したIAMロールを選択する
「Next」でプレビューで設定を確認して設定を完了させる
ログがS3に保存されるかテストする
-
Email format:
Formatted
-
From-address:
info
-
Scenario:
Bounce
Configuration setsのイベントを失敗したとき限定にしたため、Bounceを選択 -
Subject:
test
適当なメール件名を入力する -
Body:
bounce test
適当なメール本文を入力する -
Configuration set:
SendMailLog
作成したConfigurationSetを選択する
最後に「Send test email」を押してテストメールを送信する
S3のバケット(今回はSES-logs)にログファイルが出力されていれば成功!
ログ収集したいドメインにConfigurationSetを紐づける
2. 作成したconfiguration setを選択して保存する
これでSESのログがS3へ保存されるようになります。
結構設定手順が多いので面倒でしたね。。