Cloud9 - 既存のEC2インスタンスに接続する

# まえがき
毎度のことながら環境構築に四苦八苦しております。
今回もうんうん唸りながら構築しました。
sshログイン時にNode.jsのインストール、ログインせずnodebrewでのインストール、
の両方とも経験した（ただ失敗しただけ）ので、どちらも投稿します。
結局新たにEC2インスタンスを作成し、SSH環境では使用していないので、
ゴンがカッツォを助けたみたいに、どなたかの助けになれば、、

Cloud9を使用する際は、AD Blockなどの拡張機能の停止または削除してから実行しましょう。
不具合が発生する模様です。

<font color="red">※※</font> [2021/07/27に最下部に追記をいたしました。](https://qiita.com/figgy-pudding/items/17717dd5e30d2f262da3#20210727-%E8%BF%BD%E8%A8%98) <font color="red">※※</font>

# 動作環境
・MacBook Air (Retina, 13-inch, 2020)
・Big Sur11.4
・ターミナルシェル：zsh

# 前提
VPCやEC2インスタンスの作成、
あるいはElastic IPアドレスの取得等は事前に済んでいることとします。
Cloud9のリージョンは<font color="red">東京</font>にしました。

# 1. Node.jsをインストール
Cloud9にはNode.jsが必要なので最初にインストールします。
（1）[Amazon公式チュートリアル](https://docs.aws.amazon.com/ja_jp/sdk-for-javascript/v2/developer-guide/setting-up-node-on-ec2-instance.html)を参考にインストールしていきます
ターミナルにて、

```zsh
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
```

<font color="red">※※</font> [nvmのGitHub](https://github.com/nvm-sh/nvm/blob/master/README.md)にて最新版のコードをコピペしてください <font color="red">※※</font>

（2）nvmを有効にします

```zsh
. ~/.nvm/nvm.sh
```

（3）nvmを使用してNode.jsの安定版をインストールします

```zsh
nvm install stable --latest-npm
```

（4）安定版をデフォルトに設定します

```zsh
$ nvm alias default stable
```

（5）Cloud9で接続するディレクトリの権限を設定します 🔗 [Amazon公式:SSH環境ホスト要件](https://docs.aws.amazon.com/ja_jp/cloud9/latest/user-guide/ssh-settings.html#ssh-settings-requirements)

```zsh
sudo chmod u=rwx,g=rx,o=rx ~
```

（6）gccが必要なので、
🔗 [AWS Cloud9 で既存の EC2 インスタンスに接続する](https://blog.akanumahiroaki.com/entry/2019/03/09/235000)

```zsh
sudo yum -y gcc
```

（7）つづけて、

```zsh
curl -L https://raw.githubusercontent.com/c9/install/master/install.sh | bash
```

（8）Node.jsが正しくインストールされ、実行されているかテストします

```zsh
node -e "console.log('Running Node.js ' + process.version)"
```
-> 「Running Node.js <font color="red">VERSION</font>」 と表示されればNode.jsのインストール、設定は完了です。

```zsh
ec2-user@ip-○○○ $ node -e "console.log('Running Node.js ' + process.version)"
Running Node.js v14.17.3
```

# 2. 既存インスタンスのセキュリティグループを変更する
（1）AWSコンソールにログインします
EC2 -> 左メニューのセキュリティグループ
-> EC2に割り当てているセキュリティグループを選択
（2）インバウンドルールに下記を追加し保存します

| タイプ | プロトコル | ポート番号 | ソース | 説明 |
| :---: | :---: | :---: | :---: | :---:|
| SSH | TCP | 18.179.48.128/27 | 22 | Cloud9 |
| SSH | TCP | 18.179.48.96/27 | 22 | Cloud9 |

<font color="red">※※</font> コピー用 <font color="red">※※</font> 説明欄は省略可能です <font color="red">※※</font>
![node1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1588933/0c3546ca-4568-b78d-ef18-f5cdf4fad089.png)
（3）正常に保存されました

# 3-1. Cloud9の環境構築
（1）Cloud9に戻り、入力していきます
Name：任意のお名前
Description：既存のEC2インスタンスに接続
Descriptionは省略可能ですが、分かりやすいように記述しました。
![node2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1588933/eeb479a3-8d20-072b-05c4-d500a41b55a3.png)
-> Next Stepをクリック

（2）既存のEC2インスタンスに接続するため、一番下にある、
🔘Connect and run in remote server (SSH)を選択します
User：ec2-user（インスタンスのユーザー名）
Host：パブリックIPアドレスまたはDNSホスト名※
※EC2インスタンスに記載されていますが、DNSホスト名が無効になっていると、
「 - 」と表示されているので有効にします。無効の方は3-2を参考になさってください。
![node3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1588933/5e3a9bf2-4153-8f21-5420-d13e0dceb5cb.png)
（3）Copy key to clipbord をクリックして公開鍵をコピーします
Advanced settingsは空欄のままでOKです。
（4）ターミナルに戻り、

```zsh
sudo vim ./. ssh/authrized-keys/
```

に移動し、さきほどCopy key to clipbordでコピーした鍵を貼り付け保存します。
![node4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1588933/dcc5b321-3b23-ee70-606a-8948f5e86414.png)
（5）Cloud9に戻り、Next StepをクリックするとReviewが表示されます
![node5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1588933/7e23ddc4-1538-8ba5-fe44-9c0cc1cdf31c.png)
確認後にCreate environmentをクリックするとCloud9が作成されます
![node6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1588933/3599cd84-83ce-0d7b-3c2b-92be4ffded57.png)
わたしのようにsshログインせずインストールしてしまっていたら、
エラーメッセージが表示されます。

:::note alert
Could not execute node.js on あなたのIPアドレス　#訳：ssh環境にNode.jsないで
:::
ログインしてないと気付いたときにはゾッとしました。。

### 3-2. DNSホスト名が「無効」の方へ：DNSホスト名を有効にする
（1）VPCコンソール -> VPC -> 使用しているVPCを選択
（2）下タブのDNSホスト名：「無効」を見届ける
![node7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1588933/539869f1-964d-ee16-0033-80ac94bfc816.png)
（3）選択したVPC -> アクション -> DNSホスト名の編集
-> DNSホスト名　☑︎有効化　にチェックして保存
![node8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1588933/ff9f3b7f-1237-5dfe-14bd-91d4d3afb6aa.png)
（4）「有効」になりました
![node9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1588933/0abad139-40bb-f480-f4a2-5c78f8a7fe7c.png)
（5）EC2コンソール -> EC2で再度確認すると、DNSホスト名が表示されているはずです
こちらをCloud9のHOSTに貼り付けます。
![node10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1588933/84ab8fed-ac38-d85b-144f-31345e001061.png)


# *1. nodebrewを使ったNode.jsのインストール
（1）homebrewでnodebrewをインストールしていきます

```zsh
brew install nodebrew
```

（2）nodebrewがインストールされたか確認します

```zsh
% nodebrew
v8.9.4
```

（3）Nodebrewをセットアップします

```zsh
nodebrew setup
```

（4）PATHの設定を書き込みます

```zsh
export PATH=$HOME/.nodebrew/current/bin:$PATH
```

が表示されているはずなので、vim ~/.zshrcに移動し、貼り付けてPATHを通します


```zsh
:wq  #保存
```
```zsh
source =/.zshrc #反映
```

（5）同作確認を行います

```zsh
nodebrew -help
```

ヘルプがブワァ〜と表示されればnodebrewのインストールは完了です。

# *2. Node.jpをインストール
（1）Node.jsのインストール可能なバージョンを調べます

```zsh
nodebrew ls-all
```
（2）今回は安定版（LTS）をインストールしました。2021/07/15時点で、v14.17.3でした

```zsh
nodebrew install -binary stable
```

<font color="red">※※</font> 最新版をインストールしたい方はこちら↓

```zsh
nodebrew install latest
```
<font color="red">※※</font> エラーが出てしまった方はこちら -> 🔗 [MacにNode.jsをインストールする方法](https://original-game.com/how-to-install-node-js-on-mac/)

（3）インストールしたNode.jsのバージョンを確認します

```zsh
% nobebrew ls
v17.17.3

current:none
```

（4）バージョンが表示されましたが、cuurent（現在）がnoneになっているので、
使用するバージョンを選択し、currentに表示されるか確認しましょう

```zsh
% nodebrew use v14.17.3
use v14.17.3
% nodebrew ls
v14.17.3

current: v14.17.3
```

（5）何度でも確認したいので、ターミナルを終了したあと、
再度ターミナルを開き、下記コマンドでもう一度バージョンを表示して確認します

```zsh
node -v
```

（6）1の（8）と同じく、Cloud9の接続するディレクトリ権限を設定します

```zsh
sudo chmod u=rwx,g=rx,o=rx ~
```

（7）gccが必要なので、①yumでgccをインストールし、
②curlでインストーラーをダウンロードして実行します
<font color="red">※※</font> gcc：さまざまなプログラミング言語のコンパイラ集のこと。🔗 [IT用語辞典バイナリ](https://www.sophia-it.com/content/GCC)

```zsh:①
sudo yum -y gcc
```

```zsh:②
curl -L https://raw.githubusercontent.com/c9/install/master/install.sh | bash
```

（8）本当にすごい量がブワァと表示されたのち、:Doneと表示されれば終了です！
おつかれさまでした！

ちなみになんですが、最後の

```
 | bash
```

を省略してしまうと、
URL先に記述されているのコードがターミナル上に表示されるだけになります（経験者）。

# あとがき
SSH接続だと、セキュリティの設定やrvmのインストール等、自力でしなくてはなりません。
ノートに「マジでできたやっと 17:27:10」と書き残してあるのですが、
1日かかったやないか。。と学習が追いついていないことに愕然します。
未知の環境に複数手を出してはいけないと痛感しました。
phpとPython、サーバー系をとことんがんばります！

# 2021/07/27 追記
既存のEC2ではなく、新たにEC2を作成した、と記述しましたが、
2021/07/22に確認してみると、EBSが100％になり無料枠を超えており、
10円程加算されていました。Cloud9と連携しているボリュームのため、
加算を止めるためにCloud9の環境を削除しました。Cloud9はほぼ触っていなかったのですが、
こんなにスナップショットが作成されているとは。。すでにEC2インスタンスを作成しており、
さらにCloud9でEC2を作成した方はお気をつけください。止めても1日$0.01加算されます。

先月と値段が異なる理由はRDSを再作成したからです。[作成手順を投稿しました。](https://qiita.com/figgy-pudding/items/2fda5832d8b77505c6e5)
![cloud9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1588933/f3d8a38b-26e9-b1cf-ef1d-a08ed8ca63ec.png)