AWS,IBM Cloud, Google Cloud Platform, Azure４社の仮想ネットワーク（Vnet/VPC）の比較

パブリッククラウドでは、インターネットや、他のシステムから論理的に切り離された仮想ネットワークを作成する。<br>
この仮想ネットワーク上で、仮想サーバーを起動させることができる。また、サブネットに分割することや、ルートテーブルやACLを設定することで、通信を制御することもできる。

subnetは上述の仮想ネットワークを細かく区切ったネットワークで、セキュリティまたは運用のニーズに基づいてリソースをグループ化できる。インターネットに接続するためには、VMにPublicのIPアドレスを接続、もしくはGatewayを設定する。Publicに公開するかどうかは、クラウド上で構築、提供するシステムの内容によって、クラウドサービス利用者が設計を行う。

以下では、主なパブリッククラウドであるAWS、IBM Cloud、Azure、Google Cloud Platform(GCP)の仮想ネットワークの内容について記載する。

## パブリッククラウド4社の仮想ネットワークの比較

### AWS
- 仮想ネットワーク名: VPC (Virtual Private Cloud)
  - VPCは各リージョン別に作成する。作成時にプライマリーとなるCIDRを指定して作成する。
  - インターネットに接続するためには、インターネットゲートウェイを用意し、GWにsubnetをつける、もしくはNAT ゲートウエイを用意する方法がある。
  - インターネットからの接続のためには、対象のVMにpublicIPもしくはElastic IPを接続する。
  - VPC間のPrivateの接続のためには、VPCピアリング接続を行う。
  - VPC外のサービスに接続する場合にはAWSエンドポイントに接続する(プライベート接続の場合は、PrivateLinkを使用)
  - オンプレ環境とVPC、VPC間の接続ではAWS Transit Gatewayの仕様が可能。
  - サイト間やクライアントと仮想専用回線で接続する場合は、AWS VPNを利用する。

- subnet
  - VPC作成時に、デフォルトで1つ作成されている。
  - subnetの作成には、VPC作成時に含まれているCIDR範囲から使用するCIDRブロックを指定する。
  - アベイラビリティーゾーン内にsubnetは含まれ、アベイラビリティーゾーンを跨いだsubnetの作成はできない。
  - 複数のsubnetを同じアベイラビリティーゾーンに作成することは可能。
  - サブネットのIPアドレス範囲を変更することはできないが、VPCに追加のCIDRブロックをセカンダリCIDRとして追加可能。

- 参照: [Amazon VPC とは?](https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/what-is-amazon-vpc.html)

### IBM Cloud
- 仮想ネットワーク名: VPC (Virtual Private Cloud)
  - VPCは単一のリージョンにデプロイされる。
  - インターネットにアクセスするためには、Public Gatewayをsubnetに接続させる。
  - インターネットからの接続も可能にするためには、対象のVMにFloating IPを設定する、もしくはPublic Load Balancerを用意し、対象VM等にアクセスさせる。
  - VPC間のPrivateの接続のためにはTransit Gatewayを用意し、それぞれのVPCもしくはClassic環境と接続させる。
  - VPC外のサービスとの接続は各サービスのエンドポイントに接続するが、Privateでの接続が必要な場合は、仮想プライベート・エンドポイント・ゲートウェイを使用する。
  - オンプレ環境との接続は、IBM Cloud Direct Linkを使用すると、インターネットにデータが出ることなくVPCにアクセスすることが可能。
  - 仮想プライベート通信を使用して、サイト間とVPC間接続を行う場合はVPN Gateway for VPCを利用する。VPCとユーザー間のVPN通信はClient VPN for VPC(ただしベータ版)を使用することができる。

- subnet
  - subnetの作成には、VPC作成時に含まれているCIDR範囲から使用するCIDRブロックを指定する。
  - アベイラビリティーゾーン内にsubnetは含まれ、アベイラビリティーゾーンを跨いだsubnetの作成はできない。
  - 複数のsubnetを同じアベイラビリティーゾーンに作成することは可能。
  - subnet作成後にIPアドレス数を変更することはできない。

- 参照: [Virtual Private Cloud (VPC) の概要](https://cloud.ibm.com/docs/vpc?topic=vpc-getting-started&interface=cli)

### Google Cloud Platform (GCP)
- 仮想ネットワーク名:  VPC (Virtual Private Cloud)ネットワーク
  - VPCネットワークはグローバルリソースであり、すべてのリージョンやアベイラビリティーゾーンを含んでいる。(特定のリージョンに関連付けられていない)
  - GCPのプロジェクトを作成した時点で、自動的にVPCは作成される。明示的に別のVPCを作成することも可能である。
  - VPC作成時に自動的に作成されたサブネットでは、インターネットにアクセスできる設定になっている。
  - サブネットを限定公開にすることで、インターネット非接続の環境が作成できる。この環境からインターネットに接続するためには、Cloud NATを用意する。
  - 限定公開のサーバーにアクセスするためには、外部IPアドレスのあるLoad Balancerを用意する。
  - オンプレ環境と仮想プライベート通信を使用してアクセスするためには、Cloud VPNを使用する。
  - VPC間での通信は、VPCネットワークピアリングを使用することで、Privateの通信が可能。
  
- subnet
  - subnetの作成には、VPC作成時に含まれているCIDR範囲から使用するCIDRブロックを指定する。
  - Google Cloudのsubnetはリージョンリソースである。subnetごとにIPv4アドレスの範囲が定義される。
  - publicに公開、非公開をsubnetで設定できる。
  - 作成したサブネットの名前やリージョンは後で変更できない。
- 参照: [VPC の概要](https://cloud.google.com/vpc/docs/overview?hl=ja)

### Azure
- 仮想ネットワーク名: VNet (Virtual Network)
  - Azure Virtual Network (VNet)はリージョン内に作成される。作成時にIPアドレスの範囲としてCIDRを指定するが、作成後も変更、追加、削除が可能である。作成時にサポートされる最小の IPv4 subnetは /29、最大は /2となる。
  - defaultで作成されているルートテーブルで、インターネットにアクセスできる設定となっているため、非接続の場合は、カスタムルートテーブルを作成、subnetに紐付ける設定が必要となる。
  - インターネットからVNet内部の仮想マシン(VM)に接続するためには、VMに動的もしくは静的なPublic IPアドレスを振り分ける。もしくは、Public IPアドレスを紐付けたパブリック ロード バランサーを用意する。
  - オンプレ環境と接続するためには、VPN Gatewayを使用する。
  - VNet同士の接続では、VNetピアリングを使用する。別リージョン間での接続では、それぞれにVNetを作成し、VNetピアリングで接続する構成となる。

- subnet
  - subnetはAWSやIBM Cloudとは違い、アベイラビリティーゾーンをまたいで作成可能である。
  - サブネット内にリソースがデプロイされていない場合は、アドレス範囲を変更することができる。

- 参照: [Virtual Network のドキュメント](https://docs.microsoft.com/ja-jp/azure/virtual-network/)