AWS SES のバウンスイベントのログを S3 に格納する

AWS SES のバウンスイベントのログを S3 に格納する
この記事をシェアする

はじめに

こんにちは。shumpeiです。

AWS SES(Simple Email Service)を使用してメール送信を実装する際、バウンスや苦情などのイベントをどのように確認するか考慮する必要があると思います。SESではイベント発生時に通知する方法や、ログとして保存する方法があります。本記事ではSESのバウンスイベントのログをS3に格納して確認する方法について紹介していきます。

構成概要

以下のような構成で実装を行います

SESから直接S3にログを格納することはできないため間にKinesis Data Firehoseを使用します。

前提条件

下記のリソースは作成してある状態で進めていきます。

  • SESのドメインID
  • ログ格納用のS3バケット

実装手順

Kinesis Data Firehose の設定

1. AWS Kinesis Data Firehose コンソールにアクセス

2. 「Firehoseストリームの作成」をクリック

3. ソースを「Direct PUT」に設定

4. 送信先を「Amazon S3」に設定

5. Firehoseスリーム名は任意の名前を設定

6. バウンスログ格納用のS3バケットを選択

7. タイムゾーンは「Asia/Tokyo」を選択

8. 「Kinesis Data Firehose の作成」をクリック

※その他プレフィックスなど設定可能ですが、今回は基本的な設定以外はデフォルト値で作成します。

IAMロール作成

SESにFirehoseの権限を与えるIAMロールを作成します。(ここの作成手順は省略します)

ロールの許可ポリシーと信頼ポリシーはそれぞれ下記のように設定になります。

  • IAMポリシー
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Action": [
                "firehose:PutRecordBatch"
            ],
            "Resource": [
              "arn:aws:firehose:ap-northeast-1:アカウントID:deliverystream/Firehoseストリーム名"
            ]
        }
    ]
}
  • 信頼ポリシー
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "Service": "ses.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "AWS:SourceAccount": "アカウントID",
                    "AWS:SourceArn": [
                      "arn:aws:ses:ap-northeast-1:アカウントID:configuration-set/SES設定セット名"
                    ]
                }
            }
        }
    ]
}

※ARNの部分は各々で作成したFirehoseとSES設定セットのARNを記述してくださいを記述してください。

AWS SES の設定セットの作成

1. AWS SES コンソールにアクセス

2. 「設定」→「設定セット」を選択

3. 「設定セットの作成」をクリック

4. 設定セット名を入力

5. 「作成」をクリック

※今回は他の設定はデフォルトで設定します。

SES設定セットイベント設定

1. 作成した設定セットを選択

2. 「イベント送信先」タブを選択

3. 「送信先の追加」をクリック

4. イベントタイプの選択

いくつかのイベントが選択できますが、今回は「ハードバウンス」のみを選択します。

5. デスティネーションとして「Kinesis Data Firehose」を選択

6. 配信ストリームには作成した Kinesis Data Firehose を選択

7. 作成したIAM ロールを設定

8. 「次へ」をクリック

設定内容を確認し「作成」

デフォルト設定セットの割り当て

1. AWS SES コンソールにアクセス

2. 「設定」→「ID」を選択

3. 対象のメールドメインを選択

4. 「デフォルト設定セット」セクションで、作成した設定セットを選択

5. 「保存」をクリック

これにより、このメールドメインから送信されるすべてのメールに対して、自動的に設定セットが適用されます。
個別のメール送信時に設定セットを指定する必要はありません。

テスト

SESのコンソールからテストメールの送信ができます。

1. AWS SES コンソールにアクセス

2. 「設定」→「ID」を選択

3. 対象のドメインを選択し「テストメールの送信」を選択

4. シナリオを「バウンス」にします。

5. テストなので件名や本文は適当なものを記入します。

6. 設定セットは選択しないで問題ないです。

7. テストEメールの送信

S3にメールログが格納されていたら成功です!

S3にはjson形式で格納され、イベントの種類・バウンスの詳細・メールの情報等が確認できます。

まとめ

SESのバウンスイベントのログをS3に格納して確認する方法について紹介していきました。本記事ではログでの確認方法を紹介しましたが、今回は紹介していないメール通知する方法や、他のログ保管の実装方法もあります。本記事が参考になれば幸いです。

参考リンク

この記事をシェアする
著者:shumpei
エンジニア2年生。文系大卒未経験でエンジニアスタート。