Cloud9のワークスペースをEC2に作って爆速開発環境構築


![cloud9_www.png](https://qiita-image-store.s3.amazonaws.com/0/143591/704c5cb2-e106-508e-369e-538d96dc297f.png "cloud9_www.png")


Cloud9がAmazonに買収されて早数ヶ月。もう少しするとEC2専用のサービスが登場しそうですね。 現状のままでも、Cloud9とEC2を連携して、かなりシームレスな開発ワークフローが構築できますので、参考までにご紹介します。

# 前提条件

## EC2インスタンス

SSHで接続できるインスタンスを用意します。今回はJetwareアプライアンス「[Optimized LAMP Stack PHP 5.6](https://aws.amazon.com/marketplace/pp/B01LXDV315)」(Amazon Linuxベース)で起動したLAMP環境のインスタンスを使います。Jetwareアプライアンスを使ったインスタンスの作成方法に関しては、以下の記事をご参照ください。

・[JETWAREでラクラクLAMP環境構築(AWS&ローカルPC)](http://qiita.com/teekay/items/725a09a65aeaacf2e2ef)

## cloud9のアカウント

Cloud9のアカウントが必要です。そして、これが肝かつこの話の全てなのですが、Individual以上のプランの購入($19/month)が必要です。 そうです。快適な環境を得るには、相応の対価を払う必要があるということです。。。

ですが、チームで使う場合は、１つのアカウントだけ購入していればOKです。Cloud9にはコラボレート機能があるので、メンバーアカウントを招待することで、他のメンバーも恩恵に預かれます。 そう考えると結構お得だと思います。AWS案件のサーバ運用費として$19/monthを追加計上してもらうよう、ぜひ決裁者に上申してみてください。

![cloud9_price.png](https://qiita-image-store.s3.amazonaws.com/0/143591/9df91dbf-c7ed-a688-40ae-d1589dd7be99.png "cloud9_price.png")

ここからはIndividualアカウントにアップグレードした前提で、話を進めます。

# EC2インスタンスに公開鍵を追加

Cloud9からSSH接続を許可するため、公開鍵を追加します。
まずは、Cloud9のメニューから「Account Settings」を選択し、設定画面に遷移します。

![cloud9_settings.png](https://qiita-image-store.s3.amazonaws.com/0/143591/fad665b5-ac5b-8a75-6a47-05361d55ff50.png "cloud9_settings.png")

メニュー「SSH Keys」の中にある公開鍵をコピーして、EC2インスタンス側のユーザの~/.ssh/authorized_keysファイルに追加（なければ新規作成)します。Terminalで接続して、お好みのエディタを利用してください。ここではviを使って編集します。

```bash:authorized_keysを編集
$ vi ~/.ssh/authorized_keys
```

viで開いたら、「o」キーを押してAppendモードにしてから「⌘+v」で貼り付けます。貼り付けが完了したら「ZZ(大文字)」で保存終了。
![ec2_terminal.png](https://qiita-image-store.s3.amazonaws.com/0/143591/b9ac9094-fc4f-d3a4-6bc8-b2aa48a32290.png "ec2_terminal.png")



これで、Cloud9から接続する準備ができました。

# 必要パッケージのインストール

今回利用したAMI「[Optimized LAMP Stack PHP 5.6](https://aws.amazon.com/marketplace/pp/B01LXDV315)」(Amazon Linuxベース)だと、node.js(0.6.16以降)やglibc-staticなどのパッケージを追加インストールする必要がありましたので、yumでインストールしておきます。

```bash:node.js関連パッケージのインストール
$ sudo yum install epel-release
$ sudo yum install nodejs npm --enablerepo=epel
```

```bash:glibc-staticのインストール
$ sudo yum install glibc-static
```

これらのパッケージがインストールされていない場合は、このあとの手順で、/usr/bin/nodeが見つからない、cursesが見つからない等のエラーがでて、ワークスペースの作成が失敗しますので、ご注意ください。

# ワークスペース作成

Cloud9にログインして、ダッシュボードからワークスペースを作成します。「Creat a new workspace」をクリック。

![cloud9_newworkspace.png](https://qiita-image-store.s3.amazonaws.com/0/143591/43da7abe-a024-82e9-9de0-1c51ce9ebae0.png "cloud9_newworkspace.png")

画面中段のタブから「Remote SSH workspace」を選択し、必要事項を入力します。

![cloud9_create_newworkspace.png](https://qiita-image-store.s3.amazonaws.com/0/143591/d0dd702f-19fb-3c25-4d9f-d14ef73bb4b8.png "cloud9_create_newworkspace.png")

- Workpace name: 英数小文字で指定
- Description: 説明文を指定(日本語OK)
- Username: EC2側のユーザ名を指定
- Hostname: EC2インスタンスの接続先ホストまたはIPアドレスを指定
- Initial path: ワークスペースのPATHを指定(任意)
- Port: SSHのポートを22以外に変更している場合は指定
- Node.js binary path: /usr/bin/node(空欄でOK)

「Create Workspace」をクリックしたら、SSHで接続〜ワークスペース作成まで全て自動でやってくれます。エラーが出た場合はログを追って対処してください。待つこと数十秒でリモートワークスペースが出来上がります。

# 開発環境完成

![cloud9_cake.png](https://qiita-image-store.s3.amazonaws.com/0/143591/9d7af9c9-db41-2bf6-11ff-d5df4c65af45.png "cloud9_cake.png")

ものの数分です。あっという間にできました。 EC2上のファイルを直接編集できます。SCPやS3経由でという手間もありませんので、便利に使えると思います。

余談ですが、Project Setting > Run > Preview で 「When Saving Reload Preview:」を「Always」にしておくと、⌘+Enterを押さなくても、保存(⌘+s)と同時にプレビューがリロードされます。便利ですね。

# Freeプランのアカウントとのコラボレート

チーム開発で使う場合は、ワークスペースから「Share」で、メンバーを招待すれば、コラボレーションできます(招待アカウントはFreeプランでOKです)。

インストール作業に無駄なコストを費やさず、コーディングに全力を尽くしてください。以上です。

# 参考にした手順
リモートワークスペースの作成手順は以下の公式ドキュメントを参考にしました。
[Setting Up an SSH Workspace](https://docs.c9.io/docs/running-your-own-ssh-workspace)