ROMANCE DAWN for the new world

Microsoft Azure を中心とした技術情報を書いています。

Azure Functions で SendGrid の Event Webhook からの通知を受け取ってみる

Build 2016 報告会で LT した内容を記事にまとめておきます。
gooner.hateblo.jp
Azure Functions を利用して、SendGrid の Event Webhook から POST されたデータを受け取り、Azure DocumentDB に登録してみます。従来の方法については、過去の記事で書いていますので、Azure Functions との連携にポイントを絞ってまとめます。
gooner.hateblo.jp

Azure Functions を作成する

Azure ポータルから Azure Functions を作成します。テンプレートには、JavaScript の Generic - Webhook を使います。
Trigger の WebHook type を「Not a WebHook」に変更します。初期値の「Generic JSON」のままでは、SendGrid の Event Webhook の通知を受け取れずにかなり悩んだので、忘れずに変更しましょう。

f:id:TonyTonyKun:20160408185754p:plain

続いて、Output に Azure DocumentDB を設定します。Database と Collection がなければ作るように設定し、Azure DocumentDB を作成します。作成に数分かかるので、Azure DocumentDB のステータスが Online になるまで待ちます。

f:id:TonyTonyKun:20160408185836p:plain

最後に、POST された JSON データを Azure DocumentDB に Outputするように、コードを編集します。Document parameter name が「document」なので、bindings にリクエストのボディをセットするだけで OK です。

f:id:TonyTonyKun:20160408185857p:plain

Event Webhook から POST する URL を設定する

SendGrid のダッシュボードで、Mail Settings メニューから Event Notification を Enabled します。HTTP POST URL には、Azure Function Urlを設定します。送信に失敗したメールアドレスの情報を取得したいので、Dropped、Deferred、Bounced のアクションを設定しました。

f:id:TonyTonyKun:20160408185934p:plain

結果確認

存在しないメールアドレス(test@example.com)にメールを送信すると、Azure DocumentDB に JSON データが登録されます。Azure ポータルの Document Explorer から登録されたデータを確認できます。

f:id:TonyTonyKun:20160408190004p:plain

まとめ

今までなら、ASP.NET Web API を実装して、Azure DocumentDB にログを転送するコードを書いて、Azure Web Apps にデプロイする手間が必要でしたが、Azure Functions ならサーバーをデプロイする必要もないですし、僅か数行のコードを書くだけです。まだ Preview ですが、面白いサービスなので、これからも使っていきたいです。
最後に、本当は、Azure Functions のコードを C# で書きたかったのですが、Azure DocumentDB に上手く Output できず、仕方なく Node.js を使いました。C# で Output する方法も調べておきたいところです。