3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Check! Azure Functions 2.0 (JavaScript) で binding extension がインストールされていないエラーの対処(暫定)

Last updated at Posted at 2018-09-04

こんばんは、 @dz_ こと大平かづみです。

Prologue - はじめに

最近、 Azure Function Runtime 2.0 (beta) の JavaScript (Node.js) で、ローカルでコード書いて動作確認OK!いざ Azure にデプロイしたら動かない…って悩まされていました。

というのも、下記の更新のお知らせが来ていたのを、すっかり忘れていたのでした。

image.png

Azure Functions Runtime 2.0.12050-alpha の大きな変更について

その変更点の要約はこちらです。

  • Extension の更新
    • ローカル環境では、 Core Tooles (2.x) をアップデートするか、 func extensions install で個別にインストールする
    • Azure 上では、Extension をインストールする(後述)
  • 設定ファイル 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 だからなのか、この手順にある binextensions.csproj がなかったので万全でもないようです。

ここで、試行錯誤の結果、 kudu を開かなくてもできる別の方法を見つけたので共有します。とはいえ、イレギュラーなやり方なので、今後は適切なアップデート方法が出るのではないかと思います。

手順

  1. Azure ポータルで、当該の Azure Function を開く
  2. ファンクションを新規作成する
    image.png
  3. Queue trigger のテンプレートを選択する
  4. Extension not Installed というメッセージとともに、 Microsoft.Azure.WebJobs.Extensions.Storage のインストールを促されるので、 Install をクリックする。
    image.png
  5. インストールが終わったら、 x (閉じる)ボタンでブレードを閉じて構いません。

これで、上記のエラーは出なくなり、正常に動作するようになったと思います。

なお、 Integrate タブから、 queue などのトリガー、バインディングを追加しようとしても Extension のインストールを促してくれるのですが、失敗することもあるようですので、上記手順が今のところ確実でした。

Epilogue - おわりに

実は、ずっとこの変更点に気づいてなくて、ただひたすらデバッグして上記の方法を探り当てたのでした :flushed:

Azure Functions で Node.js の新しめのバージョン使うときは 2.0 (beta) が必須なので、はやく安定するのを期待しています! :sparkles:

3
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?