Amazon LightSailでお手軽にNode.jsを走らせてみた

はじめに
----
AWS re:Invent 2016でAmazon LightSailが発表された。
$5/monthからVPSが使えるとのことで、早速インスタンスを立ててNode.jsでHello,worldしてみた記録。

Let's get started
----
マネジメントコンソールを開き、サービスからLightsailをクリック

![スクリーンショット_2016-12-01_9_19_25.png](https://qiita-image-store.s3.amazonaws.com/0/116906/380e9a55-cb64-e193-1efa-573c08a6b688.png)

新キャラ登場。Let's get startedをクリックすると、そのままLightsailインスタンスの新規作成画面が開く。

![スクリーンショット 2016-12-01 9.19.48.png](https://qiita-image-store.s3.amazonaws.com/0/116906/7e6a1d4e-2940-a007-9ff4-143a2f8ff2f6.png)

イメージ選択
----
まずは作成するインスタンスのイメージ選択。各種アプリケーションがインストール済みの「Apps + OS」とOSのみの「Base OS」がある。WordPressやLAMPスタックといったWeb環境から、GitLabやRedmineなどの管理系も用意されている。デフォルトではWordPressが選択されているが、今回はNode.jsでやってみる。

![スクリーンショット 2016-12-01 9.22.26.png](https://qiita-image-store.s3.amazonaws.com/0/116906/da0c1a67-a11d-8ea5-3995-4eed3411e815.png)

ちなみに、公式ブログ([Amazon Lightsail – AWSの力、VPSの簡単さ](https://aws.amazon.com/jp/blogs/news/amazon-lightsail-the-power-of-aws-the-simplicity-of-a-vps/))には
> 好きなオペレーティングシステム(Amazon Linux AMI,Ubuntu,CentOS,FreeBSD,Debian)、開発環境(LAMP, LEMP, MEAN,Node.js)やアプリケーション(Drupal,Joomla,Redmine,GitLabなど)を立ち上げることができます。

とあるが、現時点ではBase OSを選ぶとAmazon LinuxかUbuntuしか選べない。慣れの問題があるので、Cent OSが使えるようになるとうれしいところ。

![スクリーンショット 2016-12-01 9.26.30.png](https://qiita-image-store.s3.amazonaws.com/0/116906/5b26b998-ed27-7e2f-7f76-62838c084bad.png)

料金プラン
----
続いて料金プランの選択。スペック的には安い方からt2.nano、t2.micro、small、medium、largeといった感じ。$5/monthのプランは最初の一ヶ月(750時間)が無料になるので、とりあえず使い勝手を試すならこのプランでいいと思う。
リージョンはいまのところバージニア(us-east-1)しかないのでそのまま。

![スクリーンショット 2016-12-01 9.27.02.png](https://qiita-image-store.s3.amazonaws.com/0/116906/a62ea875-f263-69e7-4eb0-d99edc45a1db.png)

インスタンス作成
----
最後にインスタンスの名前と数量を選ぶ。デフォルトで「<イメージ名>-<スペック>-<リージョン>」な感じの名前が入力されているので、そのままCreate。

![スクリーンショット 2016-12-01 9.29.16.png](https://qiita-image-store.s3.amazonaws.com/0/116906/6403dcc2-2efc-a37b-5cab-a12da99c1c35.png)

リソース一覧画面
----
インスタンスの作成が始まると自動的に飛ばされる。インスタンスの管理や新しいインスタンスの追加はこの画面から行う。

![スクリーンショット_2016-12-01_9_29_48.png](https://qiita-image-store.s3.amazonaws.com/0/116906/76488341-d129-8d55-3404-921bb23df2e7.png)

インスタンスが動き出すと左下のステータスがPendingからRunningになって、アイコンに色がつく。Createを押してからRunningになるまでの時間は10秒くらい。

![スクリーンショット_2016-12-01_9_31_08.png](https://qiita-image-store.s3.amazonaws.com/0/116906/f7cca4df-fb8f-7f01-0fbe-b2c86ec12ad2.png)

インスタンス詳細画面
----
リソース一覧でインスタンス名をクリックすると、インスタンスの詳細が出てくる。インスタンスの停止・再起動、ブラウザ経由のコンソールなどVPSによくある機能は一通り揃っている感じ。この時点でグローバルIPが割り当てられているので、インターネットからアクセスできる。

![スクリーンショット_2016-12-01_9_32_05.png](https://qiita-image-store.s3.amazonaws.com/0/116906/a9431913-f4cd-7687-d9df-bcbc0035a38e.png)

ファイヤウォールはデフォルトでSSH(22)・HTTP(80)・HTTPS（443）が開いていた。この後Node.jsを動かすので、追加で3000番も開けておく。

![スクリーンショット 2016-12-01 9.51.46.png](https://qiita-image-store.s3.amazonaws.com/0/116906/88252df0-3f07-30f1-0244-1add82e09b9f.png)

ブラウザコンソール
----
インスタンス詳細画面の「Connect using SSH」というオレンジのボタンを押すと、別ウィンドウでコンソールが開く。

Node.jsのイメージではUbuntu 14.04.5 LTSが使われていた。基本的にAmazon Linuxだと思っていたのでちょっと意外。あと、OSのタイムゾーンがGMTになっているのでログとか漁るときは意識したほうがいいかもしれない。
![スクリーンショット_2016-12-01_9_39_46.png](https://qiita-image-store.s3.amazonaws.com/0/116906/d1af3273-1895-612b-81fe-69fe6b924253.png)

太平洋の反対側なのでラグはそれなりにあるが、いきなり反応しなくなってコマンド入力にストレスが溜まるといったことはなかった。ログインしているユーザで`sudo`も使える。ただ、コンソールの文字が妙に大きく、しかもブラウザの縮小表示が効かないのでちょっとしたメンテナンス以上のことをやるならSSHクライアントを使ったほうが良い。

Hello, LightSail
----
あとはサーバを書いて、`node hello.js`で動かす。

```js:hello.js
const http = require('http');
http.createServer((req, res) => {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('hello, lightsail\n');
}).listen(3000);
console.log('Server running at http://localhost:3000/');
````

ブラウザで`http://<インスタンスのグローバルIP>:3000`を開くと、ちゃんと見える。

![スクリーンショット 2016-12-01 9.54.19.png](https://qiita-image-store.s3.amazonaws.com/0/116906/575f31d2-2407-c7a9-fcba-927d1409a82b.png)

まとめ
----
* EC2だと、ちょっとした環境立てるだけでもインスタンス立てて、Elastic IP貼って、セキュリティグループ設定して…という感じでやることが多い
* 売り文句通り、LightSailはそのあたりの細かいことを自動でいい感じにやってくれる
* 開発とかお遊びでちょっとインターネットから見えるサーバが欲しいときにはいいのではないか(もちろんセキュリティの設定は必要だけど)
* ap-northeast-1にも来て欲しい
  * (2017/5/31追記)[東京リージョンでもLightsailが使えるようになりました](https://aws.amazon.com/jp/blogs/news/amazon-lightsail-tokyo-region-launch/)