Transit GatewayとSite-to-Site VPNで3拠点間通信

Transit Gatewayを検証する機会があったので、記録を残したいと思います。
構成はこんな感じです。

TGW1アカウント、TGW2アカウントがアプリケーションの動作を想定したアカウントになり、TGWDCアカウントがデータセンタを想定したアカウントになります。
データセンタとはインターネットVPNで接続し、TGW1,2アカウントと、データセンタでそれぞれ通信を行う必要があるという想定です。

なので今回の記事では、Transit GatewayでTGW1アカウント、TGW2アカウントの2拠点間で通信させる所を実施して、次回の記事でSite-to-Site VPNを組み合わせた3拠点間で通信させる設定を行っていきます。

Transit Gateway

まず、TGW1アカウントでTransit Gatewayを作成して、TGW1アカウントとTGW2アカウント間で通信できるようにしていきます。

TGW1アカウントの作業

VPC - Transit Gatewayを開いて、「Transit Gatewayを作成」を選択します。
特に設定項目がないので、そのまま「作成」を選択します。

状態がAvailableになるのを待ちます。

作成したTransit Gatewayを、TGW2アカウントに共有していきます。
Transit Gatewayにチェックを入れ、アクション - 「Transit Gatewayを共有」を選択します。

Transit Gatewayを共有画面が表示されるので、「Transit Gatewayを共有」を選択します。

Nameにわかりやすい名前を設定、リソース項目の種類で「トランジットゲートウェイ」を選択、 先ほど作成したTransit Gatewayにチェックを入れます。
選択されたリソース項目にリソースIDが表示されるので、チェックを入れて、「次へ」を選択します。

特に設定項目無いので、次へを選択します。

AWSアカウントIDにTGW2アカウントのIDを設定して、「追加」を選択します。
選択されたプリンシパルに追加されるので、「次へ」を選択します。

最後に内容を確認して、「リソース共有を作成」を選択します。

TGW2アカウントの作業

Resource Access Manager - リソースの共有(自分と共有)を開くと、TGW1アカウントから共有されたリソースが表示されているので、選択します。

「リソース共有を承認」を選択します。

状態がAvailableになるのを待ちます。

これでTGW1アカウントとTGW2アカウントで、1つのTransit Gatewayが共有出来た状態になりました。

続いて、Transit GatewayとVPCを紐づけて行きます。

TGW1アカウントの作業

TGW1アカウントで、VPC - Transit Gateway アタッチメント を開いて、「Transit Gateway アタッチメントを作成」を選択します。

Transit Gateway ID項目で、作成したTransit Gatewayを指定します。
VPC ID項目で、接続対象とするVPCを選択します、サブネットID項目が表示されるので、対象とするサブネットを選択します。(複数サブネットがあって、それぞれのサブネットに通信対象のリソースがある場合、選択に悩むと思いますが、ここで選択していないサブネットもTransit Gatewayを使って通信が可能です)

TGW2アカウントの作業

同様の設定をTGW2アカウントでも行っていきます。結果はこうなります。

あとは、ルーティング設定をすればTGW1アカウントとTGW2アカウントで通信が可能になります。

TGW1アカウントの作業

VPC − ルートテーブル から、検証用のEC2を配置するサブネットのルートテーブルのルート設定を変更します。
TGW2アカウントへのルートとして、10.2.1.0/24宛のルートを登録します。

検証用にEC2を作成しておきます。上記で設定したルートテーブルを使うサブネットにEC2を配置し、セキュリティグループでICMPの通信を許可してください。

TGW2アカウントの作業

同様の設定をTGW2アカウントでも行っていきます。結果はこうなります。EC2も同様に作成してください。

TGW1アカウントの作業

EC2インスタンスに接続し、pingで疎通してみます。下記のように応答が帰ってきます。

sh-5.2$ ping 10.2.1.5
PING 10.2.1.5 (10.2.1.5) 56(84) bytes of data.
64 bytes from 10.2.1.5: icmp_seq=1 ttl=126 time=0.865 ms
64 bytes from 10.2.1.5: icmp_seq=2 ttl=126 time=0.722 ms
64 bytes from 10.2.1.5: icmp_seq=3 ttl=126 time=0.602 ms
64 bytes from 10.2.1.5: icmp_seq=4 ttl=126 time=0.756 ms
64 bytes from 10.2.1.5: icmp_seq=5 ttl=126 time=0.662 ms
^C
--- 10.2.1.5 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4014ms
rtt min/avg/max/mdev = 0.602/0.721/0.865/0.089 ms

TGW2アカウントの作業

同じく、EC2インスタンスに接続し、pingで疎通してみます。下記のように応答が帰ってきます。

sh-5.2$ ping 10.1.1.6
PING 10.1.1.6 (10.1.1.6) 56(84) bytes of data.
64 bytes from 10.1.1.6: icmp_seq=1 ttl=126 time=0.909 ms
64 bytes from 10.1.1.6: icmp_seq=2 ttl=126 time=1.57 ms
64 bytes from 10.1.1.6: icmp_seq=3 ttl=126 time=0.777 ms
64 bytes from 10.1.1.6: icmp_seq=4 ttl=126 time=0.720 ms
64 bytes from 10.1.1.6: icmp_seq=5 ttl=126 time=0.777 ms
^C
--- 10.1.1.6 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4073ms
rtt min/avg/max/mdev = 0.720/0.950/1.570/0.315 ms

これでTGW1アカウント、TGW2アカウントの2拠点間で通信させることが出来ました。今回は2つのVPCで設定しているので、VPCピアリングで設定したほうが楽かもですが、数が増えていくと管理コストに差が出てくると思います。

あと、費用面ですが、
 ・AWS Transit Gateway のアタッチメントごとの料金 :0.07USD/1時間
 ・処理データ 1 GB あたりの料金 :0.02USD
 (東京リージョン)
となります、費用お見積り時にご注意くださいませ。
料金は変わる可能性がありますので、最新の料金はこちらでご確認ください。
https://aws.amazon.com/jp/transit-gateway/pricing/