よかろうもん!

アプリからインフラまで幅広くこなすいまどきのクラウドエンジニアが記す技術ブログ

OpsWorksでNodejsアプリを動かす上で知っておきたいこと 〜その壱〜

これまでOpsWorksでRailsアプリケーションを動かす上での注意事項を紹介してきましたが、今日はNodejsアプリケーションをOpsWorksで動かすときのポイントを紹介します。

まずはNodejsを動かす上での最低限の要件がこちらです。

  • メインファイルの名前は server.js
  • expressで動かす場合は package.json が必要
  • 80 or 443 で Listenする必要


この要件を満たしておけば、あとはウィザードに従ってアプリケーションをサーバにデプロイするだけで簡単に動かせます。いやー、実にラクチンですね。

ただ、nodejsで https を require して443ポートで動かそうとする際は注意が必要です。

443ポートでListenしていても、プロセス監視のMonitが http://127.0.0.1:80/ を監視しています。



最新のtemplateはこちらをご確認ください


そのため、443番ポートで Listen している場合でも、ヘルスチェック用に80番ポートで HTTP STATUS 200 を返すようにしなければなりません

443ポートでListenしているだけでも Nodejs は動作しますが、定期的に Monit が node のプロセスをリスタートしているため確立したコネクションがその都度リセットされてしまいますので。
定期的にリスタートされていることには気づきにくいので、NodejsをHTTPSで運用する際は一度サーバ内部で確認しておきましょう!


ここからは未検証の話ですが、Appの設定で SSL Settings を有効にした場合でも、Monitの監視設定は変更されず同様の事象が発生する可能性があるかもしれないので、HTTPSで受け付ける際はご注意ください。

また、aws/opsworks-cookbooks · GitHub を眺めていたところ、Appの設定で SSL Settings を有効にしても、JSONパラメータとしてはサーバに渡されますが、NginxやApacheで443で受け取ったり、自動的にserver.js にHTTPS化のための設定が挿入されたりするわけではなさそうです。なので、 SSL Settings を有効にしても実際はSSL化できないのではないかと思われます(未検証です)。この点については本ブログを見て頂いているAWSの中の人教えてください!
もし間違ってたらゴメンナサイ。前もって誤っておきます。。。



現状、OpsWorksのNodejsアプリケーションでは、NODE_ENVが指定できず、stagingとproductionで振る舞いを変えたりすることができないので、明日はそれを簡単に実現するための方法をご紹介しようと思います。