AmazonLinux2 OSの既存インスタンスでCloud9を使用する方法

# はじめに
EC2を直接操作したい場合、VSCode等エディタのRemote Development機能やAWSサービスのCloud9を利用することができます。ただしVSCodeのRemote Development機能は特に、EC2のリソースをふんだんに使用し、無料枠内のインスタンスではメモリ不足に陥るなど問題が多いです。その点Cloud9はEC2のリソースもさほど気にせず使え、費用もかからないのでおすすめです。

# 0.前提
今回はOSにAmazon Linux 2を使用します。なお最新のAmazon Linux 2023 は現時点ではCloud9の対象外になっているようです。
* OS: Amazon Linux 2
* AMI: Amazon Linux 2 AMI (HVM) - Kernel 5.10, SSD Volume Type ami-04f0680f68f076681 (64 ビット (x86))

* セキュリティグループ: インバウンドルールでssh22ポートを開けておきます。既にssh接続でインスタンスには接続可能な状態であることを前提とします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316169/1249cfac-768b-3632-f01b-1f16eaaac33b.png)

# 1.Node.jsのインストール
Cloud9を使用するためにはインスタンスにNode.jsをインストールする必要があります。
ここではNode.jsのインストールにパッケージマネージャーnvmを用います。
nvmではNode.jsの複数のバージョンをインストールすることができ、またそれらの切り替えも可能です。
そのためまずはnvmのインストールを行います。
これ以降コマンドは全てssh接続したインスタンス上で行います。
```
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
```
続いてnvmを有効にします。
```
. ~/.nvm/nvm.sh
```
コマンドラインで次のように入力し、nvm を使用してNode.jsのバージョン16をインストールします。
なおLTS版(バージョン18）はAWSではサポートされておらず、Node.js実行時にエラー(version `glibc_2.27' not found)がでます。
```
nvm install 16
```

最後にコマンドラインで次のように入力して、Node.jsが正しくインストールされ、実行されていることをテストします。
```
node -e "console.log('Running Node.js ' + process.version)"
```
正しくNode.jsがインストールされている場合、`Running Node.js v16.〇〇`と表示されます。

# 2.Cloud9の環境作成
次にAWSのサーブス画面からCloud9を選択し、「環境を作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316169/5efc910c-9047-e3dd-443c-7fb34f9f6e19.png)

名前や説明を入力したら、環境タイプで既存のコンピューティングを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316169/31551f68-53ed-327c-cc1f-4f8a776d23a2.png)

既存のコンピューティングを選択すると、以下のような選択欄が表示されます。まずはCloud9がインスタンスに接続する際のSSHキーの設定を行いましょう。「キーをクリップボードにコピー」をクリックし、公開鍵をコピーします。
ここで再びssh接続したインスタンスに戻り、`./.ssh/authorized_keys`に今コピーした公開鍵を追加で貼り付けます。

再びAWSサービスに戻り、ユーザー名、ホスト名を入力します。ユーザー名はサーバーへの接続に使用するログイン名です。ホスト名にはインスタンスのパブリックDNS名かIPアドレスを入力します。
![スクリーンショット 2023-10-27 18.36.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316169/eed39f9b-ae12-5def-d907-a9f82b9ad19e.png)

ここまで終了したら、「その他の詳細-オプション」をクリックして表示項目を増やします。
１番のポイントがここです、２つ目の項目「 **Node.js バイナリへのパス** 」を設定しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316169/761d68e1-6d24-a0af-1dd6-b416dc6569d8.png)

Node.jsバイナリへのパスは、ssh接続したインスタンスのコマンドラインに以下を入力することで確認できます。
```
nvm which node
```
出力結果を先ほどの「Node.js バイナリへのパス」に入力します。

タグの設定など特にこだわりが無ければ、一番下のオレンジ色の作成ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316169/2bbf39e9-6bf6-2e97-ae2e-c49228fee493.png)


# 3.Cloud9のインストール
ここまで特に問題が無ければ、Cloud9の環境一覧に今作成した環境が表示されます。環境一覧から今作成した環境を選び、「開く」をクリックします。すると、インスタンスにCloud9の接続に必要なものをインストールするインストーラが立ち上がります。「Next」をクリックします。
![スクリーンショット 2023-10-27 18.22.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316169/89161562-8ea4-2757-6ff3-784472de4d42.png)

インストールする中身の確認画面が表示されます。特にこだわりが無ければディフォルトのまま「Next」をクリックします。
![スクリーンショット 2023-10-27 18.23.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316169/193952e4-08d1-63b3-bfd1-41a81ced8c58.png)

C development tools のインストールの同意が求められるので、問題が無ければ「Y」を入力しEnterを押します。
![スクリーンショット 2023-10-27 18.23.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316169/f9e401d4-5a2b-07e1-9401-b6bc66964376.png)

インストールが完了するとWelcomeページが表示され、Cloud9からインスタンス内を操作可能になります。
![スクリーンショット 2023-10-27 18.31.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316169/c0e3c526-077b-472a-7d52-4477f6544c95.png)

# 参考文献
* [チュートリアル: Amazon EC2 インスタンスでの Node.js のセットアップ](https://docs.aws.amazon.com/ja_jp/sdk-for-javascript/v2/developer-guide/setting-up-node-on-ec2-instance.html)
* [AWSのCloud9を既存インスタンスで使用する](https://qiita.com/rockhopper-penguin/items/d5042b71230eb94955d0#cloud9%E3%81%AE%E6%A7%8B%E7%AF%89)