AWS EC2でnodejsを使おうとした話(Express 4.x)

お仕事でいろんなマシンに案件によって環境構築することがあるんだけど、それローカルじゃなくてリモートでやったら自分で好きにサーバー立てれるじゃんそこに気がつくとはもしかしておれてんさいか…!!!ってなってやりはじめたら楽しかった。もちろん、そう上手くはいかなかったことは言うまでもない。ともあれ最近AWSが楽しくてコーディングそっちのけでやってる。楽しい。もはやHTMLとかCSS一行も書きたくないレベル。うそですごめんなさいやります。

とりあえずec2インスタンス立ち上げようと思ったけど、Amazonのアカウントが.co.jpアカウントと.comで全く別物だっていうことに気づくまで小一時間程悩み、みんな爆発すればいいのにと思いながらやっとコンソールにたどり着いて、適当な設定でLaunchしたはいいけど、セキュリティ絡みがややこしくてssh接続するのにまた小一時間悩み、やっと入れて、なんとかphpでwebページを表示することができた。
Amazon EC2 Linux インスタンスの使用開始

それからまた別のインスタンスを立ち上げてnodejsをぶち込み、ローカルから同期できるようにしたあと適当なExpress製のプロジェクトをアップして、リモートで走らせることに成功してテンションあがったけど、80番ポートで立ち上げるのに何故かsudo権限が必要で無理矢理やってしまって、どうも違う気がしたし、たぶんサーバー起動したときに自動で実行されるようにしないといけないんだろうなとか、deployしたタイミングで再起動するようにしないといけないんだろうなとか、めんどくせえわ!!!ってキレた。
Amazon EC2からnode.jsを使ってみる

それでもとりあえず出来たことに違いはないので、Twitterでこのちょっとした感動を垂れ流していたら、それを見た隣の大先輩から、「ついにかわさこくんもElastic Beanstalkを…」って言われたんだけど、「Elastic Beanstalkってなにwwwwwwwwwwwwwwwww豆wwwwwwwwwwwwwwww」っていう感じ(実際の心象と一部異なる)だったので、教えていただいたところ、Heroku的なことがAWSでできるよっていう話らしい。だがしかしHerokuも使った事がなかった。いや、もちろん存在は知ってたけど、使ったことないと実感がわかず、でもあんまり時間を取らせるのも申し訳ないと思って自分で調べたんだけど、いわゆるPaaSで前にやったnodejitsuみたいなやつかって思ったら理解した。
AWS Elastic Beanstalk(初心者向け 超速マスター編)JAWSUG大阪

話戻ってデプロイ問題や起動問題を解決しようと色々調べてたら、「よくわかんないとか言う雑魚は何も考えずEB使ってくださーいwwwアババwww」って言われてしまったので、聞いたばかりで使うことになるとは世界はよくできているなあと思いつつ、公式で落としてきて言われた通りパス通したのに動かない。なんでって思ったら、Pythonベースらしく、なんか依存してるパッケージが入ってなかったらしい。Pythonの開発環境とかなかったので、pipとかいうPythonのパッケージマネージャ入れて、pip install botoしたら、無事にebコマンドが動くようになった。ちなみにここ、この駄文の中で最初で最後唯一誰かの役に立つかもしれない一文だから。MacOS10.8だから。でも詳しいことはstack overflow見てください。
git aws.push: No module named boto

Express使ってる場合に注意するのが、どうもEB側で実行するメインjsの名前に優先度があるらしくて、npm startが割と後ろの方だから、Express4系みたいにapp.jsとか置いてあって、実際に実行するのはbin/wwwの場合とかは、自分で設定変えなきゃいけない。結局ローカルから設定かえられなくて、AWSコンソールのGUIから変えた。これ原因わかんなくて、凄い悩んだ。
502 Bad Gateway Deploying Express Generator Template on Elastic Beanstalk

そんなこんなでインスタンス立ち上がったんだけど、立ち上げる前にめっちゃいろいろ聞かれまくるし、なんかよくわからないものが一杯生まれるし、これはこれでめんどくせえなって思ったのでした。でもデプロイやらの問題はまだしも、サーバー監視とかバージョン管理とか、たぶん今回は頑張っても厳しいなあって事が色々あったので、とりあえず乗っかってみたいと思ってます。deployにものすごく時間がかかるのは、辛いです。でもひょっとして、EBからデプロイするとダウンタイムないのかな?まだまだ謎は多いです。

おしまい。