以前の記事でEC2インスタンスも同時に自動的に作成するやり方で Cloud9 の環境を作成してみましたが、仕事等で使うケースを考えると、既存のインスタンスに接続するケースもありそうだったので、試しに EC2 インスタンスを事前に別途作成して、そこに接続するやり方で Cloud9 の環境を作成してみました。
手順はこちらで紹介されているので、この手順に沿ってやってみました。 EC2 インスタンスを作成するリージョンは Cloud9 と同様にシンガポールリージョンにしています。
docs.aws.amazon.com
VPC作成
まずは VPC を作成します。 VPC コンソールから VPC ウィザードの起動
をクリックします。
VPC 内からインターネットに接続できる必要があるので、種別としては 1個のパブリックサブネットを持つ VPC
を選択して 選択
ボタンをクリックします。
VPC の設定は基本的にデフォルトで OK なので、 VPC 名だけ任意のものを設定し、 VPC の作成
をクリックします。
VPC が作成されたら、 VPC コンソールからその VPC を選択し、 Description タブの Network ACL の ID のリンクをクリックします。
インバウンドルールを設定するために、 Inbound Rules タブの Edit inbound rules
をクリックします。
インバウンドルールでは ssh の接続元を Cloud9 に限定するのですが、設定すべき CIDR は ip-ranges.json というファイルに記載されているので、下記のように確認することができます。今回はシンガポールリージョンなので、 region が ap-southeast-1 になっている2項目を使用します。
$ wget https://ip-ranges.amazonaws.com/ip-ranges.json
$ jq '.prefixes[] | select(.service=="CLOUD9")' < ip-ranges.json
{
"ip_prefix": "13.250.186.128/27",
"region": "ap-southeast-1",
"service": "CLOUD9"
}
{
"ip_prefix": "13.250.186.160/27",
"region": "ap-southeast-1",
"service": "CLOUD9"
}
〜〜〜以下略〜〜〜
上記 CIDR をアクセス元として設定した ssh のルール2つと、Port Range で接続を許可する設定1つの合計3つのルールを設定します。最後に Save
ボタンをクリックして設定を保存します。
EC2 インスタンス作成
続いて実際に接続する EC2 インスタンスを作成します。 EC2 コンソールから インスタンスの作成
をクリックします。
AMI は Amazon Linux 2 を選択します。
インスタンスタイプは、今回はお試しということで t2.micro を選択します。
インスタンスの詳細設定では、ネットワークとして先程作成した VPC を選択します。サブネットもその VPC に属する一つが選択されます。その他はデフォルト設定でOKなので、 次の手順: ストレージの追加
をクリックします。
今回はストレージはデフォルトのままで良いので、そのまま 次の手順: タグの追加
をクリックします。
今回は特にタグも追加しないので、そのまま 次の手順: セキュリティグループの設定
をクリックします。
セキュリティグループの割り当てでは 既存のセキュリティグループを選択する
を選択し、VPC 内に作成されているセキュリティグループを選択して 確認と作成
をクリックします。
設定内容の確認画面が表示されますので、間違いがなければ 起動
ボタンをクリックします。
インスタンスに接続する際のキーペアを新たに作るか、既存のものを使用するかの選択フォームが表示されます。今回は 新しいキーペアの作成
を選択し、キーペア名を設定して キーペアのダウンロード
をクリックし、プライベートキーファイルをダウンロードします。ダウンロードすると インスタンスの作成
ボタンがアクティブになりますので、クリックしてインスタンスを作成します。
EC2 の環境設定
冒頭で紹介したページでも説明されている通り、 Cloud9 で接続するにはいくつかの要件を満たす必要がありますので、インスタンスに接続して設定を行います。 VPC の作成中にインバウンドルールの設定で ssh の接続元を Cloud9 に限定しましたが、設定時にローカルからも接続できるように一時的に設定を追加します。設定が完了したら追加した設定は削除しておきます。
また、詳細な説明は割愛しますが、パブリックIPアドレスが必要になりますので Elastic IP も割り当てておきます。
接続できるようになったら ssh でインスタンスに接続します。
$ ssh -i "cloud9.pem" ec2-user@ec2-52-XXX-XXX-XXX.ap-southeast-1.compute.amazonaws.com
Cloud9 で接続するには Python 2.7 が必要になります。これはデフォルトでインストールされています。
$ python -V
Python 2.7.14
次に node.js も必要になります。これはデフォルトではインストールされていませんので、下記手順でインストールします。
$ sudo yum -y update
$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
$ . ~/.bashrc
$ nvm install node
$ node --version
v11.11.0
また、 Cloud9 で接続するディレクトリの権限を設定します。ホームディレクトリを対象とする場合には下記のように権限を設定します。
$ ls -ld ~
drwx------ 5 ec2-user ec2-user 122 Mar 9 11:47 /home/ec2-user
$
$ sudo chmod u=rwx,g=rx,o=rx ~
$
$ ls -ld ~
drwxr-xr-x 5 ec2-user ec2-user 122 Mar 9 11:47 /home/ec2-user
最後に AWS Cloud9 インストーラを実行します。 gcc が必要なので yum で Development Tools をインストールしてから、 curl でインストーラをダウンロードして実行します。
$ sudo yum -y groupinstall "Development Tools"
$ curl -L https://raw.githubusercontent.com/c9/install/master/install.sh | bash
Cloud9 の環境作成
それでは Cloud9 の環境を作成します。 Cloud9 のコンソールから Create environment
をクリックします。
環境名と説明を任意に入力し、 Next step
をクリックします。
Environment type で Connect and run in remote server (SSH)
を選択します。User には ec2-user、Host には先程までに作成した EC2 インスタンスのパブリックIPを設定します。 Copy key to clipboard
をクリックすると Cloud9 から EC2 インスタンスに接続するためのパブリックキーがコピーされますので、インスタンス上で authorized_keys に設定します。設定できたら Next step
をクリックします。
ちなみに authorized_keys への登録は vi などで下記のようにファイルを編集してペーストします。
$ vi ~/.ssh/authorized_keys
設定内容の確認画面が表示されますので、問題なければ Create environment
をクリックします。
Cloud9 の環境が作成され、追加でインストールが必要なもののリストが表示されますので、全て選択された状態のまま Next
をクリックします。
コンポーネントのインストールが始まりますので完了するまで待ちます。ちなみに私は上記の画面から進まなくなってしまったので一度キャンセルしましたが、再度 Cloud9 環境に接続した際にインストールが行われ、無事に完了しました。
インストールが完了すると Cloud9 の IDE が表示され、使用できるようになります。
まとめ
Cloud9 で接続するためにはサーバ側がネットワーク設定やソフトウェアのインストールなどの要件を満たす必要があるのでちょっと煩雑ですが、一度設定を作ってしまって AMI として保存しておけば、誰かが同じ環境を使う場合にも AMI からインスタンスを作成すれば Cloud9 側の環境だけ新たに作れば良いので、導入時の手間が削減できそうですね。