Cloud9は172.17.0.0/16に気を付けろ！

## 言いたいこと

- Cloud9を使うときはVPCのCIDRに172.17.0.0/16は禁物
- VPCピア接続でも影響あるからね

## Cloud9トラブルシュートから抜粋

10月29日に[AWS Cloud9 のトラブルシューティング](https://docs.aws.amazon.com/ja_jp/cloud9/latest/user-guide/troubleshooting.html)に以下が追記されました。（英語版はもっと前に追記されてました）

>VPC の IP アドレスが Docker で使用されているEC2 環境ため、 に接続できない
>
>問題: EC2 環境の場合、Amazon VPCクラスレスドメイン間ルーティング IPv4 (CIDR) ブロックを使用する (仮想プライベートクラウド) 172.17.0.0/16 で EC2 インスタンスを起動すると、その環境を開いたときに接続が停止することがあります。
>
>原因: Docker では、同じブリッジネットワークに接続されたコンテナが通信できるようにするブリッジネットワークと呼ばれるリンクレイヤーデバイスを使用します。 AWS Cloud9は、コンテナ通信用のデフォルトブリッジを使用するコンテナを作成します。通常、デフォルトのブリッジはコンテナネットワーキングに172.17.0.0/16サブネットを使用します。


## Cloud9のネットワークみてみた

Cloud9でブリッジネットワークみてみるとサブネット172.17.0.0/16でした。

```console
$ docker network inspect bridge
[
    {
        "Name": "bridge",
        "Id": "xxx",
        "Created": "2020-11-28T11:05:59.364729174Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }
]
```

## VPC(172.17.0.0/16)でCloud9作ってみた


禁断の構成VPC(172.17.0.0/16)で、Cloud9を作ると何が起こるか試してみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/764a5c0f-4e69-1534-eac7-7b78e8de56fa.png)


作成したところ、以下の画面からなかなか進みません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/209a02bc-1aef-9c99-9676-e5043c00055e.png)

しばらくするとエラーが発生しました。(画面のオレンジ色のところ)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/41e07c41-3fee-b670-8bdc-545175d36e2c.png)

(オレンジ色の)エラーメッセージの内容

>This is taking longer than expected. The delay may be caused by high CPU usage in your environment, or your T2 or T3 instance is running out of burstable CPU capacity credits, or there are VPC configuration issues. Please check documentation.

Google翻訳

>これには予想よりも時間がかかっています。 遅延は、環境内のCPU使用率が高いか、T2またはT3インスタンスでバースト可能なCPU容量クレジットが不足しているか、VPC構成に問題があることが原因である可能性があります。 ドキュメントを確認してください。

エラー内容から`172.17.0.0/16`が問題と気が付くのは困難ですね。

エラー発生後の状態も確認しました。
AWSコンソールのCloud9を確認すると問題なく作れたみたいに見えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/36d078d4-98fa-97f2-f65a-a4973ee2c00f.png)

Cloud9のEC2は起動状態でこれまた問題無いように見えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/a82a1366-c908-fe56-c0a5-143d72f6b5fd.png)

Cloud9はCloudFormationスタックで構築されます。そのスタックも`CREATE_COMPLETE`となっていて、これも問題無いように見えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/4ad59a43-c2e5-cf6a-cd16-9ac74d478cf4.png)

という感じで、エラーメッセージからCIDR`172.17.0.0/16`が問題ってことはわかりにくいことがわかりました。

## VPCピア接続時も要注意

Dockerネットワークを理解している方には当然の話ですが、以下の構成でも問題が発生します。

VPC-2(192.168.0.0/16)にCluod9を作ることはできますが、Cloud9から、ピア接続したVPC-1(172.17.0.0/16)のEC2への接続は通信不具合が発生します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/574872b1-601f-67ad-bf20-8afa05b1fb99.png)

## さいごに

Cloud9が好きでよく使うのですが、`172.17.0.0/16`の制限を知らず苦労しました。