azure functionsでnode.jsアプリケーション開発

2017/02/07

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リクエストからトリガーを起動させてもいいのですが、ポータルでテスト実行できます(以下画像参照)ので、簡単に動かすだけなら、そこからでも良いです。
function_http_trigger

動かすだけなら以上で終わりです。
※実行ログが表示されない、という場合はqiitaに書きましたこちら参照下さい。

ローカル開発環境

しっかり開発するにあたっては、毎回ポータル上のソースを修正&実行するのは手間ですので、ローカルで開発できる環境を整えます。
これもQiitaに投稿しましたので、参照下さい。

補足:環境変数

App Serviceの変数設定、というところから環境変数を設定でき、process.env.○○で参照可能です。
例としては、

  • キー名:KEY_NAME
  • 値:hogehoge

とすると、

console.log(process.env.KEY_NAME);
// hogehoge

// ※functions上だと
context.log(process.env.KEY_NAME);
// hogehoge

となります。

env_variable

これらの設定系の値は、リソースマネージャというサービス(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起動を止めることができます。

おまけ終わり。