Day 10: VPC Peering:VPC間接続で広がる可能性
皆さん、こんにちは!「実践!AWSネットワーク構築・運用30日チャレンジ」のDay 10へようこそ!
この1週間と2日で、あなたはAWSネットワークの基礎をしっかりと築き、単一のVPC内でセキュアな多層アーキテクチャを構築する方法を学んできました。しかし、実際のエンタープライズ環境では、システムが単一のVPCに収まらないケースが頻繁に発生します。
例えば、以下のようなシナリオです。
- 本番環境と開発環境の分離: セキュリティや管理上の理由から、本番環境と開発環境を別々のVPCに分離したい。
- 子会社や部門ごとのVPC: 組織内の異なる部署や子会社がそれぞれ独自のVPCを管理している。
- SaaS提供者のVPCと連携: 外部のSaaSベンダーがAWS上で提供するサービスと、自社のVPC内のアプリケーションを安全に連携させたい。
- データ連携: 異なるVPCに分散されたデータ(例: データレイクVPCと分析VPC)間で、高速かつセキュアにデータをやり取りしたい。
このような場合に登場するのが、今日のテーマである「VPC Peering (VPCピアリング)」です。VPCピアリングは、異なるVPC間をプライベートに接続し、まるで一つのVPC内にあるかのように通信を可能にする強力な機能です。
1. VPC Peeringとは?その重要性
VPC Peering は、2つのVPC間で、それらのプライベートIPアドレスを使用してトラフィックをルーティングできるようにするネットワーク接続です。これにより、異なるVPC内のインスタンスが、インターネットゲートウェイやVPN接続を経由することなく、直接プライベートに通信できるようになります。
VPC Peeringのメリット
- プライベート通信: トラフィックがインターネットを経由しないため、セキュリティが向上し、データ漏洩のリスクが低減します。
- 低レイテンシ・高スループット: AWSの内部ネットワーク上で直接通信が行われるため、インターネット経由よりも低レイテンシで高いスループットを実現できます。
- シンプルさ: 複雑なVPN設定や外部ネットワーク機器の管理が不要で、比較的簡単に設定できます。
- コスト効率: インターネットデータ転送に伴うコストを削減できます。
VPC Peeringの制約事項
VPCピアリングは非常に便利ですが、いくつかの重要な制約があります。
- 重複するCIDRブロック: ピアリングする2つのVPCのCIDRブロックが重複していると、ピアリング接続は確立できません。 これは非常に重要な点です。VPC設計の初期段階でIPアドレス計画を慎重に行う必要があります。
- 推移的ルーティングの非サポート: VPCピアリングは推移的ルーティングをサポートしません。つまり、VPC-A と VPC-B がピアリングされ、VPC-B と VPC-C がピアリングされていても、VPC-A と VPC-C は直接通信できません。VPC-AとVPC-Cを通信させるには、別途ピアリング接続が必要です。多くのVPCを接続する場合は、Transit Gateway(今後のDayで解説予定)のような別のサービスを検討します。
- リージョンをまたいだピアリング: 現在、同じAWSアカウント内であれば、異なるリージョン間のVPCピアリングも可能です(リージョン間VPCピアリング)。ただし、レイテンシやコストに影響がある場合があります。
- 異なるAWSアカウント間のピアリング: 異なるAWSアカウントが所有するVPC間でもピアリング接続は可能です。
2. VPC Peeringの仕組みと設定の流れ
VPCピアリングは、以下の3つのステップで設定されます。
- ピアリング接続のリクエスト: 一方のVPCからもう一方のVPCに対してピアリング接続のリクエストを送信します。
- ピアリング接続の承諾: リクエストを受け取ったVPCの所有者が、そのリクエストを承諾します。
- ルートテーブルの更新: ピアリング接続がアクティブになった後、それぞれのVPCのルートテーブルに、相手のVPCのCIDRブロックへのルート(ターゲットはピアリング接続ID)を追加します。このステップが最も重要で、忘れられがちです。
3. VPC Peeringの実践:2つのVPCを接続してみよう!
それでは、実際に2つのVPCを作成し、それらをVPCピアリングで接続してみましょう。今回はシンプルにするため、新しいVPCを一つ追加し、既存のVPC(Day 3-4で作成済み)とピアリングします。
事前準備:もう一つのVPCの作成
既存のVPCのCIDRブロック(例: 10.0.0.0/16
)と重複しない、新しいCIDRブロックを持つVPCを作成します。
- AWSマネジメントコンソールで「VPC」サービスを開きます。
- 左側ナビゲーションペインから「VPC」をクリックし、「VPCを作成」ボタンをクリックします。
- 「VPCのみ」を選択します。
-
名前タグ:
my-second-vpc
-
IPv4 CIDR ブロック:
10.1.0.0/16
(既存のVPCが10.0.0.0/16
の場合)
-
名前タグ:
- 「VPCを作成」をクリックします。
作成した my-second-vpc
の中に、適当なサブネットを一つ作成しておきましょう(例: my-second-vpc-subnet-a
、CIDR: 10.1.1.0/24
、AZ: ap-northeast-1a
)。このサブネットに後ほどEC2インスタンスをデプロイします。
3.1. ピアリング接続の作成
- VPCサービスの左側ナビゲーションペインから「ピアリング接続」をクリックします。
- 「ピアリング接続を作成」ボタンをクリックします。
- 以下の情報を入力します。
-
名前タグ:
main-to-second-vpc-peering
-
VPC リクエスター:
-
VPC (リクエスター): Day 3で作成したあなたのメインVPC (
my-vpc
など) を選択します。
-
VPC (リクエスター): Day 3で作成したあなたのメインVPC (
-
VPC アセプター:
-
VPC (アセプター): 先ほど作成した
my-second-vpc
を選択します。 - アカウント: 「マイアカウント」を選択(同じアカウントの場合)。
- リージョン: 「このリージョン」を選択(同じリージョンの場合)。
-
VPC (アセプター): 先ほど作成した
-
名前タグ:
- 「ピアリング接続を作成」をクリックします。
これでピアリング接続のリクエストが送信され、ステータスが「保留中の承諾」になります。
3.2. ピアリング接続の承諾
同じAWSアカウント内なので、すぐに承諾できます。
- 「ピアリング接続」リストで、作成したピアリング接続 (
main-to-second-vpc-peering
) を選択します。 - 「アクション」ドロップダウンから「リクエストを承諾」をクリックします。
- 確認ダイアログで「リクエストを承諾」をクリックします。
ステータスが「アクティブ」になれば、ピアリング接続が確立されました。
3.3. ルートテーブルの更新(最重要!)
ピアリング接続が「アクティブ」になっただけでは、まだVPC間の通信はできません。それぞれのVPCのルートテーブルに、相手のVPCへのルートを追加する必要があります。
3.3.1. メインVPCのルートテーブルを更新
メインVPC (例: my-vpc
) のルートテーブルを更新します。パブリックサブネットとプライベートサブネットの両方のルートテーブルを更新することを推奨します。
- VPCサービスの左側ナビゲーションペインから「ルートテーブル」をクリックします。
- あなたのメインVPC (
my-vpc
) に関連付けられているルートテーブル(例:my-vpc-public-rtb
とmy-private-rtb-a
など)を選択します。 - 「ルート」タブをクリックし、「ルートを編集」ボタンをクリックします。
- 「ルートを追加」をクリックします。
-
宛先:
10.1.0.0/16
(相手のmy-second-vpc
のCIDRブロック) -
ターゲット: 「Peering Connection」を選択し、プルダウンから作成したピアリング接続 (
pcx-xxxxxxxx
) を選択します。
-
宛先:
- 「変更を保存」をクリックします。
- メインVPC内の他のルートテーブル(例: プライベートサブネット用)も同様に更新します。
3.3.2. セカンドVPCのルートテーブルを更新
my-second-vpc
のデフォルトルートテーブルを更新します。
- VPCサービスの左側ナビゲーションペインから「ルートテーブル」をクリックします。
-
my-second-vpc
に関連付けられているルートテーブルを選択します(通常、VPC作成時に自動生成されるデフォルトのルートテーブルです)。 - 「ルート」タブをクリックし、「ルートを編集」ボタンをクリックします。
- 「ルートを追加」をクリックします。
-
宛先:
10.0.0.0/16
(相手のmy-vpc
のCIDRブロック) -
ターゲット: 「Peering Connection」を選択し、プルダウンから作成したピアリング接続 (
pcx-xxxxxxxx
) を選択します。
-
宛先:
- 「変更を保存」をクリックします。
これで、両方のVPCのルートテーブルに、相手のVPCへのルーティングルールが追加され、VPC間の通信が可能になります。
4. VPC Peeringの動作確認
実際にEC2インスタンスをデプロイし、ピアリング接続が機能しているか確認しましょう。
4.1. 各VPCにEC2インスタンスを起動
-
メインVPCのプライベートサブネットにEC2インスタンスを起動
-
名前:
EC2-in-MainVPC
-
サブネット:
my-vpc-private-subnet-a
- 自動割り当てパブリック IP: 「無効化」
-
セキュリティグループ: Day 6で作成した
app-server-sg
など(SSHが許可されているもの)。このSGには、後ほど相手のVPCのEC2インスタンスのSGからのSSHも許可するルールを追加します。
-
名前:
-
セカンドVPCのサブネットにEC2インスタンスを起動
-
名前:
EC2-in-SecondVPC
-
サブネット:
my-second-vpc-subnet-a
- 自動割り当てパブリック IP: 「無効化」
-
セキュリティグループ: 新しくSGを作成(例:
second-vpc-instance-sg
、SSHを許可)。このSGには、メインVPCのEC2インスタンスのSGからのSSHも許可するルールを追加します。
-
名前:
4.2. セキュリティグループの更新(相互通信の許可)
それぞれのEC2インスタンスのセキュリティグループが、相手のEC2インスタンスからのSSH(またはPingなどテストしたいプロトコル)を許可するように設定します。
-
EC2-in-MainVPC
に適用されているSG (例:app-server-sg
) のインバウンドルールに、以下を追加します。- タイプ:
SSH
(ポート 22) - ソース:
second-vpc-instance-sg
(相手のEC2インスタンスのSGを選択)
- タイプ:
-
EC2-in-SecondVPC
に適用されているSG (例:second-vpc-instance-sg
) のインバウンドルールに、以下を追加します。- タイプ:
SSH
(ポート 22) - ソース:
app-server-sg
(メインVPCのEC2インスタンスのSGを選択)
- タイプ:
4.3. Bastion Host経由で通信テスト
Day 9で作成したBastion Hostを経由して、メインVPCの EC2-in-MainVPC
にSSH接続します。
その後、EC2-in-MainVPC
から EC2-in-SecondVPC
のプライベートIPアドレスに対してSSH接続またはPingを試行します。
# Bastion HostからEC2-in-MainVPCへ接続後、EC2-in-MainVPCのターミナルで実行
ping <EC2-in-SecondVPC_Private_IP_Address>
# もしSSH接続を試す場合(秘密鍵が必要)
ssh -i /path/to/keypair.pem ec2-user@<EC2-in-SecondVPC_Private_IP_Address>
Pingが通る、またはSSH接続が成功すれば、VPCピアリングが正しく機能していることになります。おめでとうございます!
5. AI時代におけるVPC Peeringの活用シナリオ
AI/MLワークロードでは、VPCピアリングは特に重要な役割を果たします。
- データレイクVPCと分析VPC: 大規模な学習データが保存されているデータレイク用のVPCと、データサイエンティストがモデル開発や分析を行うための分析VPCを分離し、VPCピアリングで接続することで、セキュリティを保ちつつ高速なデータアクセスを実現します。
- 本番推論VPCと管理VPC: モデルの推論を行う本番環境のVPCと、監視・ログ収集・管理を行うためのVPCを分離し、ピアリングで接続することで、セキュリティと運用管理の分離を図ります。
- データプライバシーとコンプライアンス: 特定の規制要件(例: GDPR, HIPAA)があるデータを扱う場合、そのデータと関連するアプリケーションを専用のVPCに隔離し、必要なVPCとのみピアリング接続することで、データプライバシーとコンプライアンスを強化できます。
- マイクロサービスアーキテクチャ: 複数のマイクロサービスが異なるVPCにデプロイされている場合、VPCピアリングはサービス間のセキュアで効率的な通信を可能にします。
本日のまとめと次へのステップ
今日は、AWSネットワークにおける複数のVPC間をプライベートに接続するための強力な機能である「VPC Peering (VPCピアリング)」について学び、実践しました。
- VPCピアリングは、異なるVPCのインスタンスがプライベートIPアドレスで直接通信できるようにする機能。
- セキュリティ向上、低レイテンシ、高スループットといったメリットがある。
- CIDRブロックの重複不可と推移的ルーティング非サポートという重要な制約がある。
- 設定は、リクエスト、承諾、そして両方のVPCのルートテーブル更新という3ステップで行う。
VPCピアリングは、多くのVPCが存在する複雑なエンタープライズ環境で、ネットワークを効率的かつセキュアに設計するための基本的なスキルです。
明日のDay 11では、「Transit Gateway:複雑なネットワークを一元管理する」と題して、VPCピアリングの制約(推移的ルーティングの非サポート)を克服し、多数のVPCやオンプレミスネットワークを効率的かつスケーラブルに接続・管理するための「Transit Gateway」という、より高度なサービスについて学びます。これは、エンタープライズレベルのネットワークを設計する上で非常に重要な概念です。
今日のVPCピアリングのハンズオン、無事に完了しましたか?2つのVPCがプライベートに通信できたことに感動したなら、ぜひ「いいね」👍で教えてください!