AWS Transit Gatewayは、複数のVPCとオンプレミスネットワークを一元的に接続するリージョナルネットワークハブです。従来のVPCピアリングの複雑さを解消し、スケーラブルなネットワークアーキテクチャを実現します。
なぜTransit Gatewayが必要か
VPCピアリングの限界
flowchart TB
subgraph Peering["VPCピアリング(フルメッシュ)"]
VP1["VPC 1"] <--> VP2["VPC 2"]
VP2 <--> VP3["VPC 3"]
VP3 <--> VP4["VPC 4"]
VP4 <--> VP1
VP1 <--> VP3
VP2 <--> VP4
end
subgraph TGW["Transit Gateway(ハブ&スポーク)"]
TG["Transit Gateway"]
V1["VPC 1"] --> TG
V2["VPC 2"] --> TG
V3["VPC 3"] --> TG
V4["VPC 4"] --> TG
end
style Peering fill:#ef4444,color:#fff
style TGW fill:#22c55e,color:#fff
接続数の比較
| VPC数 | ピアリング接続数 | TGWアタッチメント数 |
|---|---|---|
| 4 | 6 | 4 |
| 10 | 45 | 10 |
| 50 | 1,225 | 50 |
| 100 | 4,950 | 100 |
n個のVPCをフルメッシュで接続するには n×(n-1)/2 の接続が必要ですが、Transit Gatewayならn個のアタッチメントで済みます。
Transit Gatewayの基本概念
コンポーネント
flowchart TB
subgraph TGW["Transit Gateway"]
RT1["ルートテーブル1"]
RT2["ルートテーブル2"]
end
subgraph Attachments["アタッチメント"]
VPC1["VPCアタッチメント"]
VPC2["VPCアタッチメント"]
VPN["VPNアタッチメント"]
DX["Direct Connect<br/>アタッチメント"]
Peer["ピアリング<br/>アタッチメント"]
end
VPC1 --> RT1
VPC2 --> RT1
VPN --> RT2
DX --> RT2
Peer --> RT2
style TGW fill:#3b82f6,color:#fff
style Attachments fill:#22c55e,color:#fff
用語の整理
| コンポーネント | 説明 |
|---|---|
| Transit Gateway | リージョナルなネットワークハブ |
| アタッチメント | TGWへの接続(VPC、VPN、DX、ピアリング) |
| ルートテーブル | トラフィックのルーティングを制御 |
| 関連付け | アタッチメントとルートテーブルの紐付け |
| 伝播 | アタッチメントからルートを自動追加 |
アタッチメントの種類
VPCアタッチメント
flowchart TB
subgraph VPC["VPC"]
subgraph AZ1["AZ-a"]
Subnet1["サブネット1"]
end
subgraph AZ2["AZ-b"]
Subnet2["サブネット2"]
end
end
subgraph TGW["Transit Gateway"]
ENI1["ENI"]
ENI2["ENI"]
end
Subnet1 --> ENI1
Subnet2 --> ENI2
style VPC fill:#3b82f6,color:#fff
style TGW fill:#22c55e,color:#fff
重要: 各AZにサブネットを指定する必要があります。高可用性のために複数AZを使用してください。
VPNアタッチメント
Site-to-Site VPN接続をTransit Gatewayに直接終端:
# VPNアタッチメントの作成
aws ec2 create-vpn-connection \
--type ipsec.1 \
--customer-gateway-id cgw-xxx \
--transit-gateway-id tgw-xxx \
--options TunnelOptions=[{PreSharedKey=xxx}]
Direct Connectアタッチメント
Direct Connect Gateway経由でTransit Gatewayに接続:
flowchart LR
OnPrem["オンプレミス"] --> DX["Direct Connect"]
DX --> DXGW["DX Gateway"]
DXGW --> TGW["Transit Gateway"]
TGW --> VPC1["VPC 1"]
TGW --> VPC2["VPC 2"]
style DXGW fill:#f59e0b,color:#000
style TGW fill:#3b82f6,color:#fff
ピアリングアタッチメント
異なるリージョンのTransit Gateway同士を接続:
flowchart LR
subgraph Tokyo["東京リージョン"]
TGW1["TGW Tokyo"]
VPC1["VPC 1"]
VPC2["VPC 2"]
end
subgraph Singapore["シンガポール"]
TGW2["TGW Singapore"]
VPC3["VPC 3"]
end
VPC1 --> TGW1
VPC2 --> TGW1
TGW1 <--> |"ピアリング"| TGW2
TGW2 --> VPC3
style Tokyo fill:#3b82f6,color:#fff
style Singapore fill:#22c55e,color:#fff
ルーティング
ルートテーブルの概念
flowchart TB
subgraph TGW["Transit Gateway"]
subgraph RT["ルートテーブル"]
Route1["10.1.0.0/16 → VPC1"]
Route2["10.2.0.0/16 → VPC2"]
Route3["192.168.0.0/16 → VPN"]
Route4["0.0.0.0/0 → Firewall VPC"]
end
end
Attach1["VPC1アタッチメント"] --> |"関連付け"| RT
Attach2["VPC2アタッチメント"] --> |"関連付け"| RT
style TGW fill:#3b82f6,color:#fff
関連付けと伝播
| 機能 | 説明 |
|---|---|
| 関連付け(Association) | アタッチメントのトラフィックがどのルートテーブルを使用するか |
| 伝播(Propagation) | アタッチメントのCIDRを自動的にルートテーブルに追加 |
ルーティング設計パターン
パターン1: フラットルーティング
すべてのVPCが相互に通信可能:
flowchart TB
subgraph TGW["Transit Gateway"]
RT["単一ルートテーブル"]
end
VPC1["VPC 1"] --> RT
VPC2["VPC 2"] --> RT
VPC3["VPC 3"] --> RT
RT --> |"伝播"| VPC1
RT --> |"伝播"| VPC2
RT --> |"伝播"| VPC3
style TGW fill:#3b82f6,color:#fff
パターン2: セグメント化
環境ごとにルートテーブルを分離:
flowchart TB
subgraph TGW["Transit Gateway"]
RTprod["本番ルートテーブル"]
RTdev["開発ルートテーブル"]
RTshared["共有サービスRT"]
end
Prod1["本番VPC1"] --> RTprod
Prod2["本番VPC2"] --> RTprod
Dev1["開発VPC"] --> RTdev
Shared["共有VPC"] --> RTshared
RTprod --> Shared
RTdev --> Shared
style TGW fill:#3b82f6,color:#fff
パターン3: Inspection VPC
すべてのトラフィックをファイアウォール経由:
flowchart TB
subgraph TGW["Transit Gateway"]
RTspoke["スポークRT"]
RTinspection["検査RT"]
end
VPC1["VPC 1"] --> RTspoke
VPC2["VPC 2"] --> RTspoke
subgraph Inspection["Inspection VPC"]
FW["Firewall<br/>(GWLB)"]
end
RTspoke --> |"0.0.0.0/0"| Inspection
Inspection --> RTinspection
RTinspection --> |"各CIDR"| VPC1
RTinspection --> |"各CIDR"| VPC2
style Inspection fill:#ef4444,color:#fff
style TGW fill:#3b82f6,color:#fff
マルチリージョン設計
Inter-Region Peering
flowchart TB
subgraph Region1["ap-northeast-1"]
TGW1["TGW"]
VPC1["VPC 10.1.0.0/16"]
VPC2["VPC 10.2.0.0/16"]
end
subgraph Region2["us-east-1"]
TGW2["TGW"]
VPC3["VPC 10.3.0.0/16"]
end
subgraph Region3["eu-west-1"]
TGW3["TGW"]
VPC4["VPC 10.4.0.0/16"]
end
VPC1 --> TGW1
VPC2 --> TGW1
VPC3 --> TGW2
VPC4 --> TGW3
TGW1 <--> TGW2
TGW2 <--> TGW3
TGW1 <--> TGW3
style Region1 fill:#3b82f6,color:#fff
style Region2 fill:#22c55e,color:#fff
style Region3 fill:#8b5cf6,color:#fff
ルーティング設定
各リージョンのルートテーブルに他リージョンへのルートを追加:
# 東京リージョンのルートテーブルに追加
aws ec2 create-transit-gateway-route \
--transit-gateway-route-table-id tgw-rtb-tokyo \
--destination-cidr-block 10.3.0.0/16 \
--transit-gateway-attachment-id tgw-attach-peering-us
Network Manager
概要
AWS Network Managerは、グローバルネットワークを可視化・監視するサービスです。
flowchart TB
subgraph NetworkManager["Network Manager"]
Global["グローバルネットワーク"]
Topology["トポロジー可視化"]
Events["イベント監視"]
Insights["Route Analyzer"]
end
TGW1["TGW Tokyo"] --> Global
TGW2["TGW Singapore"] --> Global
SD["SD-WAN"] --> Global
style NetworkManager fill:#f59e0b,color:#000
主要機能
| 機能 | 説明 |
|---|---|
| トポロジーマップ | ネットワーク構成を視覚化 |
| イベントダッシュボード | 接続状態の変化を監視 |
| Route Analyzer | ルーティングの分析・検証 |
| CloudWatch統合 | メトリクスとアラーム |
RAM(Resource Access Manager)との連携
マルチアカウントでのTGW共有
flowchart TB
subgraph NetworkAccount["ネットワークアカウント"]
TGW["Transit Gateway"]
end
subgraph RAM["RAM"]
Share["リソース共有"]
end
subgraph Account1["アカウント1"]
VPC1["VPC 1"]
end
subgraph Account2["アカウント2"]
VPC2["VPC 2"]
end
TGW --> Share
Share --> Account1
Share --> Account2
VPC1 --> |"アタッチ"| TGW
VPC2 --> |"アタッチ"| TGW
style NetworkAccount fill:#3b82f6,color:#fff
style Account1 fill:#22c55e,color:#fff
style Account2 fill:#22c55e,color:#fff
設定手順
# 1. ネットワークアカウントでRAM共有を作成
aws ram create-resource-share \
--name "transit-gateway-share" \
--resource-arns arn:aws:ec2:ap-northeast-1:111111111111:transit-gateway/tgw-xxx \
--principals arn:aws:organizations::111111111111:organization/o-xxx
# 2. 各アカウントからアタッチメントを作成
aws ec2 create-transit-gateway-vpc-attachment \
--transit-gateway-id tgw-xxx \
--vpc-id vpc-xxx \
--subnet-ids subnet-xxx subnet-yyy
料金
料金体系
| 項目 | 料金(東京リージョン) |
|---|---|
| アタッチメント時間 | $0.07/時間 |
| データ処理 | $0.02/GB |
| ピアリングアタッチメント | $0.07/時間 |
| ピアリングデータ転送 | リージョン間転送料金 |
コスト最適化のポイント
- 不要なアタッチメントは削除
- 大量データ転送はDirect Connect検討
- 同一AZ内通信を優先(データ転送料金削減)
ベストプラクティス
設計チェックリスト
flowchart TB
subgraph Design["設計ポイント"]
D1["CIDRの重複を避ける"]
D2["複数AZでアタッチメント"]
D3["ルートテーブル設計を事前に"]
D4["将来の拡張を考慮"]
end
subgraph Security["Security"]
S1["セグメント化を検討"]
S2["Inspection VPCの導入"]
S3["フローログの有効化"]
end
subgraph Operations["Operations"]
O1["Network Managerで監視"]
O2["タグ付けの統一"]
O3["ドキュメント化"]
end
style Design fill:#3b82f6,color:#fff
style Security fill:#ef4444,color:#fff
style Operations fill:#22c55e,color:#fff
よくある間違い
| 間違い | 正しい対応 |
|---|---|
| 単一AZのアタッチメント | 複数AZで冗長化 |
| CIDRの重複 | 事前にIP計画を策定 |
| 過度に複雑なルーティング | シンプルな設計を優先 |
| 監視の欠如 | VPCフローログとNetwork Manager |
まとめ
flowchart TB
subgraph TGW["Transit Gateway"]
Attach["アタッチメント"]
Route["ルートテーブル"]
Peer["ピアリング"]
end
Attach --> |"VPC/VPN/DX"| Connect["接続"]
Route --> |"関連付け/伝播"| Control["制御"]
Peer --> |"マルチリージョン"| Global["グローバル"]
style TGW fill:#3b82f6,color:#fff
| コンポーネント | 用途 | 重要度 |
|---|---|---|
| VPCアタッチメント | VPC接続 | ★★★ |
| ルートテーブル | トラフィック制御 | ★★★ |
| ピアリング | マルチリージョン | ★★☆ |
| Network Manager | 監視・可視化 | ★★☆ |
Transit Gatewayは、大規模なマルチVPC環境に不可欠なコンポーネントです。適切なルーティング設計により、スケーラブルで管理しやすいネットワークを実現できます。