AzureのサービスであるEvent Gridで自分が求めているような記事が無くて、
使い始めるまでにちょっと時間がかかってしまったので、
自分で書くことにしました。
1. Event Gridの使いどころ
こちらに公式の比較がありますが、Event GridはAzure Functionsと相性が良いサービスです。
クライアントから来るメッセージの順序性を保ったまま処理したいだとか、
ある程度来たメッセージをまとめて処理したいだとかそういう処理には向いていません。
来たメッセージの処理の処理順とかはどうでもいいけど、
メッセージが来た場合に処理する確実性を上げたいという場合に使うと良いです。
またクラウドで起きるイベントを取得する、ということも狙っているサービスだと思います。
というのも、Event GridはJSONでデータをやり取りするのですが、
そのフォーマットが他のクラウドと連携できるように策定が進んでいたり、
Azure内のイベントを取得できるようになっているからです。
クラウド間連携できるフォーマットをCloud Event Schemaと呼んでいて、
Azure内だけで通用するフォーマットをEvent Grid Schemaと呼んでいると理解しています。
2. Event Gridの使用法
Event Gridと名の付くものには、
Event Grid Topicと
Event Grid Subscriptionの2種類が存在します。
2-1. Event Grid Topicを作成して使う場合
Event Grid Topicを作成する場合は、Event Grid Topicにデータを発行して、
それをサブスクライブするという使い方をします。
このへんのソースコードを見るとわかりやすいのですが、
ポータルからトピックエンドポイントと、キーを引っ張ってきて、
スキーマに従ってJSONを作成すると、イベントが発行できます。
Service Bus Queue等と使い方が一緒なので分かりやすいですね。
2-2. Event Grid Subscriptionを作成する
こちらがメインの使い方だと思いますが、
クラウドで発生するイベントをサブスクライブするときに用いるのが、
Event Grid Subscriptionです。
こちらで、2-1.で作成した Event Grid Topicのイベントをサブスクライブしたり、
他のサービスのイベント(BLOBにファイルが作られた、など)をサブスクライブできたりします。
最低限
・どのようなイベントをサブスクライブするか
・どこにイベントを発行するか
を決める必要があります。
また、Event Grid Subscriptionは対応している各サービスからも設定ができます。
例えば、Azure Storage BLOB(v2)を選択すると、イベントという項目が現れます。
こちらからもEvent Grid Subscriptionが作成でき、
また、ここをクリックすると、
このサービスに紐づいているEvent Grid Subscriptionに何があるか確認できます。
2-3. Azure FunctionsのEvent Grid Trigger
Azure Functionsとの連携には、
①Event Grid SubscriptionのページからWebhookで設定する
②Azure FunctionsのページからEvent Grid Triggerを設定する
の2通りの方法があります。
両方とも選べる場合は、公式も薦めている②の方法を使うべきなので、
ここでは②の方法について書きます。
これは簡単で、Event Grid TriggerのFunctionsを作成すると、
Event Grid Subscriptionの追加、と出るのでこちらをクリックするだけです。
こうすることで、Event Grid Subscriptionと同じページが出て、
サブスクライバーが勝手にFunctionsになっている、ということになります。
また②の方法を取ると、
①の方法では必須となるEvent Gridがサブスクライバーを認証するための実装を省略できるので、
コードが綺麗になります。
ただし、Event Grid Triggerの実装が失敗しているコードの場合、認証エラーになります。
このあたりの話はまとめていつか書けたらなぁと思っています。
3. まとめ
Event Gridで自分にとって分かりにくかったところをまとめました。
世の中で記事書いている皆様はこんなレベルではつまずいていない空気を感じるので、
今回記事にしてみました。
私のようなレベルでつまずいてしまうような誰かの助けになれば幸いです。
ずさずさ
最新記事 by ずさずさ (全て見る)
- Azure Functions V1を使う - 2019年1月6日
- EventGridの使用を始めるときにつまずいたところ - 2018年12月2日
- サーバレス周りの話 - 2018年9月17日