SendGridのイベントデータをMongoDBにストアする方法

SendGridのイベントデータをMongoDBにストアする方法

この記事は Use a Mongo REST Interface to Store SendGrid Event Data の抄訳です。

SendGridで最も使える機能の一つはEvent Webhookかもしれません(もちろん、メール送信機能を除いてですが)。この機能はメールの送信、開封、迷惑メール報告、クリックなどのイベントを通知してくれます。通知されたデータは、ストアして分析することで真価を発揮します。これには、Keen.ioのようなサービスを利用したり、自分自身でストア(少し手間がかかりますが)することで実現できます。

Event WebhookはJSON形式のデータを任意のURLにPOSTします。まるでMongo RESTインターフェイスのための機能みたいですね!

MongoにはいくつかのコミュニティベースのRESTfulインターフェイスとホスティングサービスがあります。今回はこのうちいくつかをご紹介しますが、Mongoにデータをストアする方法は他にもたくさんあります。

※最小限の設定ですぐにイベントデータをストアする方法についてはmLabの箇所をご覧ください。

Python(自己ホスティング)

KuleはPythonベースのMongoのRESTインターフェイス実装です。

Kuleは/{collection}(例:/sendgrid)へのPOSTリクエストを受け付けます。自身でKuleとMongoをインストールして起動したら、Event Notification(SETTINGS > Mail Settings配下で見つかります)の設定をそのMongoのコレクションURLにPOSTするよう設定変更するだけです。

基本的な設定はこれだけですが、本格的に利用する際には次のことにも気をつけてください。

  • ストア先のデータベースとコレクションが作成されているか?もしくは、エラーが発生していないか?
  • データベースへのアクセス制御設定は適切か?
    Kuleの初期設定はオープン状態です。これはそのデータベースに誰でもアクセスできることを意味しています。Kuleでは簡単にアクセス制限をかけることができます。

mLab(クラウドプロバイダー)

REST APIを提供するMongoクラウドプロバイダーmLab(2016/2/29にMongoLabはmLabになりました)だけではありませんが、Event WebhookのデータをすぐにストアできるAPIを持つプロバイダーはmLabだけです(2014年1月現在)。

mLabにデータをストアする設定手順をご紹介します。

  • mLabにサインアップしてアカウントを作成(無料)します。

    mLab1

  • ログインして適当な名前のデータベース(Sandboxプラン)とコレクションを作成します。

    mLab_2

    mLab_3

  • APIキーを確認します。

    mLab_4

    mLab_5

  • Event Notificationの設定を変更します。

    SendGridのSETTINGS > Mail Settingsの「Event Notification」をACTIVEにして「HTTP Post URL」にmLabのコレクションURLを設定します。データベース名、コレクション名、APIキーは上記で作成・確認したものに置き換えてください。

    https://api.mlab.com/api/1/databases/<データベース名>/collections/<コレクション名>?apiKey=<APIキー>
    

    ※参考※ mLab公式ドキュメント

    mLab_6

    設定したコレクションにデータがストアされていれば、設定は完了です。

まとめ

どのような方法でも構いませんが、SendGridのイベントデータをストアすることを強くお勧めします。イベントデータを分析するための最も詳細な方法だからです。今はそのデータを使うつもりがなくても、状況はいつ変化するかわかりません。コストはほとんどかからないので、そんな時に備えてデータをストアしておきましょう。

データのストアにMongoを選択した場合、mLabまたは、Heroku上で動作する任意のMongo RESTインターフェイスとMongoを組み合わせると、かなりの量のデータを無料でストアすることができます。

様々なユースケースの背景やインテグレーションの成功事例、技術概要については、Event Webhook Guide(英語)をご確認ください。

参考

以下の記事もあわせてご確認ください。

<Event Webhookの概要について>

<Event Webhookのイベントデータの保存/活用方法について>