SESのメール送信履歴をOpenSearch Serviceで表示してみた
みなさん、こんにちは。
AWS事業本部コンサルティング部の芦沢(@ashi_ssan)です。
最近、SESでは送信履歴を確認する方法がSESのサービスとしては実装されていない、ということを知りました。
送信履歴を保存し、表示させるためには以下の対応が別途必要になるそうです。
- SESの送信履歴を保存するためには、Kinesis Data Firehoseでメールの送信ログを任意の場所に保存する必要がある
- 保存した送信履歴をWebコンソール上に表示するためには、OpenSearch Serviceを利用する必要がある
この手順をわかりやすくまとめた資料がAWSのナレッジセンターにありましたので、実際に試してみます。
以下のような注記があるように、ナレッジセンターの手順はSESの旧コンソールに則った手順です。
> 注意: この記事のガイダンスでは、Amazon SES クラシックコンソールを使用しています。
2022年4月現在、SESコンソールはアップデートされており、そのまま実施するとうまくいかない箇所があったため、一部変更して作業を行いました。
AWS構成図
今回作成するAWS環境の構成図はこちらです。
事前準備
事前にメールを送信できるSESの環境を準備してください。
手元に検証できる環境がない場合は、以下のエントリを参考に検証環境を構築してみてください。
やってみた(環境構築編)
環境構築編では、以下の手順を進めていきます。
- OpenSearch Serviceドメインの作成
- S3バケットの作成
- Kinesis Data Firehose(Delivery Stream)の作成
- IAMロールの作成
- SES設定セットの作成
以降AWSリソースを構築するためのパラメータを入力する箇所がありますが、本記事では検証用の環境を構築する際のパラメータを指定しています。 本番ワークロードでの構築の場合は、別途本番用のパラメータを指定するようにしてください。
OpenSearch Serviceドメインの作成
まずはOpenSearch Serviceのドメインを作成します。
OpenSearch Serviceコンソールのダッシュボード画面でCreate domainをクリックします。
以下パラメータを入力し、作成をクリックします。
アクセスポリシーはこちらを参考にしてください。
設定するポリシーの概要は以下です。
- ここで設定するポリシーは、OpenSearch Serviceの管理コンソールにアクセスするために必要なものです。
- パブリックアクセスが可能なOpenSearch Serviceドメインを作成するので、特定のIPアドレスからのHTTPアクセスのみを許可するように設定しています。
## < >で括っているところは、作業環境の設定値に合わせて修正してください。 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "es:ESHttp*", "Resource": "arn:aws:es:ap-northeast-1:<AWSアカウント>:domain/<OpenSearch Serviceのドメイン名>/*", "Condition": { "IpAddress": { "aws:SourceIp": "<アクセス元のIPv4アドレスのCIDR>" } } } ] }
20分ほどでOpenSearch Serviceのドメインの作成が完了します。
作成完了後、OpenSearch Dashboards の URLをクリックすると、ダッシュボードが開きます。
※ここでアクセスが拒否された場合は、アクセスポリシーの内容に間違いがあると思われますので、再度確認しましょう。
S3バケットの作成
SESの送信履歴をKinesis Data Firehose経由で保存するS3バケットを作成します。
S3コンソールのバケット
からバケットを作成をクリックします。
以下のようにパラメータを入力し、画面下のバケットを作成をクリックします。
S3バケットが作成できました。
Kinesis Data Firehose(Delivery Stream)の作成
KinesisコンソールのDelivery streams
からCreate delivery streamをクリックします。
以下のようにパラメータを指定し、Create delivery streamをクリックします。
Delivery Streamが作成できました。
IAMロールの作成
次の手順で作成するSES設定セットに付与するIAMロールをここで作成します。
SESの旧コンソールだと自動作成できたようですが、新コンソールでは自動作成できないようになっていました。 コンソールのアップデートがあるまでは頑張って手動で作成しましょう。
まずはロールにアタッチするIAMポリシーを作成します。
IAMポリシー作成
IAMコンソールのポリシー
から、ポリシーの作成をクリックします。
以下のように各項目を入力し、ポリシーを作成します。
ポリシードキュメントの内容はこちらを参考にしてください。
## < >で括っているところは、作業環境の設定値に合わせて修正してください。 { "Version": "2012-10-17", "Statement": [ { "Sid": "0", "Effect": "Allow", "Action": "firehose:ListDeliveryStreams", "Resource": "*" }, { "Sid": "1", "Effect": "Allow", "Action": "firehose:*", "Resource": "arn:aws:firehose:*:<AWSアカウントID>:deliverystream/*" } ] }
IAMポリシーが作成できました。
IAMロール作成
続いてIAMロールを作成します。
IAMコンソールのロール
から、ロールの作成をクリックします。
以下のように各項目を入力し、ロールを作成します。
信頼ポリシーのサンプルはこちらです。
2022/6/23追記 フィードバックをいただきハイライトの箇所の記述を修正しました。次の手順で作成するSES変更セットの作成が必要になるため、手順が前後しますが変更セットのリソース作成後に信頼ポリシーを記載ください。
## < >で括っているところは、作業環境の設定値に合わせて修正してください。 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "ses.amazonaws.com" ] }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "AWS:SourceAccount": "<AWSアカウントID>", "AWS:SourceArn": "arn:aws:ses:ap-northeast-1:<AWSアカウントID>:configuration-set/<変更セット名>" } } } ] }
ロールが作成できました。
SES設定セットの作成
SES設定セットのリソース作成
SESコンソールのConfiguration sets
からCreate setをクリックします。
以下のように各項目を入力し、Create setをクリックします。
設定セットが作成できました。
イベント送信先設定
続いて、SESのイベント送信先の設定を行います。
SESコンソールのConfiguration sets
、Event destinationsタブのAdd destinationをクリックします。
以下のように各項目を入力し、設定します。
イベント送信先設定が完了しました。
長くなりましたが、以上で環境構築が完了しました。
やってみた(テスト編)
テスト編では、以下の手順を実施します。
- テストメール送信
- OpenSearchダッシュボードからの確認
テストメール送信
続いて、テストメールを送信してOpenSearchのWebコンソールから送信履歴が確認できるか試してみましょう。
テストメールの送信はSESのコンソールの画面右上、Send test emailから実行できます。
以下のように各項目を入力し、Send test emailをクリックでテストメールが送信できます。
今回はScenarioとして、Successfully Delivery、Bounce、Complaint
それぞれを指定した3通のテストメールを送信しました。
OpenSearchダッシュボードからの確認
それでは、配信したテストメールがOpenSearchダッシュボード(kibana)で表示できるか確認しましょう。
再度、OpenSearchダッシュボードを開きます。
インデックスパターンの作成
画面左のタブを開き、Discoverをクリックします。
Create index patternをクリックします。
以下のように既存のインデックス名が含まれるように指定し、Next stepをクリックします。
Time fieldを指定し、Create index patternをクリックします。
インデックスパターンの作成が完了しました。
送信履歴の確認
もう一度、画面左のタブからDiscoverをクリックします。
デフォルトの状態だと、このように見づらいため少しだけ整形します。
Available fieldを指定し、表示させる情報を絞り込みます。
このようにタイムスタンプからテストメールが3通表示できていることが確認できました。
最後に
今回は、SESのメール送信履歴をOpenSearch Serviceで表示してみました。
公式ナレッジセンターにある手順をなぞるようにう検証しましたが、実際に手を動かしてみると、思ったようにいかない部分が多く、勉強になりました。
またデータ分析の知見に乏しく、OpenSearch ServiceダッシュボードもといElasticsearchの操作については手探りでやった部分が大半なので、後半のOpenSearchダッシュボードの作業箇所はかなり怪しいところが多いかと思います。その点はご容赦ください。
以上、AWS事業本部コンサルティング部の芦沢(@ashi_ssan)でした。