この記事は現役ウェブディベロッパーがわかりやすさにこだわって作成しました
はじめに
AWS マネージメントコンソールで Reputation metrics を開くことで、最近のバウンス率・苦情率を確認できます。Warning 以下に抑えるように運用をしていくのがベストプラクティスと書かれていますが、送信先などの詳細はここではわかりません。
そこでAWS SES のログを Kinesis Data Firehose 経由して、S3 へ転送することにしました。
公式サイトでは、SESのログを Kinesis Data Firehose 経由で、Elasticsearch へ送信し、ログを可視化する手順が公開されています。
Kinesis Firehose を作成する
詳細を確認するために、SES のアクセスログを Kinesis Firehose を経由して S3 に出力します。
S3パケットを用意します。
なお、バケットポリシーは適宜に設定しておいてください。
今回は検証のため、バケットポリシーの設定はそのままデフォルトとします。
パブリックアクセスをすべてブロック
にチェックを入れます。
2.Kinesis Data Firehose の作成
Kinesis Data Firehose の画面で、Create delivery stream
を押下します。
Delivery stream name
欄に適宜に名付けしてください。
Choose a source
はデフォルのままで大丈夫です。
Process records
はデフォルのままで大丈夫です。
Choose a destination
はAmazon S3
を選択します。
S3 destination
に、上記手順1で作成したS3バケットを選択します。
S3 prefix
とS3 error prefix
に、適宜にご希望のプレフィックスを入力します。
今回テストで早くログを見たいため、Buffer interval
を60
秒に設定しました。
S3 compression and encryption
とError logging
はデフォルのままで大丈夫です。
Tags
はそのままで大丈夫です。(必要に応じて適宜に入れてください)
なお、Permissons
は自動でIAMロールを作成するように選択してください。
最後は上記内容をレビューし、問題がないことを確認したら作成を押下します。
3.SESで設定
SES左側のメニュー一覧にConfiguration Sets
を押下します。Configuration Set Name
に適宜の名前を入れてください。
入力し終わったら、Create Configuration Set
を押下します。
出力するログのタイプを選択します。成功した場合もログに出力すると余計なコストがかかりますので除外します。
Select a destination type
欄に、Firehose
を選択します。
Enabled
にチェックを入れます。Name
に適宜に定義してください。Event Types
に、今回Send
、Reject
、Delivery
、Bounce
、Complant
を選択しました。必要に応じて、適宜に追加してください。Stream
に上記作成した Kinesis Data Firehose を選択してください。IAM role
に、Let SES make a new role
を選択の上、右側の欄に名前を定義してください。
上記内容を入力し終わったら、Create Role
を押下します。
You new role may take a few seconds to propagate.
が表示されるので、しばらく10数秒ぐらいを待ってから、Save
を押下します。
4.テスト
SES左側のメニューバーで、Domains
をクリックします。
ドメインを選択の上、Send a Test Email
を押下します。
※既にドメインは設定済みです。(設定手順は割愛させていただきます。)
From*
欄に、SESで発信するドメイン名を決めてください。To*
欄に、送信先のメールアドレスを入れてください。Configuration Set
欄に、先ほど作成されたConfiguration名を入れてください。(★★★★★ここ超重要★★★★★)Subject*
欄に、メールのタイトルを入れてください。Body
欄に、メール本文内容を入れてください。
上記入力し終わったら、Send Test Email
を押下します。
しばらくすると、SESからメールが届いたことを確認できました。
合わせてS3にログが吐き出されたかどうかを確認します。
下記のように、ログはうまく出力されていることを確認しました。
当ログを S3 Select でクエリをかけると、下記のようなログ内容が吐き出されます。
{
"eventType": "Send",
"mail": {
"timestamp": "2021-07-20T10:07:39.838Z",
"source": "test@XXXXXXXXXXXXXXXXXXX",
"sourceArn": "arn:aws:ses:ap-northeast-1:XXXXXXXXXXXX:identity/XXXXXXXXXXXX",
"sendingAccountId": "XXXXXXXXXXXX",
"messageId": "XXXXXXXXXXXX-XXXXXXXXXXXX-XXXXXXXXXXXX-XXXXXXXXXXXX-XXXXXXXXXXXX",
"destination": [
"XXXXXX@XXXXXX"
],
"headersTruncated": false,
"headers": [
{
"name": "From",
"value": "test@XXXXXXXXXXXXXXXXXXX"
},
{
"name": "To",
"value": "XXXXXX@XXXXXX"
},
{
"name": "Subject",
"value": "hello"
},
{
"name": "MIME-Version",
"value": "1.0"
},
{
"name": "Content-Type",
"value": "text/plain; charset=UTF-8"
},
{
"name": "Content-Transfer-Encoding",
"value": "base64"
}
],
"commonHeaders": {
"from": [
"test@XXXXXXXXXXXXXXXXXXX"
],
"to": [
"XXXXXX@XXXXXX"
],
"messageId": "XXXXXXXXXXXX-XXXXXXXXXXXX-XXXXXXXXXXXX-XXXXXXXXXXXX-XXXXXXXXXXXX",
"subject": "hello"
},
"tags": {
"ses:operation": [
"SendEmail"
],
"ses:configuration-set": [
"ses-log-test"
],
"ses:source-ip": [
"XXX.XXX.XXX.XXX"
],
"ses:from-domain": [
"XXXXXXXXXXXXXXXXXX"
],
"ses:caller-identity": [
"XXXXXXXXXXXXXXXXXX"
]
}
},
"send": {}
}
{
"eventType": "Delivery",
"mail": {
"timestamp": "2021-07-20T10:07:39.838Z",
"source": "test@XXXXXXXXXXXXXXXXXXX",
"sourceArn": "arn:aws:ses:ap-northeast-1:XXXXXXXXXXXX:identity/XXXXXXXXXXXX",
"sendingAccountId": "XXXXXXXXXXXX",
"messageId": "XXXXXXXXXXXX-XXXXXXXXXXXX-XXXXXXXXXXXX-XXXXXXXXXXXX-XXXXXXXXXXXX",
"destination": [
"XXXXXX@XXXXXX"
],
"headersTruncated": false,
"headers": [
{
"name": "From",
"value": "test@XXXXXXXXXXXXXXXXXXX"
},
{
"name": "To",
"value": "XXXXXX@XXXXXX"
},
{
"name": "Subject",
"value": "hello"
},
{
"name": "MIME-Version",
"value": "1.0"
},
{
"name": "Content-Type",
"value": "text/plain; charset=UTF-8"
},
{
"name": "Content-Transfer-Encoding",
"value": "base64"
}
],
"commonHeaders": {
"from": [
"test@XXXXXXXXXXXXXXXXXXX"
],
"to": [
"XXXXXX@XXXXXX"
],
"messageId": "XXXXXXXXXXXX-XXXXXXXXXXXX-XXXXXXXXXXXX-XXXXXXXXXXXX-XXXXXXXXXXXX",
"subject": "hello"
},
"tags": {
"ses:operation": [
"SendEmail"
],
"ses:configuration-set": [
"ses-log-test"
],
"ses:source-ip": [
"XXX.XXX.XXX.XXX"
],
"ses:from-domain": [
"XXXXXXXXXXXXXXXXXX"
],
"ses:caller-identity": [
"XXXXXXXXXXXXXXXXXX"
],
"ses:outgoing-ip": [
"XXX.XXX.XXX.XXX"
]
}
},
"delivery": {
"timestamp": "2021-07-20T10:07:45.460Z",
"processingTimeMillis": XXXX,
"recipients": [
"XXXXXX@XXXXXX"
],
"smtpResponse": "XXXXXXXXXXXX,
"reportingMTA": "XXXXXXXXXXXX.XXXXXXXXXXXX.ap-northeast-1.amazonses.com"
}
}
上記のログを見ると、SESのメール内容、つまりbody
部分がございません。
そもそもConfiguration set
場所で、body
の選択肢がございませんからです。
いつか選択できたらいいですね。
4.参考資料
公式サイト上の参考資料は下記となります。
この記事についてのご質問またはお困りのことがございましたら、お気軽にお問い合わせください。