Help us understand the problem. What is going on with this article?

AWS Cloud9をSSH接続で使うまでの手順

AWS Cloud9での環境構築には2種類の方法があります。
今回はSSH環境を使えるようにするまでの手順をまとめました。

  • EC2 環境 (新しいインスタンスを作成する)
  • SSH環境 (既存のインスタンスにSSHで接続する)

EC2環境とSSH環境の違い

お手軽なのはEC2環境、玄人向けがSSH環境と言ったところです。

EC2環境は、Cloud9用のインスタンスを作成して使用します。
ユーザーが選ぶのはOSとスペックだけで、残りはAWSが準備してくれます(カスタイマイズすることも可能です)。詳細は補足にまとめました。

SSH環境は、自分でインスタンスを作成し、Cloud9で操作できるように設定します。
ユーザー自身で、必要なパッケージ等のインストール、ネットワークの設定を行う必要があります。

項目 EC2環境 SSH環境
インスタンス 新規作成 事前に準備
設定 スペックとOS選択のみ 全て自分で行う
OS Amazon Linux or Ubuntu Linux全般
Cloud9以外での使用 想定していない 使用可能

詳しくは公式を参照してください。

SSH環境のメリット

SSH環境は、EC2環境に比べて面倒が多いのです。
単にAWSのインスタンスでCloud9を使いたいだけであれば不要な存在です。
それでも用意されているということは何かしらのメリットがあるということになります。

メリット1:AWS以外のサーバーが使える

例えば、別のクラウドサービスで使用している既存サーバーに接続して、Cloud9を使用することができます。
構築済みの既存サーバーでCloud9を用いて開発したい、AWSのインスタンスを使いたくないといったケースで有効です。

メリット2:Cloud9以外の用途にインスタンスを使える

EC2環境の場合、Cloud9環境を削除するとインスタンスも削除されます。
SSH環境であれば、Cloud9の使用終了後も継続してインスタンスを使用することができます。
既存サーバーで一時的にCloud9を使用といったことも可能です。

また、EC2環境の場合では不要なパッケージもインストールされます。
例えば、Pythonの開発のみ行い場合であっても、その他の言語を最低限動かすためのパッケージはインストールされています。

SSH環境を使用するための手順

今回は、デフォルトユーザーである「ec2-user」でCloud9を使用する手順を記載します。

[1] インスタンスを用意する

[1-1] インスタンスの作成

EC2をインスタンスを作成します。
下記のようにパブリックサブネット内にインスタンス1台という簡単な構成で作成しました。

この構成であれば、 Cloud9を使用するための特別な手順はありません。
インスタンスは下記設定としました。

項目
OS Amazon Linux 2
インスタンスタイプ t3.micro
ストレージ EBS, 16GB

[1-2] パッケージのインストール

SSH環境としてインスタンスを使用するための用件が色々とあります。
詳しくは下記リンクに記載があります。
AWS Cloud9 SSH 開発環境 ホスト要件

[1-2-1] Python2.7のインストール

Amazon Linux 2であれば、Pytnon2.7はインストール済みのため何もする必要はありません。
インストールされていないサーバーであれば、yumやapt-getを用いてインストールします。

$ sudo yum install -y python

2.7と指定があるため、Python3がデフォルトのサーバーであれば、2.7をデフォルトに変える必要があるかもしれません。

[1-2-2] Node.jsのインストール

バージョンが 0.6.16 以降のNode.jsが必要条件となります。
公式に記載の通り、下記手順でインストールします。
Amazon EC2 インスタンスでの Node.js のセットアップ

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

[1-2-3] AWS Cloud9 の起動元ディレクトリの権限変更

Cloud9を起動時に表示されるディレクトリの権限を変更します。
AWS Cloud9 の起動元とするディレクトリには「rwxr-xr-x 」の権限が必要になります。
ホームディレクトリを起動元にする場合は、下記コマンドで変更します。

//s3.qrunch.io/3f9e9fd53ac79d6e88e66457e1139599.png)
$ sudo chmod u=rwx,g=rx,o=rx ~

[1-2-4] AWS Cloud9インストーラの実行

AWS Cloud9インストーラをダウンロードし実行します。
AWS Cloud9 に必要なコンポーネントやその依存関係をインストールするそうです。
AWS Cloud9 インストーラの使用

インストーラ実行にgccが必要なので先にインストールしてから実行します。
インストーラが実行し終わるまでに数十分かかりました。t3.microだからかもしれません。

$ sudo yum install -y gcc
$ curl -L https://raw.githubusercontent.com/c9/install/master/install.sh | bash

[1-3] ネットワークACLとセキュリティグループの設定

EC2環境ですと、AWS側でセキュリティグループを作成してくれます。
SSH環境ではAWS側で設定してくれませんので、セキュリティのことを考えると自分で設定しておいた方がよいでしょう。
インバウンドはSSHのみ許可、アウトバウンドはHTTP, HTTPSのみ許可しました。
SSHの許可はCloud9でアクセスする際にも必要になります。

インバウンド

タイプ プロトコル ポート範囲 ソース 説明
SSH TCP 22 0.0.0.0/0

アウトバウンド

タイプ プロトコル ポート範囲 ソース 説明
HTTP TCP 80 0.0.0.0/0
HTTPS TCP 443 0.0.0.0/0

[2] Cloud9でSSH環境を作成する

[2-1] SSHの接続情報を入力

Cloud9の環境作成画面でSSH接続に必要な情報を入力します。
Environment Typeは「Connect and run in remote server (SSH)」を選択します。

02.Cloud9環境作成2.jpg

Userには上述の手順でCloud9で使用するためのユーザーとして設定した「ec2-user」を入力します。
HostにはEC2インスタンスのパブリックIPを入力します。

03.Cloud9環境作成3.jpg

[2-2] 公開鍵の設定

EC2インスタンスに公開鍵を登録します。
「Copy key to clipboard」をクリックして公開鍵をコピーします。

04.Cloud9環境作成4.jpg

EC2インスタンスにログインし、公開鍵を登録します。

$ echo "[コピーした公開鍵]" >>  ~/.ssh/authorized_keys

[2-3] Advanced settings (設定不要)

公開鍵を登録したら[Next Step]をクリックします。
SSHの接続に問題がある場合にはここでエラーメッセージが表示されます。

Advanced settingsは空欄のままにします。
EC2インスタンス以外のサーバーを使用する場合には、入力の必要があるかもしれません。

05.Cloud9の環境作成5.jpg

[2-4] 作成完了

次の画面に進んだら設定内容を確認し[Create environment]をクリックします。
設定に問題がなければCloud9の初期画面が表示されます。
以上で終了です。

06.Cloud9の環境作成6.jpg

終わりに

SSH環境は、EC2環境に比べて設定が面倒ですが、一度分かってしまえば次回は簡単です。
私はCloudFormationを使用して環境構築をしているので、SSH環境を活用しています。

EC2環境、SSH環境それぞれにメリットがあるので、シチュエーションに応じて自分の都合の良い方を選ぶのがよいと思います。

補足

補足[1] Cloud9で環境作成時に自動で作成されるセキュリティグループ

Cloud9で使用するIPアドレスの範囲は、リージョン ごとに決まっており「ip-ranges.json」に記載されています。
下記設定は、アジアパシフィック(東京)でCloud9環境を作成した際の例です。
AWS Cloud9 開発環境 の VPC の設定

インバウンド

タイプ プロトコル ポート範囲 ソース 説明
SSH TCP 22 18.179.48.128/27
SSH TCP 22 18.179.48.96/27

アウトバウンド

タイプ プロトコル ポート範囲 ソース 説明
すべてのトラフィック すべて すべて 0.0.0.0/0

補足[2] Advanced settingsの内容

設定 内容 備考
Environment path 環境パス デフォルトはホームディレクトリ
Node.js binary path Node.js バイナリパス 設定しなければAWS Cloud9が推測する
SSH jump host SSH ジャンプホスト 踏み台サーバー経由で接続するようなケースで設定する
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした