データベースのバージョンアップやメンテナンス作業において、システムのダウンタイムや予期せぬトラブルへの対応に課題を感じている方は多いのではないでしょうか。

「作業中に予期せぬエラーが起きたらどうしよう」

「長時間のシステム停止(ダウンタイム)は極力避けたい」

このようなデータベース管理者の課題を解決する強力な機能として、AWSは「Amazon RDS Blue/Green Deployments(ブルーグリーンデプロイ)」を提供しています。

本記事では、RDS Blue/Greenデプロイを用いたメジャーアップグレード作業を複数回実施した知見をもとに、メリットや運用上の注意点、そして本番環境で実践できる運用ポイントを解説します。

1. 通常のアップグレード(インプレース)との違い

データベースの更新手法には、大きく分けて「インプレースアップグレード」と「Blue/Green デプロイ」の2種類が存在します。まずはこの2つの違いを整理します。

通常のアップグレード(インプレースアップグレード)

現在稼働している本番データベース(DB)のシステムを直接書き換える手法です。作業中はシステムを完全に停止する必要があり、データ量によっては数十分から数時間のダウンタイムが発生します。また、万が一アップグレードに失敗した場合、バックアップから元の状態に戻す(リストアする)のにも多くの時間を要します。

Blue/Green デプロイ

本番環境とは別に、全く同じデータを持つ新しい環境を構築し、準備が整った段階で向き先を一瞬で切り替える手法です。

Blue(ブルー):現在稼働している本番環境

Green(グリーン):Blueと全く同じデータを持つコピー環境(テスト・新環境)

裏側ではBlueからGreenへ常に最新のデータが同期され続けます。管理者はGreen環境のデータベースを安全にバージョンアップし、テストを実施した上で、任意のタイミングで「切り替え(スイッチオーバー)」を実行できます。

以下に、両者の違いを比較表としてまとめました。

比較項目 通常のアップグレード(インプレース) RDS Blue/Green デプロイ
環境の分離 なし(稼働中の環境を直接変更)

あり(本番環境のコピーを分離して構築)

ダウンタイム 数十分〜数時間

通常1分未満

事前の動作テスト 本番環境でのテストは不可

本番データを用いた安全なテストが可能

切り戻し(ロールバック) バックアップからの復元(時間がかかる)

旧環境への切り替え(迅速に可能)

データ損失のリスク 失敗時にデータが失われるリスクあり

ガードレール機能によりデータロスなし

コスト 追加のコンピュートおよびストレージコストは発生しない

Green環境のプロビジョニング中、バックアップ保存においてコストが2倍に増加

 

2. RDS Blue/Green デプロイを利用する3つのメリット

① ダウンタイムが「極小(1分未満)」

切り替えを実行すると、AWSが裏側で自動的にデータベースの向き先(エンドポイント)を入れ替えます。アプリケーションやWebサーバー側の設定を変更する必要はなく、通常は1分未満でシームレスに切り替えが完了します。

② データロスの心配がない

切り替えの瞬間、AWSは「BlueとGreenのデータが完全に一致しているか」を厳格にチェックします(これをスイッチオーバー・ガードレールと呼びます)。もしデータの同期に遅れがあったり、何らかの問題があったりした場合は、切り替え処理が自動でキャンセルされます。そのため、データが欠損するリスクを極限まで減らすことができます。

③ 本番データを使った「安全なテスト」ができる

Green環境は本番環境と全く同じデータを持っています。そのため、「バージョンアップ後にクエリの処理速度が落ちないか」「新機能でエラーが出ないか」といったパフォーマンステストを、エンドユーザーに一切影響を与えることなく安全に実施できます。

3. 利用する前に知っておくべき「落とし穴」

Blue/Green デプロイは強力な機能ですが、その仕組み上いくつかの制約が存在します。これらを把握せずに導入すると、思わぬトラブルに繋がる可能性があります。

注意点1:Green環境は「読み取り専用」で書き込みできない

Green環境は、常にBlue環境から最新のデータを受け取り続ける役割を持っています。もし直接Greenにデータを書き込んでしまうと、後からBlueから同期されてきたデータと衝突し、システムが破損してしまいます。そのため、Green環境は強制的に「読み取り専用(書き込み禁止)」に設定されています。

アプリケーションの動作確認を行おうとした際にエラーが発生する場合、アプリケーションが裏側でデータの書き込みを行おうとしているケースがほとんどです。

注意点2:PostgreSQLの「メジャーアップグレード」における制約

PostgreSQLで「バージョン14から15へ」のようなメジャーアップグレードを伴うBlue/Greenデプロイを実施する場合、内部のデータ同期方式が「論理レプリケーション」という仕様に変更されます。この状態では、稼働中にテーブルの構造を変更する(列を追加するなど)といった操作がGreen環境に同期されなくなり、レプリケーションが破損する原因となります。

4. Blue/Green デプロイが「向かない」ケース

以下のケースでは、Blue/Greenデプロイのアーキテクチャと相性が悪く、エラーやトラブルの原因となるため、従来通りのアップグレードを検討することをお勧めします。

① WordPressサイトの検証(ログイン不可の問題)

WordPressを用いたサイトの事前検証は、代表的なアンチパターンの一つです。Green環境でWordPressの管理者画面にログインしようとすると、無限ループに陥るか接続エラーが発生します。

理由は、WordPressの仕様上、管理者ログイン画面からのログイン時に裏側でデータベースに対してセッション情報やアクセスログを「書き込もうとする」ためです。前述の通りGreen環境は読み取り専用であるため、この書き込み処理が弾かれ、システムが正常に動作しません。

② データの更新(書き込み)が極めて激しいシステム

常に大量のトランザクション(書き込み・更新処理)が発生しているシステムの場合、BlueからGreenへのデータ同期が追いつかず、常に「遅延(ラグ)」が発生した状態になります。同期の遅延が解消されない限り安全装置(ガードレール)が働き、いつまで経っても切り替えを実行することができません。

③ RDS Proxyを利用している環境

データベースの接続を管理する「Amazon RDS Proxy」を利用している場合、現状の仕様ではシームレスな切り替えがサポートされていません。切り替えの前に一度Proxyのターゲット設定を解除し、切り替え完了後に新しい環境に対して再度登録し直すという手作業が必要となり、結果として数分程度のダウンタイムが発生します。

5. 本番導入のための運用ベストプラクティス

最後に、実務でRDS Blue/Greenデプロイを成功させるための具体的な運用ポイントを紹介します。

① 切り替えは「アクセスが少ない時間」を狙う

切り替え自体は1分未満で完了しますが、その間はデータベースへの通信が一時的にブロックされます。また、環境間のデータ同期の遅延をなくすためにも、夜間や休日など、システムへのアクセスが最も落ち着いている時間帯に実行してください。

② PostgreSQLは切り替え直後に「ANALYZE」を実行する

PostgreSQLでメジャーアップグレードを実施した場合、データベースがクエリの実行計画を立てるために使用する「統計情報」がリセットされてしまいます。切り替え直後にパフォーマンスが極端に低下するのを防ぐため、切り替え完了後は速やかに手動で ANALYZE コマンドを実行し、統計情報を最新化する手順を組み込んでください。

③ IAMやバックアップの設定(Resource ID)を見直す

切り替え完了後、データベースの「名前」は元のまま引き継がれますが、裏側で割り当てられているシステム固有のID(Resource ID)は新しい環境のものに変更されています。アクセス権限(IAMポリシー)やAWS Backupの対象リソースをIDで指定している場合は、新しいIDへと必ず更新を行ってください。

④ 完了後は「古い環境(Blue)」を必ず削除する

切り替えが成功し、新しい本番環境の稼働が安定したことを確認した後は、不要となった旧環境(-old1 などの名前が付与されます)を手動で削除してください。古い環境を残したままにすると、データベース2台分の料金が継続して発生してしまうため、コスト管理の観点で非常に重要です。

まとめ

Amazon RDS Blue/Green Deploymentsは、従来のインプレースアップグレードが抱えていたダウンタイムとロールバックのリスクを軽減できる機能です。

しかし、「Green環境は読み取り専用である」「WordPressのようなログイン時の書き込み処理とは相性が悪い」「古い環境を消し忘れるとコストが倍増する」といった仕様を正しく理解しておくことが不可欠です。

本記事で紹介した特性や注意点を踏まえ、ご自身のシステムアーキテクチャに合わせた安全なデータベースのアップデートを実現してください。