AWS Transit Gateway外接集約構成のルーティングはAZを意識する
ども、ゲストの大瀧です。
AWS Transit GatewayはVPCの相互接続をVPCピアリング接続のメッシュ型からハブアンドスポーク型に進化させる、VPCの比較的新しい機能です。外接集約構成というのはインターネットなどAWSの外部への接続をTransit Gateway経由で特定のVPCに集約し、集中管理する構成を指します。
我ながら難解なタイトルを付けたと自覚していますが、本記事ではそんな外接集約構成におけるTransit Gateway(以下TGW)の興味深い挙動を見つけたのでシェアします。
Transit Gatewayで2つのVPCの相互接続
まずは、前提となるVPCの相互接続構成からおさらいします。
2つのVPC(VPC-AとVPC-B)をTGWで相互接続する場合、TGWを介すルーティングとして以下を設定します。
- VPC-A
- VPCサブネットのルートテーブルでVPC-B宛てをTGWに指定
- TGW
- TGWルートテーブルでVPC-A宛てをVPC-Aに設定
- TGWルートテーブルでVPC-B宛てをVPC-Bに設定
- VPC-B
- VPCサブネットのルートテーブルでVPC-A宛てをTGWに指定
TGWルートテーブルでPropagationsを有効にすれば、TGWのルーティング2つを自動設定にすることができますね。また、VPCを複数AZ(アベイラビリティゾーン)で構成する場合、TGWアタッチメントの設定で各AZごとに1つのサブネットを選択する必要があります。
Transit Gatewayで外接を集約するVPCを構成
ここからが今回の本題です。複数のVPCからインターネット接続など外接を集約する構成で、これらのルーティングがどうなるかを考えます。複数のVPC(VPC-A、VPC-B、VPC-C...)に加えて外接を集約するVPC(VPC-X)をTGWに接続、各VPCからのデフォルトルート(0.0.0.0/0
)をVPC-XにあるNAT Gatewayに向ける構成です。
先ほどの相互接続をベースとし、デフォルトルートをVPC-Xに向ける設定を追加すると...
- VPC-A
- VPCサブネットのルートテーブルでデフォルトルートをTGWに指定 -①
- TGW
- TGWルートテーブルでVPC-A宛てをVPC-Aに設定
- TGWルートテーブルでデフォルトルートをVPC-Xに設定 -②
- VPC-X(外接集約)
- VPCサブネットのルートテーブルでVPC-A宛てをTGWに指定
- TGWアタッチメントで選択するVPCサブネットのルートテーブルでデフォルトルートをNAT Gatewayに指定-③
- NAT GatewayのVPCサブネットのルートテーブルでデフォルトルートをIGWに指定 -④
(単純化のため、VPC-BとVPC-Cの設定は省略)
VPC-Xの設定が込み入ってきました。図に示すと以下の感じです。丸数字の通りにトラフィックがルーティングされていきます。
理屈としてはこんな感じなのですが、設定していてひとつ疑問が出てきました。②で VPC-X全体 を指定しているのに対して③を設定しているのは VPCサブネット であり、TGWアタッチメントではAZごとにサブネットを選んでいるので、複数AZ構成ではアタッチメントに紐付くVPCサブネットが複数あるわけです。 どのVPCサブネットのルートテーブルが利用されるのでしょうか?
どうやら、 送信元(VPC-A)のVPCサブネットが所属するAZと同じAZのVPCサブネット のルーティングテーブルが採用されることがわかりました。例えば、AZ IDapne1-az2
のVPCサブネットから送出されるトラフィックはTGW通過後、同じapne1-az2
にアタッチされているVPC-XのVPCサブネットのルートテーブルによりNAT Gatewayにルーティングされます。
検証としては、TGWにAZ IDapne1-az2
とapne1-az4
のVPCサブネットをアタッチし、apne1-az4
のVPCサブネットのみNAT Gatewayに向けるルーティングを設定してみました。すると、VPC-AのAZ IDapne1-az2
にあるVPCサブネットからNAT Gatewayには通信できませんでした。
構成を変えずにVPC-AのAZ IDapne1-az4
のVPCサブネットから試してみると、こちらはNAT Gatewayに通信できました。
TGWでアタッチするVPCサブネットのルーティングテーブルは同じ設定にすることが多いと思いますが、一方で送信元のVPCのAZと集約するVPCのAZの関連性に気づかず、集約するVPCにアタッチするAZが少なくて特定AZからNAT Gatewayへの通信ができない、といったトラブルになりそうです。NAT Gatewayに限らず、vRXのようなEC2ベースのVPN接続を集約する場合も同様のトラブルが考えられます。
まとめ
どう構成するのが良いでしょうか。TGWに接続する全てのVPCの構成が把握できるのであれば、各VPCで使用する全てのAZを集約するVPCへのアタッチメントに含めるべきですし、クロスアカウントなどTGWに接続してくるVPCのAZの把握が難しい環境であれば、集約するVPCで選択できる全てのAZをアタッチメントに含めるのが良いでしょう。
ちなみにNAT Gatewayを配置するAZは今回の設定とは関係ありません(集約するVPCのVPCサブネットのルートテーブルに従う)ので、全てのAZを選択する必要はありません。