はまったりひらめいたり…とか…

Angularや.NETやAzureやその他色々。

Azure Web PubSub ServiceのイベントをトリガーにAzure Funcrtionsを実行する

はじめに

2021年7月時点の内容です。

また、AzureWebPubSubServiceはプレビュー版ということもあり

記載している画面やソースコードや設定内容は参照時点によっては異なっている可能性が高いので

参照される際はご留意ください。

今回は.NETラボのセッション資料中で時間の関係上セッションに落とせなかった部分のメモ書きをこちらに落としておきます。

基本などはイベントでお話しました。

まず基本的なところから抑えたいという方は、資料などをご覧いただければと思います。

PubSubイベントをトリガーにFunctionsを実行したい

Azure Web PubSub Serviceの設定

Azure Web PubSub Serviceで起きたイベントをFunctionsで処理したいと思います。

ドキュメントはこちらから確認できます。

Azure Web PubSub ServiceのSettingsから接続先のURLを指定することで

イベントをトリガーにFunctionsを実行できるようになります。

URLはFunctionsのExtensionを使う場合(エンドポイント + /runtime/webhooks/webpubsub)となります。

設定内容は大まかに下図のとおりです。

f:id:TakasDev:20210705220630p:plain

とりあえず動きを確かめたい程度なら、SystemEventsは何も設定しなくてOKです。

Azure Functionsの実装

NuGetでMicrosoft.Azure.WebJobs.Extensions.WebPubSubを取得します。

Functionsでは下記を実装することでメッセージの送信をトリガーにした処理が可能になります。

Hub=…で指定された箇所が上図のHub nameと対応する箇所です。

[FunctionName("<Function名>")]
public static async Task<MessageResponse> Broadcast(
    [WebPubSubTrigger(WebPubSubEventType.User, "message")] BinaryData message,
    [WebPubSub(Hub = "SampleHub")] IAsyncCollector<WebPubSubOperation> operations
)
{
    // なんやかんや
}

PubSubServiceで使用されるwsswss://<resource name>/client/hubs/<hub name>?access_token=...の形式で

↑のWSSで指定されるhub nameに対する通信のイベントがトリガーとなる。といった流れです。

System Eventsをトリガーにする

設定のSystem Eventsの各項目にチェックを入れた場合は下図のコードでトリガー実行可能となります。

WebPubSubTriggerの第3引数がそれぞれ、connect/connectedのいずれかになります。

チェックを入れた方(あるいは両方)を実装します。

[FunctionName("<Function名>")]
public static ServiceResponse Connect(
    [WebPubSubTrigger("SampleHub", WebPubSubEventType.System, "connect")] ConnectionContext connectionContext,
    ILogger log
)
{
  // なんやかんや
}

[FunctionName("<Function名>")]
public static async Task Connected(
    [WebPubSubTrigger(WebPubSubEventType.System, "connected")] ConnectionContext connectionContext,
    [WebPubSub] IAsyncCollector<WebPubSubOperation> operations
)
{
  // なんやかんや
}

気をつけなければならないこと

当然といえば当然なのですが、message含めSettingsでURLを指定した場合

トリガーで実行される関数がない場合エラーとなり、Connectやメッセージの送信が失敗するようになります。

さいごに

Azure Web PubSub Serviceで発生する各イベントをトリガーにFunctionsで実行することができ

Connect前後にフローを追加したり、Messageに情報を付加して返却したりなどが簡単にできるようになっていることが確認できました。

発表や今回の記事で使用したサンプルソースは下記となります。

github.com