📝

Amazon SESのメール送信ログを Amazon Athenaを使って確認してみた

2022/08/26に公開

はじめに

Amazon SESのメール送信ログを確認しようと思ったところ、デフォルトではログの記録や確認ができないことがわかりました。

ドキュメントではAmazon Kinesis Data Firehoseを経由してAmazon OpenSearch Serviceでメール送信履歴を表示する方法が紹介されているのですが、最低構成でもそこそこコストがかかってしまいそうだなという印象でした。

別の方法で送信ログを確認できないかなーと考えていたところ、S3に保存したログにクエリを投げる方法はどうだろうと思いAmazon Athenaを使ってみました。

前提

  • Amazon SES → Amazon Kinesis Data Firehose → S3経由でS3にメール送信ログが蓄積されている

やってみる

  1. AWSコンソールからAmazon Athena > クエリエディタを開きます。

  2. データセット作成のため、エディタのクエリタブからクエリを投げていきます。

  • データベースを作成
CREATE DATABASE sestestdb
  • テーブル作成&S3からデータ投入
CREATE EXTERNAL TABLE sesmaster (
  eventType string,
  complaint struct<arrivaldate:string, 
                   complainedrecipients:array<struct<emailaddress:string>>,
                   complaintfeedbacktype:string, 
                   feedbackid:string, 
                   `timestamp`:string, 
                   useragent:string>,
  bounce struct<bouncedrecipients:array<struct<action:string, diagnosticcode:string, emailaddress:string, status:string>>,
                bouncesubtype:string, 
                bouncetype:string, 
                feedbackid:string,
                reportingmta:string, 
                `timestamp`:string>,
  mail struct<`timestamp`:string,
              source:string,
              sourceArn:string,
              sendingAccountId:string,
              messageId:string,
              destination:string,
              headersTruncated:boolean,
              headers:array<struct<name:string,value:string>>,
              commonHeaders:struct<`from`:array<string>,to:array<string>,messageId:string,subject:string>,
              tags:struct<ses_configurationset:string,ses_source_ip:string,ses_outgoing_ip:string,ses_from_domain:string,ses_caller_identity:string>
              >,
  send string,
  delivery struct<processingtimemillis:int,
                  recipients:array<string>, 
                  reportingmta:string, 
                  smtpresponse:string, 
                  reportingMTA:string>
  )           
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
  "mapping.ses_configurationset"="ses:configuration-set",
  "mapping.ses_source_ip"="ses:source-ip", 
  "mapping.ses_from_domain"="ses:from-domain", 
  "mapping.ses_caller_identity"="ses:caller-identity",
  "mapping.ses_outgoing_ip"="ses:outgoing-ip"
  )
LOCATION 's3://(S3バケットのURI)'
  1. 検索結果を表示してみる
SELECT eventtype as Event,
         mail.timestamp as Timestamp,
         mail.tags.ses_source_ip as SourceIP,
         mail.tags.ses_caller_identity as AuthenticatedBy,
         mail.commonHeaders."from" as FromAddress,
         mail.commonHeaders.to as ToAddress
FROM sesmaster
WHERE eventtype = 'Send'

イベントタイプ、タイムスタンプなど、基本的なログが参照できるようになりました。

おわりに

OpenSearch ServiceのようにGUIがデフォで整っているサービスではありませんが、ちょっと確認したいなーというときに手軽にクエリを投げられるのかなーという印象でした。

参考

Discussion