Aurora Blue/Green 実践検証 — RDS Proxy 経由の Switchover でダウンタイムはどう変わるか
Blue/Green Switchover に RDS Proxy を組み合わせた場合のダウンタイムを psql で計測。直接接続の26秒・JDBC BG プラグインの0秒と比較し、RDS Proxy の効果と制約を明らかにする。
「postgresql」タグが付いたコンテンツ一覧
Blue/Green Switchover に RDS Proxy を組み合わせた場合のダウンタイムを psql で計測。直接接続の26秒・JDBC BG プラグインの0秒と比較し、RDS Proxy の効果と制約を明らかにする。
application.yml の設定変更と ApplicationRunner によるウォームアップで、Spring Boot アプリに Remote Query Cache Plugin を統合。ノードベースと Serverless の両構成で動作確認した。
1時間の連続負荷でヒット率98.9%を確認。10分アイドル後もタイムアウト再発なし。公式ドキュメントの接続再利用推奨と合わせ、Serverless + ウォームアップが本番で使える条件を整理した。
ノードベース+TLS構成との比較で初回タイムアウトがServerless固有の問題と確定。ウォームアップ接続+5秒待機でCacheMonitorを回復させ、Serverlessの運用メリットを活かせることを実機検証した。
Aurora PostgreSQL の新機能 Express Configuration を検証。VPC 不要で約30秒起動、Internet Access Gateway 経由の TLS 1.3 接続、IAM 認証デフォルトの挙動を実測データとともに共有する。
AWS Advanced JDBC Wrapper 3.3.0 の Remote Query Cache Plugin を ElastiCache for Valkey Serverless で検証。初回接続で必ずタイムアウトが発生し CacheMonitor が SUSPECT 状態に陥る問題を発見。ノードベースでは発生しない Serverless 固有の課題を整理した。
AWS Advanced JDBC Wrapper 3.3.0 の Remote Query Cache Plugin を Aurora PostgreSQL(100万行)+ ElastiCache for Valkey(ノードベース)で検証。749msの集計クエリが2msに短縮。TTL による整合性制御も期待通り動作した。
AWS JDBC Wrapper を 2.6.4 → 3.2.0 にアップグレードし、PostgreSQL と MySQL で Blue/Green Switchover を再検証。MySQL の接続失敗はタイミング依存(0〜1回)であることが判明。3.x 移行の判断基準をまとめる。
Blue/Green Switchover 中のダウンタイムを Plain JDBC・HikariCP リトライ・AWS JDBC Driver BG プラグインの3パターンで比較。プラグインは検証した400クエリ中0回の接続失敗。HikariCP は旧 Writer に接続し続ける落とし穴も発見した。
Aurora PostgreSQL のフェイルオーバーと Blue/Green Switchover のダウンタイムを実測比較。フェイルオーバーは12回の接続失敗(2回に分離)、Blue/Green Switchover は約26秒・6回の接続失敗。DNS TTL 60秒の影響も検証した。
Aurora PostgreSQL の Blue/Green Switchover 中、ドキュメントでは AdminShutdown エラーが記載されているが、RDS Proxy 経由では SSL connection has been closed unexpectedly が発生する。エラーハンドリングの設計時に注意が必要。
カスタムパラメータグループを使っている Aurora PostgreSQL クラスターでメジャーバージョンアップグレードを伴う Blue/Green デプロイメントを作成すると InvalidParameterCombination で失敗する。Green 用のパラメータグループを明示的に指定する必要がある。
デフォルトパラメータグループのまま create-blue-green-deployment を実行すると SourceClusterNotSupportedFault で失敗する。PostgreSQL は rds.logical_replication = 1、MySQL は binlog_format = ROW を設定し、全インスタンスの再起動が必要。