🎉

SendGridのEmailActivityをCloudWatchLogsに保存して、CloudWatchLogsInsightsで分析する

2022/04/29に公開

前置き

SendGrid の EmailActivity はアドオンを利用しても最大30日の期間しか利用できません。
対策としては、Event Webhookを利用してイベントデータをPOSTし、データ蓄積する仕組みを自身で構築する必要があります。例えばクラスメソッドの記事では、Lambda+APIGateway+S3+Athenaの組み合わせで実現しています。
https://dev.classmethod.jp/articles/query-sendgrid-email-activity-by-athena/

2022年4月頃にLambdaが、HTTPSエンドポイントを介して利用できるようになったので、API Gatewayを利用しなくても実現できるようになりました。
https://aws.amazon.com/jp/about-aws/whats-new/2022/04/aws-lambda-function-urls-built-in-https-endpoints/

やりたいこと

・EmailActivityのイベントを永続的に保持したい
・イベントを分析したい

設定してみる

Lambda

Lambdaに関数URLの項目があるので、画面の指示に従って設定していきます。
作成し終わると、関数URLという項目が表示されているかと思います。

実行コード

exports.handler = function(event, context) {
    console.log(event["body"]);
};

sendgrid

下記の記事に従い、PostURLにLambdaで発行したURLを設定します。
https://sendgrid.kke.co.jp/docs/Tutorials/C_Manage_Events/using_event_webhook.html

CloudWatchLogs

Lambda > モニタリング > ログ > CloudWatchのログを表示を選択。

CloudWatchLogsのログはデフォルトでは、ログは無制限に保持され、失効しません。
なお保持期間はロググループ単位で設定できます。

ログの保持期間 – デフォルトでは、ログは無制限に保持され、失効しません。ロググループごとに保持ポリシーを調整し、無制限の保持期間を維持するか、1 日間~10 年間の保持期間を選択することができます。

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html

CloudWatchLogsInsights

CloudWatchのログを表示 > Logs Insightsで表示 を選択。

下記のようなサンプルクエリでイベントログを分析することができます。

fields @timestamp, @message
# see https://sendgrid.kke.co.jp/docs/Tutorials/A_Transaction_Mail/manage_bounces.html
# see https://sendgrid.kke.co.jp/docs/API_Reference/Webhooks/event.html#-Event-Types
| parse @message "[{*}]" as info
| parse info 'email":"*",' as email
| parse info 'event":"*",' as event
| parse info 'response":"*",' as response
| sort @timestamp desc
| display datefloor(@timestamp, 1h) as date, email, category, event, response

Discussion