azure functionsでnode.jsを開発環境を整える手順をまとめておきます。
functionsとは
簡単にサービス紹介すると
- プログラム実行環境で、プログラムを置くだけで実行環境構築が不要
- AWSでいうlambda
- プログラムおく他に、trigger、input、outputを決める。triggerのみ必須。
- 対応言語:C#、php、node.js、Python、PowerShell、etc
- 2016/11/10 GA(general availability)
- Function App?表記の揺れ
- webjobというPaaSをベースに動いている
2016/11/10にGAになったばかりのできたてサービス。以前はFunction Appというサービス名だったようで、web上の情報にも表記のゆれがありますので、ご注意を。
ポータルからfunctionsを作成
プランは大きく2種類で(参考)
- 従量課金 ・・・トリガー時のみインスタンス起動。処理時間で課金。
- App Service・・・インスタンス常時起動。リソース利用時間で課金。
とあります。ドキュメントによると、しょっちゅう処理する場合はApp Serviceで、たまに処理する場合は、従量課金という使い分けになります。
で、注意として、従量課金は基本オートスケールなはずです。が、乗せるアプリケーションによってはスケールしない場合もあるようで、その場合は、App Serviceでそれなりのプランを選ぶ、という回避策になります。そちらの方が、インスタンスが常時起動している分、初期の起動が早いという特徴があります。
実行
functionリソースが作成されたら、ポータルから最初の実行できるとこまで確認します。
HttpTrigger -> 適当な関数名 -> triggerにhttp
以上の手順ですすめると、functionsの完成です。
実際にhttpリクエストからトリガーを起動させてもいいのですが、ポータルでテスト実行できます(以下画像参照)ので、簡単に動かすだけなら、そこからでも良いです。
動かすだけなら以上で終わりです。
※実行ログが表示されない、という場合はqiitaに書きましたこちら参照下さい。
ローカル開発環境
しっかり開発するにあたっては、毎回ポータル上のソースを修正&実行するのは手間ですので、ローカルで開発できる環境を整えます。
これもQiitaに投稿しましたので、参照下さい。
補足:環境変数
App Serviceの変数設定、というところから環境変数を設定でき、process.env.○○で参照可能です。
例としては、
- キー名:KEY_NAME
- 値:hogehoge
とすると、
console.log(process.env.KEY_NAME); // hogehoge // ※functions上だと context.log(process.env.KEY_NAME); // hogehoge
となります。
これらの設定系の値は、リソースマネージャというサービス(https://resources.azure.com/)で、APIから操作する場合は、リソースマネージャーを利用すれば可能です。
deploy
deploy方法について、こちらもqiitaに纏めております。
まとめ
azure functionsのnodes.js開発環境構築の解説でした。
おまけ
ドキュメントをざっと読むだけでは気づかなかったけど、知っておくべき機能をメモ。
host.json
host.jsonファイルで、function自体の設定値を管理しています。
https://github.com/Azure/azure-webjobs-sdk-script/wiki/host.json
timeout時間はここで設定できます。
ここはaws lambdaより優れている点かと思います。
funcitons.json
ポータルのGUIでtriggerや、outputを設定できますが、実質はfuntions.jsonを書き換えているに過ぎません。
そのfunctions.jsonには、ポータルからでは設定できない別のプロパティも用意されており、仕様はこちらに記載されています。
https://github.com/Azure/azure-webjobs-sdk-script/wiki/function.json
こちらを読んでもらうのが確実ですが、1つだけ紹介しておきます。
timer trigger のときのdisabled true
triggerにtimerを設定すると、いざ動作を止めたいときに、止める方法が見当たらず、わざわざfunctionsを削除してたりしました。
が、このdisabled というプロパティをtrueにすることで、trigger起動を止めることができます。
おまけ終わり。