Cloud9 環境を用意する

* 2021/05/05 追記：パブリックサブネットを利用して System Manager オプションを選択する場合には、サブネットが "パブリック IP アドレスの自動割り当て有効" になっている必要があるようになったようです。そのため、そのため、 __VPC を用意する__ に手順を追記しました。"パブリック IP アドレスの自動割り当て有効" になっていないまま Cloud9 環境を作成すると ```Cloud9 could not connect to the EC2 instance``` が生じます。

# はじめに

AWS Cloud9 は複数の言語をサポートし、AWS SDK、Docker、Git などのツール ( 詳細は [こちら](https://docs.aws.amazon.com/ja_jp/cloud9/latest/user-guide/what-can-i-do.html) ) があらかじめインストールされてる開発環境です。コードサンプルの実行や、ちょっとしたコードを書く環境としてつかったり、開発が終わって運用に入りコードの更新がすくなくなったプロジェクトの環境を構築しておいたりするのもいいかもしれません。
ここでは、VPC を用意し、Systems Manager オプションを使った Cloud9 環境を用意します。

---

## VPC を用意する

* VPC ダッシュボードを開き、"VPC ウィザードの起動" を選択します。
* "1個のパブリックサブネットを持つ VPC" を選び、"選択" を押します。
* 次のプロパティを入力し、"VPC の作成" を押します。
    * __IPv4 CIDR ブロック__ - 172.30.0.0/16
    * __IPv6 CIDR ブロック__ - IPv6 CIDR ブロックなし
    * __VPC 名__ - Cloud9VPC
    * __パブリックサブネットの IPv4 CIDR__ - 172.30.0.0/24
    * __アベイラビリティーゾーン__ - ap-northeast-1a
    * __サブネット名__ - cloud9_subnet

![Screenshot_2021-01-02 VPC Management Console(3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/743360/90a22128-b627-8080-8242-49f41224d353.png)

* __VPC が正常に作成されました__ という画面がでるので、"OK" を押してください。

### サブネットの自動割り当て IP 設定を変更する

* サブネットページを開き、リストから先ほど作成した ```cloud9_subnet``` をチェックします。
* "アクション" から "自動割り当て IP 設定の変更" を選択します。
* __パブリック IPv4 アドレスの自動割り当てを有効にする__ にチェックをいれて "保存" を選択します。

---

## Cloud9 環境を用意する

* Cloud9 コンソールを開き、"Create environment" を選択します。
* __Name__ に ```SampleCloud9``` と入力して "Next Step" を押します。
* __Configure settings__ 画面で以下のプロパティを入力して "Next Step" を押します。
    * __Environment type__ - ```Create a new no-ingress EC2 instance for environment (access via Systems Manager)```
    * __Instance type__ - ```t2.micro (1 GiB RAM + 1 vCPU)```
    * __Platform__ - ```Amazon Linux 2 (recommended)```
    * __Cost-saving setting__ - ```After 30 minutes (default)```
    * __Network settings__ - __VPC__ 、__Subnet__ にさきほど作成した ```Cloud9VPC``` 、```cloud9_subnet``` を選択します。

![Screenshot_2021-01-02 Create a new environment(1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/743360/3a2436f4-d705-54d4-9708-10ddb1c0f8e5.png)
![Screenshot_2021-01-02 Create a new environment(2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/743360/5509812d-3573-58ee-8f7a-4e541bd9a688.png)


* __Review__ 画面に変わります。```Create environment``` を押してください。

Cloud9 環境の構築がはじまり、しばらくした後に Cloud9 が立ち上がります。

![SampleCloud9 - AWS Cloud9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/743360/859888f9-f060-a48f-a722-3c7b168d8aa5.png)

---

## 補足

今回、Cloud9 の環境をパブリックサブネットに作成しましたが、作成した EC2 インスタンスのセキュリティグループを確認するとインバウンドが閉じられているので、__Configure settings__ で __Environment type__ を ```access via Systems Manager``` オプションを使った時の方が ```direct access ``` オプションを使った時よりもセキュリティが安全なことが分かります。

![Screenshot_2021-01-03 VPC Management Console(1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/743360/9238b77c-bfa7-6d5b-0b61-2b734bdacaec.png)

Cloud9 の環境をプライベートサブネットでも作成できますが、その場合 Cloud9 IDE から AWS CLI の実行に制約が生じるようです。

---

## 参考

* [AWS Cloud9 が拡張 VPC サポートをリリース](https://aws.amazon.com/jp/about-aws/whats-new/2020/08/aws-cloud9-releases-enhanced-vpc-support/)
* [Cloud9 IDE で AWS CLIを実行する際に注意したいネットワーク的制約](https://dev.classmethod.jp/articles/cloud9-ide-network-condition/)