こちらのサイトではDRUPAL10に関連する記事を掲載しています。



はじめに
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.参考資料
公式サイト上の参考資料は下記となります。

この記事またはDrupalに関するご質問がございましたら、お気軽にお問い合わせください。

