AzureEventGridを試してみる
AzureのEventGridを使用してメッセージング機能を実装してみました。
全体の構成
AzureFunctionに関数を作成する
Portalで関数アプリを開いて作成をクリック
ポータルでの開発を選択してテンプレートにEventを入力するとEventGridトリガーのテンプレートが表示されるので、選択します。テンプレートを使用すると接続設定等記載が不要なのでとても楽です。
ここでは2つFunctionを作成しておきます。
ちなみにデフォルトだと下記のようなFunctionコードで作成されます。
イベント種類とイベントデータをログに出力するだけのコードですが、今回は動作を確認するだけなのでこのままでOKです。
module.exports = async function (context, eventGridEvent) {
context.log(typeof eventGridEvent);
context.log(eventGridEvent);
};
EventGridリソースを作成する
EventGridにはいくつか種類があるようです。
Azureサービスイベント>システムトピック
Azureリソースで発生したイベントを購読するトピック。
例えばAzureStorageAccountにBlogが追加された場合のイベントを購読するトピック等はここに作成する。
システムトピックブレードから作成することもできるし、各種Azureリソースのイベントブレードから作成することも可能。
カスタムイベントトピック
これらはAzureリソースではなく、エンドポイントでイベントを購読する。
エンドポイントはトピック単位で作成される(トピックエンドポイント)。
https://{トピック名}.japaneast-1.eventgrid.azure.net/api/events
今回はローカルのNode.jsでEventを発行するため、カスタムイベントトピックを使用します。
サブスクリプションとリソースグループを指定して、適当な名前でトピックを作成します。
EventGridでサブスクリプションを作成する
作成したFunctionにEventを配信するために、適当な名前でサブスクリプションを作成します。
サブスクリプションはイベントを配信する先の数だけ作成する必要があるため、今回はFunction2つに配信するので2つ作成します。
トピックにイベントを発行する
イベント発行に必要なパラメータを準備する
トピックでアクセスキーブレードを開きキーをメモします。
トピックで概要ブレードを開き、トピックエンドポイントをメモします。
イベント発行用プログラムを作成する
下記プログラムを作成してnode.jsで実行します。
const {
EventGridPublisherClient,
AzureKeyCredential,
} = require("@azure/eventgrid");
const uuid = require("uuid").v4;
const client = new EventGridPublisherClient(
{トピックエンドポイント},
"EventGrid",
new AzureKeyCredential({アクセスキー})
);
const events = [
{
id: uuid(),
subject: "Test",
dataVersion: "1.0",
metadataVersion: "1",
eventType: "test",
eventTime: new Date().toISOString(),
data: {
message: "Hello World!",
},
},
];
client
.send(events)
.then(() => {
console.log("publish succeeded");
return Promise.resolve();
})
.catch((err) => {
console.log("publish failed.");
console.log(err);
});
node index.js
publish succeeded
FunctionのApplicationInsightsで関数1,2に対してEventGridトリガーが実行されていることが確認できました。
感想
お手軽にメッセージング機能を実装することができ、メッセージをブロードキャストすることもできるので色々な使い方がありそうです。
また、Basicプランであれば月10万操作まで無料なので個人使用であれば料金は殆ど気にする必要もなさそうです。
Discussion