Transit Gatewayを試す
VPCピアリングと違い、Transit Gatewayを使えば複数のVPCを一元的に接続できるため、拡張性のある構成を簡単に実現できます。 各VPCのルートテーブルを設定するだけで、すべてのEC2が相互に通信できるようになるのを試してみました。
目次
はじめに
- VPCピアリングを試すで、2つのVPCにまたがるEC2間の通信ができたのを確認した
- VPCピアリングはあくまで1:1間の通信で、VPCが複数になったときに管理するのが大変になる。
- 大量になったときはTransit Gatewayを使うのがセオリーということで試してみた
- SAP勉強してたらよく出てきたので試してみた
作るもの
- VPCピアリングの例のVPCを3個に拡張する
- 各VPCのプライベートサブネットにnginxをインストールしておき、各VPCから別のVPCのEC2に向かってcurlを飛ばしてnginxのトップページが返ってくるかを確認する
- 各VPCへの接続にはSession Managerを使う。よって、プライベートサブネットからインターネットに出ていける必要があり、NATインスタンスとしてfck-natを使用。
VPCモジュール
ディレクトリは以下の通り。VPCモジュールはmodules/vpc
以下。
VPCピアリングのときのVPCモジュールをそのまま使い回す。
Transit Gateway(vpc_cluster.tf)
以下のコードで、VPCを3個作成し、Transit Gatewayに紐づけられる。
VPCピアリングとの違いは以下の通り。
- Transit Gateway自体にルートテーブルがある
- 各VPCのアップデートのほかに、Transit Gatewayのルートテーブルへの登録が必要。
- デフォルトのTransit Gatewayのルートテーブルで良ければ、各VPCのTransit Gatewayに紐づけた時点で登録される
- (同一アカウントであるかぎりは)VPCピアリングのような承認は不要
- VPCピアリングのときは同一アカウント間でも承認が必要だったが、Transit Gatewayは不要。クロスアカウントになったときはわからない
- Transit GatewayにVPCを紐づけた時点で自動的に通信ができるようになる
- 各VPCで、通信したい他のVPCをルートテーブルに登録する操作は、VPCピアリングのときと同様に必要
各VPCのルートテーブル
マネジメントコンソールで確認してみる。各VPCのCIDRへは、ターゲットがtgw-*
となっており、Transit Gateway経由で接続していることがわかる。
Transit Gatewayのルートテーブル
Transit Gatewayのデフォルトルートテーブル。各VPCが関連付けられているのがわかる。
nginxのEC2(ec2.tf)
VPCピアリングと同様に各VPCのEC2を定義する。セキュリティグループは「接続相手だけ許可」をするとコードが煩雑になるので、「全VPCのEC2があるサブネットからの80からの接続を許可」に変える。
テスト
terraform apply
をすると以下のような出力になったとする。
VPC1のEC2インスタンスからの接続
Session ManagerからEC2に入り、VPC2のEC2(10.10.21.140
)、VPC3のEC2(10.10.37.211
)に対してcurlが飛ばせるか確認する。nginxのトップページが返ってきており、正常にアクセスできている。
VPC2のEC2インスタンスからの接続確認
VPC1のEC2(10.10.4.14
)、VPC3のEC2(10.10.37.211
)に対してcurlが飛ばせるか確認する。正常にアクセスできている。
VPC3のEC2インスタンスからの接続確認
VPC1のEC2(10.10.4.14
)、VPC2のEC2(10.10.21.140
)に対してcurlが飛ばせるか確認する。正常にアクセスできている。
また自分自身のIPのnginxに対しても接続できる。(10.10.37.211
)
所感
- Transit Gateway難しそうだったけど思ったより簡単だった。CIDRが重複しないという縛りは必要だけど、VPCが増えたらこれかな
- あとはコスト次第
Shikoan's ML Blogの中の人が運営しているサークル「じゅ~しぃ~すくりぷと」の本のご案内
技術書コーナー