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


まえがき

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

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

※※ 2021/07/27に最下部に追記をいたしました。 ※※

動作環境

・MacBook Air (Retina, 13-inch, 2020)
・Big Sur11.4
・ターミナルシェル:zsh

前提

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

1.Node.jsをインストール

Cloud9にはNode.jsが必要なので最初にインストールします。
(1)Amazon公式チュートリアルを参考にインストールしていきます
ターミナルにて、

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

※※ nvmのGitHubにて最新版のコードをコピペしてください ※※

(4)nvmを有効にします

. ~/.nvm/nvm.sh

(5)nvmを使用してNode.jsの安定版をインストールします

nvm install --lts --latest -npm

(6)安定版をデフォルトに設定します

nvm alias default 'lts'/*

(7)Cloud9で接続するディレクトリの権限を設定します 🔗 Amazon公式:SSH環境ホスト要件

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

(8)gccが必要なので、
🔗 AWS Cloud9 で既存の EC2 インスタンスに接続する

sudo yum -y gcc

(10)つづけて、

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

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

node -e "console.log('Running Node.js ' + process.version)"

-> 「Running Node.js VERSION」 と表示されればNode.jsのインストール、設定は完了です。

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 22 18.179.48.128/27 Cloud9
SSH TCP 22 18.179.48.96/27 Cloud9

※※ コピー用 ※※ 説明欄は省略可能です ※※

(3)正常に保存されました

3-1. Cloud9の環境構築

(1)Cloud9に戻り、入力していきます
Name:任意のお名前
Description:既存のEC2インスタンスに接続
Descriptionは省略可能ですが、分かりやすいように記述しました。

-> Next Stepをクリック

(2)既存のEC2インスタンスに接続するため、一番下にある、
🔘Connect and run in remote server (SSH)を選択します
User:ec2-user(インスタンスのユーザー名)
Host:パブリックIPアドレスまたはDNSホスト名※
※EC2インスタンスに記載されていますが、DNSホスト名が無効になっていると、
「 - 」と表示されているので有効にします。無効の方は3-2を参考になさってください。

(3)Copy key to clipbord をクリックして公開鍵をコピーします
Advanced settingsは空欄のままでOKです。
(4)ターミナルに戻り、

sudo vim ./. ssh/authrized-keys/

に移動し、さきほどCopy key to clipbordでコピーした鍵を貼り付け保存します。

(5)Cloud9に戻り、Next StepをクリックするとReviewが表示されます

確認後にCreate environmentをクリックするとCloud9が作成されます

わたしのようにsshログインせずインストールしてしまっていたら、
エラーメッセージが表示されます。

Could not execute node.js on あなたのIPアドレス #訳:ssh環境にNode.jsないで

ログインしてないと気付いたときにはゾッとしました。。

3-2.DNSホスト名が「無効」の方へ:DNSホスト名を有効にする

(1)VPCコンソール -> VPC -> 使用しているVPCを選択
(2)下タブのDNSホスト名:「無効」を見届ける

(3)選択したVPC -> アクション -> DNSホスト名の編集
-> DNSホスト名 ☑︎有効化 にチェックして保存

(4)「有効」になりました

(5)EC2コンソール -> EC2で再度確認すると、DNSホスト名が表示されているはずです
こちらをCloud9のHOSTに貼り付けます。

*1. nodebrewを使ったNode.jsのインストール

(1)homebrewでnodebrewをインストールしていきます

brew install nodebrew

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

% nodebrew
v8.9.4

(3)Nodebrewをセットアップします

nodebrew setup

(4)PATHの設定を書き込みます

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

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

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

(5)同作確認を行います

nodebrew -help

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

*2. Node.jpをインストール

(1)Node.jsのインストール可能なバージョンを調べます

nodebrew ls-all

(2)今回は安定版(LTS)をインストールしました。2021/07/15時点で、v14.17.3でした

nodebrew install -binary stable

※※ 最新版をインストールしたい方はこちら↓

nodebrew install latest

※※ エラーが出てしまった方はこちら -> 🔗 MacにNode.jsをインストールする方法

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

% nobebrew ls
v17.17.3

current:none

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

% nodebrew use v14.17.3
use v14.17.3
% nodebrew ls
v14.17.3

current: v14.17.3

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

node -v

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

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

(7)gccが必要なので、①yumでgccをインストールし、
②curlでインストーラーをダウンロードして実行します
※※ gcc:さまざまなプログラミング言語のコンパイラ集のこと。🔗 IT用語辞典バイナリ

sudo yum -y gcc
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を再作成したからです。作成手順を投稿しました。