Transit Gatewayを利用してVPC間で通信してみた

Transit Gatewayは複数VPCや、オンプレミスを単一のゲートウェイで接続することができるサービスです。Transit Gateway登場以前は、接続先が増えるたびにピアリングや、Direct Connect等でフルメッシュ構成が必要でした。

そんなTransit Gatewayが先日、東京リージョンでDirect Connectサポートを発表しました。これによりTransit Gatewayの利用を検討する機会が増えそうです。(体感)

本エントリでは、Transit Gatewayの理解を深めるために、Transit Gatewayの用語を交えつつ、シンプルな構成 *1で実際に構築してみたいと思います。

構成&前提

構成

最終的には以下のような構成で、各VPCから双方向に通信を実施してみたいと思います。

00

前提

以下VPC、EC2が作成済みであることを前提としています。

00-0

やってみた

Transit Gateway作成

VPCコンソールより[Transit Gateway]-[Create Transit Gateway]をクリックします。

ここでは、アソシエーション、プロパゲーション(後ほど手動で行います)等のデフォルトのチェックは外しました。[Name tag]に任意の名称を指定し[Create Transit Gateway]をクリックします。

「State」が「available」になることを確認してください。

Transit Gatewayが作成できると、以下のようなイメージになります。

05

ルートテーブル作成

Transit Gatewayが持つ経路情報テーブル(ルートテーブル)を作成します。このルートテーブルは、通信のネクストホップの決定に利用されます。Transit Gatewayはルートテーブルを複数作成できますが、ここでは単一のルートテーブルを作成します。以下は、ルートテーブル作成後のイメージです。

09

Transit Gateway作成時にデフォルトのチェックを外していたため、現時点でルートテーブルは存在しません。

[Create Transit Gateway Route Table]をクリックします。

ルートテーブルに任意の名称を付け、さきほど作成したTransit Gatewayを指定します。

アタッチメント

VPCやDirect Connect等をTransit Gatewayに紐付ける作業を行います。アタッチメント後は、以下のようなイメージになります。

10

A-VPC

A-VPC(イメージ左)をアタッチメントします。[Create Transit Gateway Attachment]をクリックします。

さきほど作成したTransit Gatewayをアタッチメント先に指定します。アタッチメントするVPC、サブネットを指定し[Create attachment]をクリックします。

「State」が「available」になるとアタッチメントは完了です。

B-VPC

B-VPC(イメージ右)をアタッチメントします。作業手順は同様です。アタッチメントするVPCにB-VPC、サブネットを指定し[Create attachment]をクリックします。

「State」が「available」になるとアタッチメントは完了です。

アタッチメントは完了しましたが、これだけでは通信を行うことができません。

アソシエーション

アタッチメントしたVPC等をルートテーブルに紐付けます。それにより、ルートテーブルにパケットが送信されるようになります。アソシエーション後のイメージです。

18

A-VPC

A-VPC(イメージ左)をアソシエーションします。[Create association]をクリックします。

A-VPCのアタッチメントを指定し、[Create association]をクリックします。

アソシエーションが確認できました。

B-VPC

B-VPC(イメージ右)をアソシエーションします。作業手順は同様です。B-VPCのアタッチメントを指定し、[Create association]をクリックします。

アソシエーションが確認できました。

プロパゲーション

アタッチメントしたVPCからルートテーブルに経路を伝播します。アソシエートしたVPCからプロパゲーションされることでルートテーブルが完成し、アタッチメントしたリソース間(ここではVPC)で通信が可能になります。プロパゲーションが実施後のイメージです。

24

A-VPC

A-VPC(イメージ左)をプロパゲーションします。[Create propagation]をクリックします。

A-VPCのアタッチメントを指定し、[Create propagation]をクリックします。

「State」が「enabled」になると、ルートテーブルに経路が追加されます。

B-VPC

B-VPC(イメージ右)をプロパゲーションします。作業手順は同様です。B-VPCのアタッチメントを指定し、[Create propagation]をクリックします。

「State」が「enabled」になると、ルートテーブルに経路が追加されます。

なお、プロパゲートはアソシエートに関係なく、複数ルートテーブルに設定可能です。

サブネットのルートテーブルに経路追加

通信を行いたい各サブネットのルートテーブルに、Transit Gatewayへの経路を追加します。

A-Subnet

B-Subnetへの経路を追加します。送信先にB-SubnetのCIDR、ターゲットには作成したTransit Gatewayを指定します。

B-Subnet

A-Subnetへの経路を追加します。送信先にA-SubnetのCIDR、ターゲットには作成したTransit Gatewayを指定します。

セキュリティグループ編集

各セキュリティグループで通信を許可します。

アクセス確認

Transit Gatewayにアタッチメントしたリソース間で通信を確認してみます。

A-Server → B-Server

[ec2-user@ip-10-0-0-161 ~]$ ping -c 3 172.16.0.107
PING 172.16.0.107 (172.16.0.107) 56(84) bytes of data.
64 bytes from 172.16.0.107: icmp_seq=1 ttl=254 time=0.955 ms
64 bytes from 172.16.0.107: icmp_seq=2 ttl=254 time=0.595 ms
64 bytes from 172.16.0.107: icmp_seq=3 ttl=254 time=0.674 ms

--- 172.16.0.107 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2018ms
rtt min/avg/max/mdev = 0.595/0.741/0.955/0.156 ms

B-Server → A-Server

[ec2-user@ip-172-16-0-107 ~]$ ping -c 3 10.0.0.161
PING 10.0.0.161 (10.0.0.161) 56(84) bytes of data.
64 bytes from 10.0.0.161: icmp_seq=1 ttl=254 time=0.992 ms
64 bytes from 10.0.0.161: icmp_seq=2 ttl=254 time=0.639 ms
64 bytes from 10.0.0.161: icmp_seq=3 ttl=254 time=0.759 ms

--- 10.0.0.161 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2025ms
rtt min/avg/max/mdev = 0.639/0.796/0.992/0.150 ms

想定通りの通信が確認できました。

さいごに

Transit Gatewayの理解を深めるためにシンプルな構成で構築を実施してみました。VPC、VPN、Direct Connectなど、接続するポイントが多く想定される場合は、Transit Gatewayの利用を検討してみてはいかがでしょうか。

以上、坂巻(@nochi251)でした!

参考

脚注

  1. 単一のVPC間通信でTransit Gatewayを利用することはないと思いますが..