0.はじめに
以下のような構成でVPC-AとVPC-Bを接続するためにTransit Gatewayを導入することを検討していました。検討時に気をつけたことやはまったことを共有します。
1.Transit Gatewayのデフォルトのルートテーブルを使うかどうか
Transit Gatewayにはデフォルトのルートテーブルが備わっています。これを用いることでTransit Gatewayにアタッチ/アソシエート/プロパゲートした任意のVPCの組み合わせで通信できます。一方、デフォルトのルートテーブルを使わない場合は、通信させたいVPCの組み合わせをTransit Gatewayのルートテーブルに設定していくことになります。
Transit Gatewayを経由するVPC間の通信が、1対1で決まることが多いのであれば独自のルートテーブルを使う、逆に複数のVPCと通信したい場合はデフォルトのルートテーブルを用いるのが良いのではないでしょうか。設定が煩雑になって運用がしにくくなるためです。デフォルトのルートテーブルを使った場合でも、各セキュリティグループやACLでIngressの通信を制御することもできます。
2.インターネット接続を集約するかどうか
インターネットへのEgressの口を各VPCごとに持つのか、あるVPCのpublicサブネットに集約するのかどうか、というのは一つの検討ポイントだと思います。集約する場合の検討ポイントとして、Transit GatewayやNAT Gateway、Internet Gatewayの可用性を考えておく必要があります。
Transit Gatewayの制限事項としては以下のような項目があります。帯域に関してはVPC間を接続する場合は最大でバースト 50 Gbps出るので、Transit Gateway自体の帯域が不足することはまずないでしょう。帯域に関してはInternet Gatewayは無制限、NAT Gatewayも 5 Gbpsの帯域をサポートして 45 Gbps まで自動的に拡張するので、集約したとしても問題ないと考えられます。
Transit Gatewayのパフォーマンスと制限
制限 | デフォルト |
---|---|
AWS Transit Gateway アタッチメントの数 | 5000 |
VPN 接続ごとの最大帯域幅* | 1.25 Gbps |
VPC、Direct Connect Gateway、またはピア Transit Gateway 接続あたりの最大帯域幅 (バースト) | 50 Gbps |
アカウントあたりの AWS Transit Gateway の数 | 5 |
VPC あたりの AWS Transit Gateway アタッチメントの数 | 5 |
ルートの数 | 10000 |
AWS Transit Gateway あたりの Direct Connect Gateway の数 | 20 |
https://aws.amazon.com/jp/transit-gateway/faqs/
https://aws.amazon.com/jp/vpc/faqs/
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-nat-gateway.html
3.インターネット接続を集約するときのルートテーブルの設定
インターネットに接続しない、純粋にVPC間をTransit Gatewayで接続する場合は Transit GatewayでVPC間通信する構成をTerraformで作成してみた で説明されている手順でできます。
ここで、例えばB-VPCからインターネットに抜ける通信を考えてみます。以下のようなイメージです。
Transit Gateway越しにインターネットに抜ける場合ポイントは以下です。
- publicサブネットを持たないVPC(本説明の場合はB-VPC)にあるサブネットのデフォルトゲートウェイはTransit Gateway
- publicサブネットを持つVPC(本説明の場合はA-VPC)の publicサブネット のルートテーブルに、B-VPCのCIDRに含まれる宛先IPアドレスの通信の経路を Transit Gateway宛 に設定する
- Transit Gatewayのデフォルトのルートテーブルにstaticな経路としてデフォルトルートをpublicサブネットを持つVPC(本説明の場合はA-VPC)宛に設定する
ということです。私がはまったポイントとして、A-VPC側のpublicのルートテーブルにはA-VPCの(Transit Gatewayとアタッチ/アソシエート/プロパゲートしている)private側へのルートを設定していたため通信できず、はまりました。
4.同じアベイラビリティゾーンを使って通信する
仕様的な話なので知っておけばOKです。が見落としそうなポイントでもありそうです。可用性や拡張性設計の際に注意しましょうということなのですが、同一のAZをENIを経由して通信します。BlackBeltの資料や以下のClassmethodさんの記事にもあります。
x.落ち葉拾い
Terraformを使った場合、デフォルトのTransit Gatewayのルートテーブルは自動で作成されるため、staticなルートを追加したい場合、手動で追加しないといけませんでした。以下のような tf ファイルでリソースを生成したときに生成されるデフォルトのルートテーブルのIDを取得できるとよいのですが、取得方法わからずです。data
で作成したリソースを元に追加するのが良いのかも知れません。
resource aws_ec2_transit_gateway test {
vpn_ecmp_support = "disable"
default_route_table_association = "enable"
default_route_table_propagation = "enable"
auto_accept_shared_attachments = "disable"
tags = {
Name = "test_transit_gateway"
}
}
Terraformで検証環境を構築したときのtfファイルたちは こちら に置いておきました。
参考
全般的に以下の資料が参考になります。Transit Gatewayを導入する際はぜひ読んでおく資料かと思います。