Queue をきっかけに動く処理
Azure Functions は、いろんなものをトリガーにして動かすことが出来ます。 トリガーのリストについては、以下のドキュメントに記載があります。
Azure Functions でのトリガーとバインドの概念
とりあえず、上記ページにあるようなキューにメッセージが追加されたらテーブルに出力するものを VSCode + node.js の環境で作ってみようと思います。
作業するにあたって、Queue Storageとテーブル ストレージのリファレンスページを開いてみておくとスムーズかもしれません。
関数を作成
では、node.js用の関数を作るために func new をターミナルで打ち込みます。言語は JavaScript で QueueTrigger を選択して Queue2Table という名前で作成してみました。
これで、入力が Queue Storage に関数が作られるので、これをベースに進めていきます。
とりあえず適当にこんな感じに function.json を編集してみました。
{"disabled": false, "bindings": [{"name": "input", "type": "queueTrigger", "direction": "in", "queueName": "myqueue-items", "connection": "StorageConnection"}, {"name": "output", "type": "table", "direction": "out", "connection": "StorageConnection", "tableName": "QueueMessage"}]}
connection に設定している StorageConnection は local.settings.json に以下のように設定しておきます。
{"IsEncrypted": false, "Values": {"AzureWebJobsStorage": "Functionが使うストレージの接続文字列", "AzureWebJobsDashboard": "Functionが使うストレージの接続文字列", "FUNCTIONS_EXTENSION_VERSION": "~1", "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING": "Functionが使うストレージの接続文字列", "WEBSITE_CONTENTSHARE": "なんか入ってるはず", "WEBSITE_NODE_DEFAULT_VERSION": "6.5.0"}, "ConnectionStrings": {"StorageConnection": "ここにストレージの接続文字列"}}
あとは、index.js を書くだけです。とりあえず入力をそのまま出すようにしてみました。
module.exports = function (context) { context.bindings.output = { PartitionKey: "Queue", RowKey: Date.now().toString(), Value: context.bindings.input }; context.done(); };
できたので以下のコマンドでテストしてみます。
func run -c 'Hello world'
こんな出力が出ました。
PS C:\Users\kaota\Documents\Visual Studio Code\Projects\funcedu> func run Que ue2Table -c 'Hello world' We need to launch a server that will host and run your functions. The server will auto load any changes you make to the function. Do you want to always display this warning before launching a new server [yes /no]? [yes] Response Status Code: Accepted
Storage Explorer を使ってテーブルを見てみるとデータが入っていました。OK。配備してみましょう。
func azure functionapp publish OkazukiNodeJSEdu
ストレージへの接続文字列を追加します。 ポータルで作成した Function App の名前を選んで(今回の場合は OkazukiNodeJSEdu)概要タブの構成済みの機能にあるアプリケーション設定を選びます。
見慣れた App Service のアプリケーション設定の画面が出てくるので、ここの接続文字列に StorageConnection という名前で適当な本番用ストレージへの接続文字列をカスタムで作ります。
Storage Explorer とか適当なツールを使って myqueue-items キューに適当な値を突っ込みます。そうすると、テーブルストレージに行が追加されるはずです。
割と簡単でしたね。