こんばんは、 @dz_ こと大平かづみです。
Prologue - はじめに
最近、 Azure Function Runtime 2.0 (beta) の JavaScript (Node.js) で、ローカルでコード書いて動作確認OK!いざ Azure にデプロイしたら動かない…って悩まされていました。
というのも、下記の更新のお知らせが来ていたのを、すっかり忘れていたのでした。
Azure Functions Runtime 2.0.12050-alpha の大きな変更について
その変更点の要約はこちらです。
- Extension の更新
- ローカル環境では、 Core Tooles (2.x) をアップデートするか、
func extensions install
で個別にインストールする - Azure 上では、Extension をインストールする(後述)
- ローカル環境では、 Core Tooles (2.x) をアップデートするか、
- 設定ファイル
hosts.json
の変更-
"version": "2.0"
が必要になる
-
- secret 情報が blob に保存されるようになる(自動移行)
- ひとつの Function App につき、単一の言語固定に
- これまでは複数のプログラミング言語が動いたが、単一に。
@TsuyoshiUshio@github 牛尾さんが、当該記事を和訳くださっていますので、参考になると思います。
Extension 更新の影響
さて、上記の変更のうち、割とダイレクトに影響するのが Extension の変更だと思います。
例えば、 Azure Sorage にかかわるトリガーやバインディング( blob, queue, table )を利用していて Azure にデプロイすると、新しい Extension がインストールされていない場合に下記のエラーが発生します。
Error:
Function (xxx) Error: The binding type(s) 'queue' are not registered. Please ensure the type is correct and the binding extension is installed.
Error:
Function (xxx) Error: The binding type(s) 'queueTrigger' are not registered. Please ensure the type is correct and the binding extension is installed.
Azure 上の Function に Extension をインストールする方法
こちらに公開されているアップデート手順によると、 kudu のコンソールを利用して Extension をインストール(再ビルド)するようです。
ですが、私が再作成した検証環境では、Node.js だからなのか、この手順にある bin
や extensions.csproj
がなかったので万全でもないようです。
ここで、試行錯誤の結果、 kudu を開かなくてもできる別の方法を見つけたので共有します。とはいえ、イレギュラーなやり方なので、今後は適切なアップデート方法が出るのではないかと思います。
手順
- Azure ポータルで、当該の Azure Function を開く
- ファンクションを新規作成する
- Queue trigger のテンプレートを選択する
-
Extension not Installed というメッセージとともに、 Microsoft.Azure.WebJobs.Extensions.Storage のインストールを促されるので、 Install をクリックする。
- インストールが終わったら、 x (閉じる)ボタンでブレードを閉じて構いません。
これで、上記のエラーは出なくなり、正常に動作するようになったと思います。
なお、 Integrate タブから、 queue などのトリガー、バインディングを追加しようとしても Extension のインストールを促してくれるのですが、失敗することもあるようですので、上記手順が今のところ確実でした。
Epilogue - おわりに
実は、ずっとこの変更点に気づいてなくて、ただひたすらデバッグして上記の方法を探り当てたのでした
Azure Functions で Node.js の新しめのバージョン使うときは 2.0 (beta)
が必須なので、はやく安定するのを期待しています!