AWS Cloud9 のすゝめ

この記事は [KDDI Engineer&Designer Advent Calendar 2022](https://qiita.com/advent-calendar/2022/engineer-designer) の18日目の記事です。


この記事では、「Cloud9 って何？」という人向けにAWS Cloud9 の紹介をしていきます

# はじめに
AWS cloud9 とは、AWSマネジメントコンソールから簡単にIDE（統合開発環境）を起動することができるサービスです

https://aws.amazon.com/jp/cloud9/

ものすごく単純化すると、VSCode しか動かない PC をクラウド上で起動できるイメージです

こんな感じの開発環境をWebブラウザ上で動かすことができます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1471959/caebd801-7e6b-6b8f-662d-1732430d77ae.png)

この記事を書こうと思った背景には、私用 PC のWindows で開発環境を整えるよい方法にたどり着けなかったことがあります。。。

PowerShell とコマンドプロンプトに慣れなかったり、Bash を使いたいがために WSL2 を導入してみたものの、たまに動作が重かったり。。。
MacBook でも買おうかと思っていたのですが、「クラウド上に開発環境置いちゃえばいいんじゃね？」と思い立ったのが事の始まりです

ちなみに、今はローカルの WSL2 をメイン環境としてますが、ローカル環境を汚したくないとき用に Cloud9 を使います

# どんな人におすすめか
完全的に個人の主観ですが、以下のような方にお勧めできると思います
「とりあえず環境を用意したい」というニーズには、十分すぎるほどの機能があります

- ハンズオンや勉強会で AWS CLI やソースコードを取り扱う
    - ブラウザ経由なので、端末による環境差異がほとんどなくなります
    - Cloud9 は AWS CLI がプリインストールされています
- ローカル環境にデータを置きたくない
    - 元となる EC2 インスタンスにデータが保存され、ローカル環境にはデータは残りません
- 開発環境を用意したいが、何をすればいいかわからない
    - ローカル環境は一切汚さずに、開発環境を使うことができます
- こういう画面なんかかっこいい、触ってみたい
    - 私が Cloud9 に興味を持った最初の理由はこれでした
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1471959/caebd801-7e6b-6b8f-662d-1732430d77ae.png)

ただ、**「とりあえずの開発環境」** という感じなので、IDEとしての機能はVSCodeなどの主要サービスの方が幅広く使えます
ゴリゴリに開発をする人にとっては機能不足だと思うので、ローカル環境で開発環境を整えたほうがいいと思ます

# 環境の作成方法
AWS CLIでも作成できますが、ここでは一番手っ取り早く作成ができるマネジメントコンソールからの操作を記載します
なお、**つい最近作成画面が変わったので今までの記事に記載されているスクリーンショットは更新がされていない可能性があります**
（2022年11月現在の画面に基づいて記載しています）

まずは「Cloud9」と検索して Cloud9 の画面を表示します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1471959/a3461882-5e62-9b5e-0b0a-de75bb5af8b4.png)

はじめて利用する際は以下のような画面が表示されますので、右上の[Create environment]をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1471959/95a7527c-47d2-8f1d-79d7-ec99fcbe0bc3.png)

ここから諸々の設定をしていきます

まずは名前と説明、それに利用する環境を選びます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1471959/a36a8ae0-a87b-e67b-ae8b-1aa0118a225a.png)
Cloud9 の実体は EC2 インスタンスなので、新規作成するのか、もしくはすでにあるインスタンスを使うかを選ぶ必要があります

既存のインスタンスを使う場合は SSH による接続しかできないため、ユーザー名やホスト名 or IPアドレスなど、SSH 接続をするための設定が必要です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1471959/ed4ee669-e4c1-e5cd-d1f5-11d175e29746.png)

新規作成する場合は、インスタンスタイプの設定とOSの設定（Amazon Linux 2 もしくは Ubuntu）を行います
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1471959/08e6dbcc-e7a8-0d0e-3a77-bf0b4cc39d4a.png)
またここでは、ユーザー操作がない場合に自動停止するまでの時間を設定できます
Cloud9 はインスタンスが動いていることを意識しなくていいため、つい放置してしまいがちです
不要な課金を防ぐためにも、必ず設定しておきましょう

次に、インスタンスへの接続方法と、立てるサブネットの設定をします
（接続方法とネットワーク要件については後述します）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1471959/95876fe5-5123-689f-0a60-f8136fbb442b.png)

最後にタグの設定（オプション）をすれば設定完了です！
[Create]をクリックして作成しましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1471959/5864b1e5-23e5-0d3a-fc43-12afbd0edc2d.png)

**デフォルト VPC 上ですぐに使いたい場合は一番上の名前だけ設定すればOKです、なんという手軽さでしょうか**

作成が完了した後に [Open] をクリックすれば、IDEの画面が表示されます
起動には若干時間がかかりますが、1,2分くらいです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1471959/f99e4125-1e80-8a8e-8152-d049550cc77b.png)



# 接続方法について

Cloud9 の実体である EC2インスタンスとの接続方法には2種類あります
セキュリティが絡んでくるところなので、違いは知っておきましょう

## 前提条件（ネットワーク要件）
どちらの場合も、インスタンスのインターネット向けアウトバウンド通信が確立されている必要があります
パブリックサブネットを使う、もしくは NAT Gateway などを使う必要があるかと思います

## SSM Session Manager を使った接続
Cloud9 と EC2 の間を SSM Session Manager によって接続します
![cloud9_ssm_access.drawio (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1471959/ce4defad-d45b-90df-9615-da3813101aaa.png)



Session Managerの画面を見てみると、セッションが張られているのがわかります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1471959/74dbe508-3771-67ef-58dc-3705b347b7eb.png)

Cloud9のターミナルからも、SSMを使っていることが確認ができます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1471959/627b3fbf-5dd6-c055-1160-5172861f2430.png)

ちなみに、この記事を書いている当時では、セッション数は2つでした

この場合はなんといっても、EC2インスタンスのインバウンド通信を閉じたまま利用することができるのがメリットです
以下は実際のスクリーンショットですが、インバウンドルールがないことがわかります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1471959/576005e0-1cce-4703-6a95-7fec41838e73.png)

ただしデメリットとしては、既存のEC2インスタンスとCloud9を接続する場合は利用できません
あくまで新規に Cloud9 の環境を作りたい場合のみ利用ができます

## SSH を使った接続
Cloud9 と EC2インスタンスの間は SSH のセッションが張られます
このセッションを使って、コンソール画面から操作ができます

![cloud9_ssm_access.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1471959/94022b4b-bf8b-4621-bf51-8b8c96dafbfa.png)

この方法は、インスタンスの新規構築 or 既存インスタンスの流用、いずれの場合でも利用が可能です

セキュリティ的には、Cloud9 からのSSH通信を許可するセキュリティグループが自動的に作成されるので、注意が必要です

以下は実際のスクリーンショットですが、Cloud9 のIPアドレスである18.179.48.128/27 と 18.179.48.96/27 からのSSHが許可されていることがわかります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1471959/ea41889e-ce89-307f-e151-b90ff6c7e42d.png)

ちなみにこのIPアドレスは　Cloud9 を利用するリージョンによって異なります
詳しいIPアドレスはAWS公式ドキュメントから確認ができます

https://docs.aws.amazon.com/general/latest/gr/aws-ip-ranges.html

# 最後に
簡単に起動でき、料金もそこまでかからないのでぜひ試してみてください！

ちなみに、アドベントカレンダー10日目の記事で 「Cloud9 上でTerraform を動かしてみた」という記事を書いています
興味がある方は、合わせて読んでもらえるとうれしいです

https://qiita.com/hatahatahata/items/895bde0231fcd40d13d1