はじめに
こんにちは!今回は、企業でよくある「あれもダメ、これもダメ」な制約の中で、AWSのPrivate Linkを使って双方向VPC連携システムを構築した話をシェアしたいと思います。
「Route53もAPI Gatewayも使えません、VPC Peeringも禁止です」なんて言われた日には、もうPrivate Linkしか選択肢ないじゃん!って状況、皆さんも経験ありませんか?😅
この記事では、そんな制約だらけの環境で実際にマイクロサービス基盤を構築した際の設計思想とアーキテクチャについて、全5回に分けてお話ししていきます。
今回作るもの
簡単に言うと、Public VPCとIsolated VPCを双方向に安全につなげて、ECSでホストしているマイクロサービス群を効率よく運用できる基盤です。
システム要件
- 複数のマイクロサービスAPIをECSでホスト
- セキュアな環境分離(Public/Isolated VPC)
- カナリアデプロイ対応
- サービス追加が簡単にできる自動化
- 双方向通信(Public → Isolated、Isolated → Public)
なぜこのアーキテクチャが必要だったのか
企業の制約条件
我々が直面した制約は以下の通りでした:
- ❌ Route53 プライベートホストゾーン禁止
- ❌ API Gateway 使用禁止
- ❌ VPC Peering 禁止
- ❌ Transit Gateway 使用禁止
- ✅ Private Link のみ許可
(VPC Latticeなら抜けれるかもと思ったがダメでした。👈 そりゃそうだ)
「じゃあPrivate Linkでなんとかするしかないじゃん...」ということで、この制約の中でベストなアーキテクチャを考えることになりました。
セキュリティ要件
- Public VPC: インターネットからアクセス可能な領域
- Isolated VPC: 完全に隔離された内部システム領域
- マイクロサービス間の通信は全て暗号化
- 最小権限の原則に基づいたアクセス制御
全体アーキテクチャ概要
主要コンポーネント
Public VPC側(Public → Isolated方向)
- Proxy Server (Python): マイクロサービス一覧の提供とルーティング
- VPC Endpoint: Private Link接続のエントリーポイント
Isolated VPC側(Public → Isolated方向)
- NLB: VPC Endpoint からのトラフィック受信
- ALB: ECSサービスへのロードバランシング
- ECS Cluster: マイクロサービス群をホスト
逆方向(Isolated → Public方向)
- NLB: VPC Endpoint からのトラフィック受信
- ASG + Proxy: 外部APIへのプロキシ処理
Private Linkを選んだ理由
1. セキュリティ
- インターネット経由しない完全プライベート通信
- AWS backbone network内での通信
- NACLとセキュリティグループでの多層防御
2. スケーラビリティ
- NLBによる高可用性
- オートスケーリング対応
- 複数AZ分散配置
3. 運用性
- AWSマネージドサービスによる運用負荷軽減
- CloudWatchでの監視・ログ収集
- 標準的なAWSサービスでの構成
次回予告
次回は「CDKで作るPrivate Link双方向通信 - スタック分割とデッドロック回避編」として、実際のCDK実装でぶつかったデッドロック問題とその解決方法について詳しく解説します。
3つのスタックに分割した理由や、SSMパラメータを使った疎結合設計のテクニックなど、実践的な内容をお届けする予定です!
まとめ
制約だらけの企業環境でも、Private Linkを軸にした設計で十分実用的なマイクロサービス基盤が構築できることをお話ししました。
重要なのは:
- 制約を受け入れて、その中でベストな設計を考える
- セキュリティと利便性のバランスを取る
- 運用しやすい自動化を最初から組み込む
次回からは、実際のCDKコードと一緒に、より具体的な実装方法を解説していきます。お楽しみに!
連載記事一覧(予定)
- 👈 第1回: Private Link縛りの企業環境で双方向VPC連携アーキテクチャを設計してみた
- 第2回: CDKで作るPrivate Link双方向通信 - スタック分割とデッドロック回避編
- 第3回: Public VPC → Isolated VPC通信編 - プロキシサーバーとVPC Endpoint構成
- 第4回: Isolated VPC → Public VPC逆方向通信編
- 第5回: ECSマイクロサービス動的追加編 - forループで運用を楽にする`,
}