amazon EC2(amazon linux)でScala+Play framework の初期画面表示まで

(おことわり)
この記事は、弊社のOrganization を利用して、社内サービス開発にScala+PlayFrameworkを導入するにあたっての作業内容や試行錯誤を記録した連続投稿になります。
基本的には内容が正しく、かつ読み手に有益な情報になるように配慮しておりますが、どちらかと言えば 社内での情報共有 を主目的としているため、

- まとまりのない情報の羅列
- 正確に検証されていない情報
などを記載することもあります。予めご了承ください。

# これまでのあらすじ

- [第1回] [社内開発にScala+PlayFrameworkを導入したい](http://qiita.com/zaramme/items/e4f1b6b873a9978d46b0)
- [第2回] [Scala+PlayFramework 環境選定(Scala,Playのバージョン設定、開発環境やエディタの整備)](http://qiita.com/zaramme/items/d25d74921932a381f825)
- [第3回]　←いまここ

前回までは事前調査が多かったですが、ようやく手を動かす段階までたどり着きました。

# 初期設定

- AWSのマネジメントコンソールから、EC2のインスタンスを立ち上げる
  - 料金節約のため、t2/micro にしてみました。メモリが足らなくなりそうな不安がありますが、その時は作り直せばOKなので。

- `$ sudo yum update`実行したり ユーザーを追加したり
  - この辺はほかにいくらでもチュートリアルがあるので割愛

# Javaを8.0にバージョンアップ

amazon linux だと、初期状態ではOpenJDKの7が入っているようです。
PlayFramework2.5.xはJava8必須なので、バージョンを上げる必要があります。

```
$ java -version`
> java version "1.7.0_131"
```

なので、

```
##  古いバージョンを削除
$ sudo yum remove java-1.7.0-openjdk.x86_64`
##  新しいバージョンを入れる
$ sudo yum install java-1.8.0-openjdk-devel
```

でJava8を入れ直します。

```
[ec2-user@ip-10-0-0-165 ~]$ java -version
openjdk version "1.8.0_121"
OpenJDK Runtime Environment (build 1.8.0_121-b13)
OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)
```

入りました。  :ok_hand: 

# Scalaをダウンロード

[Scalaの公式ダウンロードページ](https://www.playframework.com/download)みると、いろいろありますね・・・。

> ・Download a starter project (for newbies)

「for newbies」に若干煽りを感じながらも、コメントとかがいろいろ入っていて便利らしいので、これを選択します。

>you download and unzip the .zip file below, you'll see the sbt file -- this is a packaged version of sbt, the build tool that Play uses.

なにやら`sbt` コマンドで実行できるらしいとのこと。事前調査ではPlayFrameworkは `Activate`コマンドで実行するという話を聞いていたので、「これってPlay本体？それともサンプルパッケージ的な何か？」と若干わからない感が出たのですが、とりあえずやってみる、の意識で。

```
$ wget https://example.lightbend.com/v1/download/play-scala
$ unzip play-scala
```
。
としたら

```
checkdir error:  play-scala exists but is not directory
```

の嵐が。どうやら解凍後のディレクトリ名も`play-scala`で、元のzipファイルと衝突しているみたいです。

```
$ mv play-scala play-scala1
$ unzip play-scala1
```

とかで適当に解決しました。

# sbtコマンド実行(魔の15分間)

公式の通りに、 

```
$ ./sbt run
```

を実行。なにやらコンパイルっぽいものがごりごり動きます。

ごりごり動きます。

ごりごり・・・あれ、長くね？？？

そもそも`$ ./sbt run`で最終的にどうなるのかもわからない状況で、ひたすら待ち続けること**15分**。
「Scalaのビルドは遅い」と聞いていたけど、まさかこれほどまでとは・・・。それともお金をけちってmicroったのが足りなかったのでしょうか。k

```
--- (Running the application, auto-reloading is enabled) ---

[info] p.c.s.NettyServer - Listening for HTTP on /0:0:0:0:0:0:0:0:9000

(Server started, use Ctrl+D to stop and go back to the console...)
```

やっと終わったぽいです。 `$ ./sbt run`でサーバーの起動までやってくれるんですね。
ポート9000はセキュリティ設定で空いていないので、EC2のコンソールから開けます。
(本当はサーバー側で80ポートの接続を9000番にフォワーディングする方が正統派ですが、めんどくさがりました :money_mouth: )

ポート開放を設定して、
http://(Global IP):9000/
にブラウザでアクセス・・・

![スクリーンショット 2017-02-18 17.53.09.png](https://qiita-image-store.s3.amazonaws.com/0/48843/2f78d8a9-2c2e-2eb0-38e0-d6c01efbbe17.png)

見えました！

そして、ページの説明を見てみると

>Need to connect to a database?
>Is this your first time?
>--- If you're not already using it, check out Activator. If you start the Activator UI, by running:

などなど、結構いろいろとチュートリアルが書いてあります。先ほど懸念していた「Activator使わないの？」問題もきっちりフォローしてくれて、結構親切な印象です。（Activatorは、sbtをラップしてくれる実行ツール、という位置づけらしいです）

とりあえずはこの説明に従っていけば、最低限の設定は進められそうですね！
newbieにも優しいフレームワークです :innocent: 

ちなみに、2回目以降の`./sbt run`での起動に関しては、時間がかかるということはないみたいです。（心底ほっとした）

# (ちょっとハマった)サーバープロセスを切る時

サーバープロセスを起動している時は
```
(Server started, use Ctrl+D to stop and go back to the console...)
```
と出ている通り、 `Ctrl+D`を押せば切れるのですが、　これに従わずに、

- `Ctrl+c` で強制終了
- `ctrl+z` で止めて `bg`

とかをやろうとすると、プロセスが残ってしまうみたいです・・・。
この状態で再度 `./sbt run `をすると、9000ポートが埋まっているとか、`Cannot allocate memory`とめっちゃ怒られてしまいます。

そんな時は、`ps`で `java`プロセスを探して、`kill -9 [プロセス番号]`で大丈夫です。

復帰はできるのですが、バックグラウンドで実行したい時の方法はわからず・・・。（`./sbt run&`もダメでした）
この辺りはActivatorを導入するとできそうな気もするので、深追いしないでおきます。

無事HelloWorldができましたので、次回はActivatorの導入やDB接続など、実践的な設定をしていきたいと思います。












```