便利な機能は割と npm から入れることがあると思います。 そのやり方を試してみました。
Azure Functions の作業してるフォルダのルートで以下のコマンドを打ちます。
npm init
そして適当なパッケージをインストールします。 今回はなんでもいいので、CPUの状態を取ってくれるやつを試してみましょう。
npm install cpu-stats
そして、適当な関数を用意してこんな感じのコードにします。
var cpuStats = require('cpu-stats') module.exports = function (context, req) { cpuStats(1000, function(error, result) { if (error) { context.bindings.res = { status: 500, body: error }; context.done(); return; } context.bindings.res = { status: 200, body: result }; context.done(); }); };
そして、func runを使って実行してみます。 こんな感じの結果になりました。動いてますね。
PS C:\Users\kaota\Documents\Visual Studio Code\Projects\CICDFuncAppLab\AzureFunctionsLab> func run Echo NOTE: the 'func run' command only supports POST for HTTP triggers. For other verbs, consider a REST client like cURL or Postman. Response Status Code: OK [{"cpu":30.80708661417323,"user":23.129921259842519,"nice":0,"sys":6.1023622047244093,"idle":69.19291338582677,"irq":1.5748031496062991},{"cpu":10.826771653543307,"user":7.6771653543307092,"nice":0,"sys":1 .5748031496062991,"idle":89.1732283464567,"irq":1.5748031496062991},{"cpu":39.039039039039039,"user":28.128128128128125,"nice":0,"sys":10.910910910910911,"idle":60.960960960960961,"irq":0},{"cpu":18.7,"use r":15.6,"nice":0,"sys":3.1,"idle":81.3,"irq":0}]
では、Azureに公開しましょう。
func azure functionapp publish npmpackagelab
無事公開されたらポータルから動かしてみます。
動いてますね。めでたしめでたし。
とはなりません。今回ローカルのフォルダからコマンドでさくっと公開したときにnode_modulesフォルダがまとめてアップロードされたために動いたと思われます。Function Appのコンソールでdirコマンドを打ってみるとこんな感じの結果が得られます。
D:\home\site\wwwroot > dir D:\home\site\wwwroot Volume in drive D is Windows Volume Serial Number is 9E2F-1C0D Directory of D:\home\site\wwwroot 08/13/2017 12:45 PM <DIR> . 08/13/2017 12:45 PM <DIR> .. 08/13/2017 12:46 PM <DIR> Echo 08/13/2017 09:46 PM 3 host.json 08/13/2017 12:46 PM 67,063 hostingstart.html 08/13/2017 12:46 PM <DIR> node_modules 08/13/2017 09:46 PM 311 package-lock.json 08/13/2017 09:46 PM 500 package.json 08/13/2017 09:46 PM 955 README.md 5 File(s) 68,832 bytes 4 Dir(s) 5,497,557,942,272 bytes free
ばっちりnode_modules入ってますね。
VSTSみたいなところからデプロイすると…
では、node_modulesフォルダは.gitignoreしてるようなVSTSのリポジトリからデプロイしてみましょう。
手順は以下に書いてあるので割愛します。
VSTS からデプロイした関数を実行してみると…
あれ…?動いた…
このページに
こういう記述があるので
package.json ファイルがアップロードされたら、Kudu リモート実行コンソールで npm install コマンドを実行します。 この操作によって、package.json ファイルに示されているパッケージがダウンロードされ、関数アプリが再起動されます。
てっきり自分でしないといけないと思ったのですが違うんですかね?
このページに書いてある
Azure App Service では package.json および npm-shrinkwrap.json ファイルが認識され、これらのファイルのエントリに基づいてモジュールをインストールできます。
これが働いてるんでしょうか。ちょっとAzure Functionsでの記述を見つけられない…もんにょり。