Azure Websites を Node.js PaaS として使う

ここ最近、 Microsoft AzureWebsites (Web サイト) を Node アプリPaaSとして仕事、遊びでも活用しています。この記事で紹介していることは全て無料で期限なく誰でも試せますのでNode入門者にも超オススメです。

初見の方はこちらもどうぞ: Azure Websites が便利すぎて鼻血でる

Azure こわくない

  • 法人でないと使えない
  • 利用料金が高額
  • Windows が無いと/分からないと使えない

なんてイメージを抱きがちですが、そんな事ないです。Microsoftアカウントがあれば誰でも使えます。

Websites を制する者は Azure を制す (と思う)

とかよく勝手に言ってるのですが、何も考えずにWebアプリを仮想マシンでデプロイする前に胸に手を当てて数秒間考えて見て下さい。「それ、 Websites でできるよ」 という天の声が聞こえてくるかもしれません。

まあ実際、大抵のアプリが動くとても素敵なプラットフォーム。無理をすればたぶん何でも動きます。(無理をしてなんでも動かす競技をされている方がいらっしゃいます)

いかにして Azure Websites で Node が 動くか

とりあえず Azure Websites ではWebサーバーとして IIS が使用されているのはみなさんご存知の事だと思います。そして Node アプリを動かす時でも例外なく IIS が使われています。でも IIS の事はあまり気にせず、忘れてもらってもOKです。

ではどのようにして Node アプリが実行されるか、簡単に説明します。

まずは下記の図をご覧ください。 (かなり古い図ですがこちらより引用)

IIS のモジュール「 iisnode 」が重要なポイントとなります。

iisnode とは IISモジュールとして動作する Node のプロセスマネージャー実装です。 Node ベースのWebアプリを実行する際に非常に便利な仕組みを提供しています。

ご存じの通り Node は基本的にシングルスレッドでアプリを動作させます。そのため、Webアプリ等で非常にたくさんのリクエストを受けてしまったとき、処理効率が落ちてしまうことが考えられるため、そこそこの規模で実運用したい時等は、マルチプロセス実装が求められます。

ですが自力でのマルチプロセス実装は非常に面倒です。Webアプリを開発する場合はHTTPリクエストを安定して捌く実装をするだけでも大変です。

そんな時のための冴えた解決策があります。 Node アプリそのもののプロセスを管理、HTTPリクエストを良い感じに捌いてくれる iisnode に頼ってしまうのです。

そんなこんなで Azure Websites では Node を動かす仕組みとして iisnode が採用されています。このおかげで、Azure上では非常に快適に Node アプリを運用することができます。

実行環境に対応する

リッスンするポート番号は環境変数から取得する

var port = process.env.PORT || 8080;  

このように、 process.env.PORT にリッスンすべきポート番号が定義されていますので、対応します。

動作に必要なモジュール

  • package.json にsaveしておくと、Gitでデプロイしたときに自動でインストールされる。Gitを使わないのであれば、全てアップロードする。

Node アプリをデプロイする方法

1. Websites を新規作成

簡易作成またはカスタム作成で Websites を作成します。

※ カスタム作成で ソース管理から発行 オプションを指定して作成時にGitからデプロイを行ってしまう場合は、下の a) Gitを使ったデプロイ を先にお読みください。

構成設定画面アプリケーション設定セクションでNodeのデフォルトバージョンを指定できます。 WEBSITE_NODE_DEFAULT_VERSION0.10.29 にするなど。

2. デプロイ

a) Gitを使ったデプロイ

以下のいずれかの用意をしてからリモートリポジトリに push します。

  • server.js という名前のサーバーアプリを作成またはエイリアス
  • package.json をリポジトリのルートに作成し、実行すべきサーバーアプリを "main": "index.js" といった具合で指定

push ログを確認すると Web.config を自動生成する旨が確認できます。もし Web.config が自動生成されなかった場合は下の b) FTP等を使ったデプロイWeb.config のスニペットを紹介していますので参考にして作成してください。

b) FTP等を使ったデプロイ

  • Web.config というIISの設定ファイルをwwwルートディレクトリに作成しておく必要があります。
  • 動作に必要なモジュールも自力でアップロードしてください。
  • index.js の部分は環境に合わせて置換してください。
  • handler と rewrite ルールを増やすと1サイトで複数の Node アプリを実行することができます。

Node な人におすすめ

なにより楽です。ウェブニウムでは実際に商用環境として活用しています。

参考