AWS上の Node.js アプリケーションに HTTPS でアクセス可能にする

9月からのプロジェクトでは AWS を使っています。
今までインフラを扱ったことがほとんどなくて、AWS も今回初めてアカウントを作って恐々触っているレベルですが、タイトルのことは割とすんなりと。
ただやっぱりある程度インフラのことは気にする必要があって、改めて Heroku はおかん。

EC2 インスタンスに Node.js と npm をインストールする

公式のガイドを参考にインスタンスを起動
User Guide for Linux Instances

ssh でアクセスし、まずビルドに必要なライブラリをインストール

$ sudo yum update

$ sudo yum install gcc-c++ make
$ sudo yum install openssl-devel

GitHub からバージョン指定で clone してインストール
yum を使うと v0.10 系となるため、この方法を取っています

$ sudo yum install git

$ git clone --depth=1 -b v0.12.7 git://github.com/nodejs/node.git

$ cd node
$ ./configure
$ make
$ sudo make install

Amazon Linux は root のパスが特殊らしいので、以下の変更を実施

$ sudo su
$ visudo
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

続いて npm をインストール
Node.js の v0.12.7 にバンドルされているバージョンの npm をインストールし、npm コマンドでアップデートを行いました

$ git clone --depth=1 -b v2.11.3 https://github.com/npm/npm.git
$ cd npm
$ sudo make install
$ sudo npm update -g npm

How to install node and mongodb on Amazon EC2
上記のページを参考にしています。
nodebrew とかを使わなかったのは root のパスの問題と EC2 ならバージョンを上げるのならまた一から作るんだよね、というようなことを考えつつ。
この辺りの考え方はどうなのでしょうか、教えてえらい人。

ELB の作成と SSL 証明書の設定

ELB の作成と証明書の設定は公式のドキュメントの通りに
Developer Guide

SSL 自己証明書の作成

ELB に設定する SSL 自己証明書は、オレオレ証明書をopensslで作る(詳細版)を参考に。

以下のコマンドで秘密鍵、証明書署名要求ファイル、証明書を作成

$ openssl genrsa 2048 > server.key
$ openssl req -new -key server.key > server.csr
$ openssl x509 -days 3650 -req -signkey server.key < server.csr > server.crt

ELB の SSL Termination は、秘密鍵に鍵がついているとダメなのようなので、以下のコマンドで解除

$ openssl rsa -in server.key > server-released.key

AWS で設定する際は、PEM 形式じゃないとだめ。
openssl はデフォルトで PEM 形式で出力されるようなので、cat で秘密鍵と証明書の中身を表示して貼り付け。


インフラ初心者でもいちおうなんとかなるっぽい。
ただセキュリティグループとかどう整理すればいいのかはまだわからない。。
この辺りは多分技術書を読んだ方が早そう。