TransitGatewayとVPCPeer接続を比較してみた

# 初めに
最近VPC間接続の方法について検討する機会があり、その際にVPC間接続として以下の方法を比較したので、その内容を纏めてみます。

- VPCピア
- TransitGateway

# サービスの紹介
## VPCピア接続

VPCピア接続とはVPC間をプライベート接続するVPCの機能となります。
NW構成としては、メッシュ型の構成となります。

また、接続できるのはVPCのみでオンプレミスのNWは接続する事ができません。


## TransitGateway
TrannsitGateway は VPC間接続だけではなく、オンプレミスとの接続(専用線/VPN)を纏める事ができるゲートウェイサービスです。
NW構成としてが中央にTransitGatewayがあるハブ型のNW構成となります。

# 接続させるNWについて
## VPCピア接続
VPC間の接続のみとなります。

## TrannsitGateway接続
VPC以外に以下を対応しています。

- DirectConnect
- VPN接続
- DirectConnectGateway

そのため、オンプレミスとDX接続をさせて、複数のVPCも接続させたいというケースでは、TrannsitGatewayで集中管理することが可能でする。

# 設定について
## VPCピア接続

VPCピア接続する際は以下の設定が必要となります。

- VPCピア接続設定
- サブネットルートテーブルの設定

設定内容としてはシンプルです。
上記設定は 1体1 の接続毎に実施する必要があります。
4つのVPCを相互接続させるためには 6 回作業を実施する必要があります。

接続させるNWが増える毎に設定箇所が増えたり、ルーティングを各々のサブネットルートテーブルで制御する形になるので、複雑性もましていきます。
例えば、4つのVPCピアされたVPC間接続に追加でVPCを一つ追加したい場合には、追加するVPCと4つのVPC間でそれぞれVPCピア接続を実施しなければいけません。

- VPCピア接続設定(4回)
- サブネットルートテーブルの設定(5回)
  - ルートテーブル毎に追加するVPCのCIDRの通信を対応したVPCピア接続と接続させる設定が必要


## TransitGateway 作成

TransitGatewayでVPC間接続させる場合は、以下の設定が必要になります。

- TransitGatewayの設定(1回のみ)
- TransitGatewayアタッチメント作成(VPC毎)
- Transit Gatewayルートテーブルの作成/アソシエーション(VPC単位/共用も可能)
- サブネットルートテーブルの設定

上記の様に設定内容自体はVPCピア接続と比較して複雑となります。
4つのVPCを相互接続させるためには以下の設定が必要となります。

- TransitGatewayの設定(1回のみ)
- TransitGatewayアタッチメント作成(VPC毎：4回)
- Transit Gatewayルートテーブルの作成/アソシエーション(相互接続させる場合は1回のみ)
- サブネットルートテーブルの設定(4回：NW要件次第だが同一の設定でも可能な場合が多い)

ただし、接続させるNWの数が増える毎に効果が発揮されます。

例えば、4つのTransit Gatewayで接続されたVPC間接続に追加でVPCを一つ追加したい場合は、以下の作業となりVPCピア接続より作業内容がシンプルになります。

- TransitGatewayアタッチメント作成(1回)
- Transit Gatewayルートテーブルの変更/アソシエーション(既存のルートテーブルの変更のみ)

# VPC間のルーティング
## VPCピア接続

すべてのVPCを接続させるのではなく、それぞれのVPCで接続させるVPCを制御する場合は、VPCピア接続をさせるか・させないかで制御します。

A/B/C と3つのVPCがある場合、AはB/Cと接続させて、BはAとだけ接続させる場合は、以下の設定となります。

- A と B をピア接続
- A と C をピア接続

その為、それぞれのVPCがどのVPCに接続されているかはそれぞれのVPCの設定を確認する必要があり、
接続するVPCが増えるに従い管理が大変となります。

## TransitGateway

TransitGatewayの場合は、以下の設定設定とすることでルーティングをTransitGatewayに集約する事ができます。

- 接続要否関わらずプライベートIPのCIDRは全てをTransitGatewayにルーティング

その為、すべてのVPCを接続させるのではなく、それぞれのVPCで接続させるVPCを変更したい場合は、TransitGatewayルートテーブルで制御できるため、接続するVPCが増えてもTransitGatewayルートテーブルの確認のみで、VPC間のルーティングを確認する事が可能です。

# マルチリージョン接続について
## VPCピア接続

VPCピアのマルチリージョン接続も対応しています。

## TransitGateway

2019年12月のre:Inventでインターリージョンピアリング機能がリリースされたことにより実現が可能となりました。
実装イメージとしては、それぞれのリージョンに設置されたTransitGatewayどうしを接続させるイメージになります。

https://aws.amazon.com/jp/blogs/news/aws-transit-gateway-adds-multicast-and-inter-regional-peering/


# マルチアカウント接続について
## VPCピア接続

アカウント跨ぎのVPCピア接続のサポートしています。

## TransitGateway

アカウント跨ぎのTransitGatewayの利用も対応しています。
その場合、`AWS Resource Access Manager (RAM)`を利用してTransitGatewayをアカウント間で共有する必要があります。

# コスト
## VPCピア接続
無料で利用可能です。

ただし、VPC間のデータ転送量の従量課金が掛かります。

## TransitGateway
TransitGatewayのアタッチメント毎に料金(1時間課金)が掛かります。

また、VPC間のデータ転送量の従量課金が掛かります。

# その他の比較
## VPCピア接続

セキュリティグループの相互参照が対応しています。
セキュリティグループの相互参照とはセキュリティグループ内でセキュリティグループIDを指定して接続許可を与える方法です。

セキュリティグループの相互参照が対応していることにより、VPC間のリソース単位の細かいアクセス制御が可能となっています。

## TransitGateway
セキュリティグループの相互参照が非対応です。
そのため、VPC間のセキュリティグループによる制御がCIDRかIP単位でのアクセス許可となるため、ALB/RDS等のIPが固定化できないサービスからの接続許可はCIDR単位の大きめな許可が必要となります。

TransitGateway特有の特徴としては、2019年12月のre:InventでVPC間のマルチキャストトラフィックのルーティングがサポートされました。

https://docs.aws.amazon.com/vpc/latest/tgw/tgw-multicast-overview.html

# ユースケース
今まで比較した結果をもとにそれぞれの機能のユースケースを記載します。

## VPCピア接続

VPC間の接続数が多くなく、接続数の増加も予定していないケースであればVPCピア接続で十分かと思います。
VPC間の接続数が多くなければ、設定負荷も高くなく、設定管理の煩雑性のデメリットの影響もそれほど大きく影響しないと思います。

また、コストメリットもあります。

## TransitGateway

システム間連携が比較的多くあるケースではTransitGatewayを選択するほうは、運用管理面でベネフィットを得られるかと思います。
具体的には以下の様なケースの場合はTransitGatewayを利用した方が良い気がします。

- VPC間の接続数が単純に多い
  - 拠点間にVPCが分かれていて相互接続が必要なシステム 等
- VPC間の接続数が比較的多く、ルーティングも複雑
  - 共用利用するシステムがあり、共用システムにはサブシステム全てを接続させる必要がある
  - サブシステム間の通信はシステム毎に定義されている
  - 等
- DX/VPN/VPN間接続を利用しているシステム
  - オンプレミスとの接続でメインでDX、バックアップでVPNwo利用している
  - オンプレミスと接続するVPCが複数あり、VPC単位での接続もある
  - 等

注意が必要なのは、接続するVPCが増える毎にコストも比例して大きくなっていくため、事前にコスト計算をしておくことをお勧めいたします。