LoginSignup
2
2

More than 1 year has passed since last update.

AmazonSESのログをS3へ出力する

Last updated at Posted at 2022-03-24

やりたいこと

SESを使ってメールを送信していますが、メール送信に失敗することが多々ありました。
その原因調査をするために、送信失敗したSESのログをS3で集計できるようにしたいと思います。

手順

今回はKinesisS3を使ってSESのログ収集できるようにします。

  1. S3バケットを作成
  2. Kinesisの配信ストリームを作成
  3. SESConfigurationSetsを作成
  4. SESConfigurationSetのロールを作成
  5. SESConfigurationSetのイベントと送信先を設定
  6. ログがS3に保存されるかテスト
  7. ログ収集したいドメインとConfigurationSetを紐づけ

S3にバケットを作成する

SESのログを保存するためのS3バケットを作成する。

  1. AWSコンソールからS3へ遷移して、「バケットを作成」を押す
    S3-Management-Console.png

  2. 適当なバケット名を入力する(今回はSES-logs)
    その他は環境に合わせて項目を選択し「バケットを作成する」で新たなバケットが作成できる
    S3-bucket.png

Kinesisで配信ストリームを作成する

SESからS3にログデータを送信する繋ぎの部分をKinesisに作成する。

  1. Amazon Kinesis > 配信ストリーム(もしくはDelivery streams) に移動して、「Create delivery stream」からストリームを作成する
    Amazon-Kinesis-Firehose.png

  2. 環境に合わせた項目を選択する
    Amazon-Kinesis-Firehose-input.png

  • 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に送るように設定する。

  1. Amazon SES > Configuration setsの「Create set」で設定を作成する
    AWS-Simple-Email-Service-Configuration-sets.png

  2. 適当な設定名を入力する
    AWS-Simple-Email-Service-Create-set.png

SESからKinesisにログを送るためのロールを作成する

  1. IAM > ロール で「ロールを作成する」
    IAM-Management-Console.png

  2. 信頼されたエンティティを設定する
    IAM-Management-Console-2.png

  • 信頼されたエンティティタイプ: カスタム信頼ポリシー

  • カスタム信頼ポリシー:

{
    "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名を指定する

  1. ステップ2の許可追加は何もしないで進める

  2. ロール名を入力して「ロールを作成」する
    IAM-Management-Console-3.png

  3. 先ほど作成したロールにポリシーを追加する
    IAM-Management-Console-4.png

  4. インラインポリシーを設定する
    IAM-Management-Console-5.png

{
    "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のイベントと送信先を設定する

  1. イベントと送信先を設定する
    AmazonSES > Configuration sets > SendMailLog(先ほど作成した設定) > Event destinations で「Add destination」を押す
    AWS-Simple-Email-Service-Details-page.png

  2. どのイベント時にログを送信するか設定する
    今回はメール送信が失敗した場合のみログを送信する
    AWS-Simple-Email-Service-Add-event-destination.png

  3. 送信先をKinesisに設定する
    AWS-Simple-Email-Service-Add-event-destination-2.png

  • 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に保存されるかテストする

  1. AmazonSES > Verified identities > ログ収取したいドメインを選択し「Send test email」を押す
    AWS-Simple-Email-Service-Details-page-6.png

  2. テストメールを設定して送信する
    AWS-Simple-Email-Service-Send-test-email.png

  • 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を紐づける

  1. AmazonSES > Verified identities > ログ収取したいドメイン > Configuration set の「Edit」を押す
    AWS-Simple-Email-Service-Details-page-7.png

2. 作成したconfiguration setを選択して保存する
AWS-Simple-Email-Service-Edit.png


これでSESのログがS3へ保存されるようになります。
結構設定手順が多いので面倒でしたね。。

2
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2