Amazon SESのメール送信ログを記録する

記事タイトルとURLをコピーする

こんにちは。 SRE2課の島村です。

最近、気温が下がってきて寒くなってきましたね。
乾燥もしてきたので、外出する際はのど飴を欠かさず出かけています。

さて、今回はAmazon SESを使ってメール送信した際に送信ログ方法を紹介します。

実はAmazon SESでメールを送信した際に、Amazon SESだけではメールの送信履歴を
記録することができません。

Amazon Kinesis Data FirehoseとAmazon Elasticsearch Serviceと組み合わせて使用することでメールの送信履歴を記録することができます。
今回のブログではAmazon SESでメール送信履歴を記録するまでのセットアップ手順を紹介していきます。

前提

・Amazon SESでドメインをセットアップし、メールを送信できるようにしておく。
以下のドキュメントが参考になると思います。

docs.aws.amazon.com

・S3バケットを適当に1つ作成しておく。
Kinesis Data Firehoseで配送に失敗した場合のログをS3に格納するため、専用のものを作成しておきます。
名前は任意で構いません。

Amazon Elasticsearch Serviceのセットアップ

ドメインの作成

Amazon Elasticsearch Serviceのコンソールへ移動します。
[新しいドメインの作成]を選択してください。

f:id:swx-shimamura:20201112173449p:plain

デプロイタイプとバージョンの選択画面が表示されます。
今回はテストなので、[開発環境およびテスト]を選択し、バージョンは最新のものにしましょう。

f:id:swx-shimamura:20201112173624p:plain

ドメインの設定を行います。
[Elasticsearch ドメイン名]、[インスタンスタイプ ]、[ストレージサイズ]は任意で設定しましょう。
その他の設定項目はデフォルトの設定で問題ありません。
入力が終わったら[次へ]を押します。

f:id:swx-shimamura:20201112175655p:plain

アクセスとセキュリティの設定画面です。
今回設定するのは[ネットワーク構成]と[アクセスポリシー]の2つです。
その他はデフォルトで問題ありません。

ネットワーク構成は[パブリックアクセス]を選択してください。
今回はVPC内からのアクセスではないためです。

アクセスポリシーは[カスタムアクセスポリシー]を選択してください。
使用するIAM Role、もしくはアクセスするグローバルIPアドレスを指定します。
今回はどちらも選択しています。

f:id:swx-shimamura:20201116125949p:plain

入力が完了したら[次へ]を選択し、最後に設定内容を確認したら作成を押してください

f:id:swx-shimamura:20201116125953p:plain

Elasticsearch Serviceのインスタンスが作成されます。
10分程度かかるのでその間に必要な設定をしていきましょう。

Amazon Kinesis Data Firehoseのセットアップ

配信ストリームの作成

Kinesis DataFirehoseの配信ストリームを作成していきます。 Kinesisコンソールへ移動し、Kinesis DataFirehoseを選択してください。

f:id:swx-shimamura:20201118152004p:plain

設定画面に進んでいきます。
[Delivery stream name]は任意で設定してください。
データソースは[Direct PUT or other sources]を選択します。
他はデフォルトのまま[次へ]を押します。

f:id:swx-shimamura:20201118152018p:plain

Step2では特に設定するものはないので、そのまま[次へ]を押します。

f:id:swx-shimamura:20201118154232p:plain

ストリームの配信先を選択します。
今回は[Amazon Elasticsearch]を選択してください。

f:id:swx-shimamura:20201118155027p:plain

Elasticsearchのドメイン作成が完了している場合は作成されたものを選択してください。
作成が完了できていない場合は少し待ちましょう。
[Index]は[logs-ses]としています。

f:id:swx-shimamura:20201118155726p:plain

Elasticsearchへ配送するレコードのバックアップ設定を指定します。
今回は配送に失敗した場合のみを記録するようにします。
ここで指定するS3バケットは事前に作成したものを指定してください。

f:id:swx-shimamura:20201118155607p:plain

専用の[IAM Role]を作成しましょう。 既存のIAM Roleも選択することが可能なので状況に応じて選択してください。
f:id:swx-shimamura:20201118155538p:plain

あとは設定を確認して、設定を完了しましょう。

Amazon SES

Configuration Sets設定

Configuration Setsを設定していきます。
Configuration SetsはEメールにルールを適用できる設定です。
イベントの発行だったり、送信に使うIPアドレスのプールを設定することが可能です。

イベント発行の場合、E メールの送信、配信、開封、クリック、バウンス、苦情イベントを
追跡し、 Amazon Kinesis Data Analyticsで分析することが可能です。

詳細については以下のドキュメントを参照ください。

docs.aws.amazon.com

まずは、Amazon SESコンソールへ移動します。
右ペインから、[Configuration Sets]を選択します。
f:id:swx-shimamura:20201118164617p:plain

ポップアップウィンドウが表示されます。
[Configuration Sets]の名を任意で入力し、作成してください。

f:id:swx-shimamura:20201118165259p:plain

イベント送信先をKinesis Firehoseに設定します。 f:id:swx-shimamura:20201118165453p:plain

イベント送信先を決定するとイベント内容に関するポップアップが表示されます。任意で名前を入力し、取得したいイベントにチェックをつけましょう。配信先は先ほど作成したKinesis DataFirehoseのストリームで、IAM Roleは新規で作成します。

Configuration Sets設定はこれで完了です。
f:id:swx-shimamura:20201201105423p:plain

テストメールの送信

ログを確認する前にテストメールを送信します。Amazon SESコンソールへ移動し、[Domains]から送信に使用するドメインを選択します。選択後、[Send a Test Email]を押しましょう。

f:id:swx-shimamura:20201201112318p:plain

今回はメールヘッダーにConfiguration Sets固有のヘッダーを付与する必要があるため、[Raw形式]を選択します。

f:id:swx-shimamura:20201201113032p:plain

例文を記載しておきます。

X-SES-CONFIGURATION-SET: [Configuration Sets名]
subject: test
これはテスト送信です。

入力が完了したら送信しましょう。
バウンスのイベントも対象にしている方は、以下にメールを送信することでバウンスのシュミレーションを行うことが可能です。宛先を指定して同様のメールを送信してみてください。

bounce@simulator.amazonses.com

送信ログの確認

メールの送信が完了したので、ログを確認したいと思います。
Elasticserch ServiceコンソールからkibanaへログインするためのURLが表示されています。ここからログインが可能です。

f:id:swx-shimamura:20201201113928p:plain

ログインできたら、[Explorer my own]を選択しましょう。

f:id:swx-shimamura:20201201114214p:plain

[Discover]を選択しましょう。

f:id:swx-shimamura:20201201114252p:plain

インデックスパターンを作成します。
今回はlogs-ses*と入力します。

f:id:swx-shimamura:20201201114129p:plain

タイムスタンプとして使用する項目を選択します。[mail.timestamp]を選択し、インデックスパターンを作成してください。

f:id:swx-shimamura:20201201115921p:plain

左上のアイコンから、コンソールトップへ戻り、再度Discoverを押すとログが表示されます。

f:id:swx-shimamura:20201201121030p:plain

最後に

Amazon SESの送信ログを取得することができました。
Amazon SESの送信に関してのトラブルシューティングに活用できればと思います。

島村 輝 (Shimamura Hikaru) 記事一覧はコチラ

最近ECS周りをキャッチアップ中。趣味は車・バイク全般。
一応、AWS12冠です。