SRE-1687: Datastream連携のためにAuroraのエンドポイントをIPアドレスで固定化させる方法の検討
チケット概要
JIRA URL:
概要: AWS Aurora PostgreSQLのフェイルオーバーまたは再起動などインスタンスのIPアドレス変更時にGoogle Cloud Datastreamのダウンタイムが発生する問題を解決するため、Auroraの前段にNLBを導入し、IPを固定化させようと試みた。
しかし、NLBは名前解決したAuroraのエンドポイントのIPしか指定できないことが判明したため、再度、複数の技術的アプローチを分析し、最適な解決策を検討する。
課題・制約事項
Aurora フェイルオーバーや再起動時のDatastreamダウンタイム
- 現状の問題: Aurora フェイルオーバーまたは再起動などインスタンスのIPアドレス変更時にDatastreamが停止する
- 原因: 仕様によりGCE側の指定先はDBエンドポイントのIPアドレスの必要がある。 公式ドキュメント rinetdでエンドポイントの名前解決を導入していたが、起動時しか名前解決しない。
- 影響: BigQueryへのリアルタイムデータ連携が停止
現在の構成の限界
- rinetdプロキシ: 起動時の名前解決のみ、動的IP変更に未対応
- DNS依存: Auroraエンドポイントの名前解決に依存した接続
- 手動復旧: フェイルオーバー後の手動介入が必要
検討アプローチ
Aurora前段でのIP固定化を実現するため、複数の技術的解決策を検討・評価し、実装コスト・運用負荷・技術的制約を総合的に分析する。
検討計画
Phase 1: 技術調査・制約確認 ✅
初期アプローチの検証
- NLBを使用したIP固定化の技術検証
- Auroraエンドポイント直接指定の可否確認
- 技術的制約の洗い出し
代替案の洗い出し
- 複数の解決策候補の特定
- 各手法のメリット・デメリット分析
Phase 2: 解決策の詳細検討 (保留)
実装方法の詳細分析
- 各解決策の技術的実装方法
- コスト・運用負荷の定量化
- リスク評価とリスク軽減策
最適解の選定
- 総合評価による解決策の選定
- 実装計画の策定
Phase 3: 実装・展開 (保留)
選定された解決策の実装
- 開発・構築作業
- テスト・検証
本番環境への展開
- 段階的な移行
- 監視・運用体制の確立
関連リソース
現在のリソース
- AWS Aurora PostgreSQL: データソース
- GCE with rinetd: 現在のプロキシ(起動時のみ名前解決)
- Google Cloud Datastream: データ連携サービス
検討対象リソース
- 代替プロキシ方式: GCE上でのIP変更検知・動的更新
- AWS RDS Proxy: マネージドプロキシサービス
- AWS ECS with Squid: カスタムプロキシサービス
- trocco: サードパーティCDCサービス
作業記録・実装ログ
2025-09-05
- 作業内容: 問題分析と初期解決策検討
- 実施者: SRE Team
- 詳細:
- Aurora フェイルオーバー時のDatastreamダウンタイム問題を特定
- NLBによるIP固定化アプローチの検討開始
- 初期実装計画とドキュメント作成
2025-09-22
- 作業内容: 技術的制約確認と代替案検討
- 実施者: SRE Team
- 詳細:
- NLBでAuroraエンドポイント直接指定ができないことを実機で確認
- 5つの代替解決策を洗い出し・分析
- 各解決策のメリット・デメリット・実装コストを評価
- 長期的課題として継続検討することを決定
課題・ブロッカー
GCP仕様によるDBエンドポイントのIP指定の制約
- 発見日: 2025-02-27
- 詳細: 公式のGCEのポートフォワーディングの設定の起動スクリプトがあったが、IPアドレス指定でないと動かない。 当時のPR
- 対処方針: 動的名前解決のためのrinetdの導入
Aurora フェイルオーバーや再起動時のDatastreamダウンタイム問題
- 発見日: 2025-09-05
- 詳細: rinetdが起動時にしか名前解決せず(前回検証時に検知できず)、Aurora フェイルオーバーまたは再起動などインスタンスのIPアドレス変更時にDatastreamが停止する
- 対処方針: Aurora前段にAWS Network Load Balancer (NLB)を配置し、固定IPアドレスでの接続を実現検討
NLBでAuroraエンドポイント直接指定の制約
- 発見日: 2025-09-22
- 詳細: NLBでauroraのエンドポイントを直接指定ができない。ターゲットタイプは以下のいずれかで、名前解決したIPを指定することになってしまう。
instance: ターゲットはインスタンスIDで指定ip: ターゲットはIPアドレスで指定alb: ターゲットはApplication Load Balancer
- 参考資料:
- 実機検証: エンドポイント指定での動作を確認したが、エンドポイント指定ができないことを確認
解決策の検討と結論
検討した解決策
1. GCEにミドルウェア・スクリプトでIP変更検知
- メリット: コストが低い
- デメリット:
- プログラムの作り込みが必要
- ミドルウェアの新規の監視、運用などの検討事項が増える
2. NLBでインスタンスIP指定 + Lambda監視・変更
- デメリット:
- プログラムの作り込みが必要
- 新規の監視、運用などの検討事項が増える
- 運用・メンテが必要になる
- 管理リソースが増える
3. troccoに乗り換え
- メリット:
- 開発面: 比較的容易でスピーディに実現できる
- 運用面: これまでの運用の知見が活かせる、比較的コストが低い
- デメリット:
- 開発面: 手動での設定になる
- 運用面: IaC化できないため元々の課題を解決できない、テーブル追加時の手動設定が必要、ポーリング最速1分でリアルタイム性が低い
- 参考: trocco CDCジョブ定義
4. AWS RDS Proxy導入
- メリット: マネージドで対応できる
- デメリット:
- 新規の設計、運用などの検討事項が増える
- RDS ProxyのエンドポイントIPアドレスが変わる可能性がゼロではない
5. AWS側にSquid構築でIP固定化
- デメリット:
- ECSでの新規サービス構築が必要
- 監視、運用などの検討事項が増える
- 管理リソースが増える
結論
いずれもデメリットがあり、長期的な課題として検討する。
進捗状況
- [x] Phase 1: 設計
- [x] 構成の設計
- [x] 設計のレビュー
- [x] 技術的制約の確認: NLBでAuroraエンドポイント直接指定ができないことを確認
- [ ] Phase 2: 代替案検討 (保留)
- [ ] 各解決策の詳細検討
- [ ] コスト・運用負荷の比較分析
- [ ] 長期的な実装計画策定
完了条件
- 技術的制約の確認: NLBでAuroraエンドポイント直接指定の制約確認完了
- 代替案検討: 複数の解決策の検討とメリット・デメリット分析完了
- 長期的な方針決定: 代替案の詳細検討と実装計画の策定
- 設計: 構成の設計とチームのレビュー完了
リスク・注意事項
- 代替案の複雑性: 各解決策にそれぞれ運用負荷やコストの課題がある
- 長期課題化: 即座に実装可能な最適解が存在しない状況
作業完了項目
Phase 1: 設計・調査
- 構成の設計: NLBを追加した構成の設計完了
- 技術的制約の確認: NLBでのAuroraエンドポイント直接指定不可を確認
- 代替案検討: 5つの解決策の詳細分析完了
- 実装方針決定: 長期的課題として継続検討することを決定
最終更新日
2025-09-22