RDSをスナップショットからアップグレードする場合の手順と注意点
RDSをスナップショットから復元して、より新しいエンジンバージョンへアップグレードする場合について整理します。
この方法では、既存のRDSクラスターを直接アップグレードするのではなく、スナップショットから新しいクラスターを作成する形になります。
そのため、既存クラスターとは別のエンドポイントが発行されます。
つまり、アプリケーションの接続先を変更する必要があります。
基本的な流れ
1. 既存クラスターの手動スナップショットを作成
まず、現在稼働しているRDSクラスターの手動スナップショットを作成します。
書き込み処理が継続している状態でもスナップショットを取得できますが、切り替え時のデータ整合性を考慮すると、可能であれば書き込みワークロードを停止してから取得することを推奨します。
2. スナップショットから新しいバージョンで復元
作成したスナップショットから新しいRDSクラスターを復元します。
復元時に目的のエンジンバージョンを指定します。
この場合、イメージとしては、
既存クラスター
│
│ 手動スナップショット
▼
スナップショット
│
│ 新しいエンジンバージョンを指定
▼
新しいRDSクラスター
となります。
3. 新しいクラスターで検証
新しく作成されたクラスターに対して、以下のような項目を確認します。
- データが正常に復元されているか
- 文字コード
- 照合順序(Collation)
- データの整合性
- SQLの互換性
- アプリケーションからの接続
- アプリケーションの動作確認
- パフォーマンス
特に、エンジンバージョンを変更する場合は、文字コードや照合順序、SQLの挙動などに差異がないかを確認しておくことが重要です。
4. アプリケーションの接続先を切り替える
検証が完了したら、アプリケーションから接続するRDSのエンドポイントを新しいクラスターへ変更します。
ここが、スナップショット復元方式で特に注意が必要なポイントです。
接続先の切り替えについて
スナップショットから復元すると、新しいクラスターには新しいエンドポイントが発行されます。
例えば、
旧クラスター
old-cluster.xxxxx.ap-northeast-1.rds.amazonaws.com
↓ スナップショットから復元
新クラスター
new-cluster.xxxxx.ap-northeast-1.rds.amazonaws.com
のようになります。
そのため、アプリケーションが直接RDSのエンドポイントを指定している場合は、接続先の変更が必要です。
AWS側で、旧クラスターのエンドポイントを自動的に新しいクラスターへ向け替えることはできません。
接続先を切り替える方法
代表的な方法は以下の3つです。
1. Route 53のCNAMEを利用する
アプリケーションからRDSのエンドポイントを直接指定するのではなく、独自のDNS名を利用します。
例えば、
db.example.com
をアプリケーションの接続先として設定します。
通常時は、
db.example.com
↓
old-cluster.xxxxx.rds.amazonaws.com
としておき、切り替え時に、
db.example.com
↓
new-cluster.xxxxx.rds.amazonaws.com
へ変更します。
アプリケーション側の設定を変更せずに、DNS側で接続先を切り替えられるのがメリットです。
2. RDS Proxyを利用する
RDS Proxyを利用する方法もあります。
アプリケーションはRDS Proxyのエンドポイントに接続し、バックエンドのデータベースを切り替える構成にします。
アプリケーション
│
▼
RDS Proxy
│
├── 旧クラスター
│
└── 新クラスター
データベースの切り替えをアプリケーションから切り離せるため、将来的にデータベースの切り替えが多く発生する環境では有力な選択肢です。
3. アプリケーション側の接続先を変更する
最も単純な方法です。
環境変数や設定ファイルなどにRDSのエンドポイントを設定している場合は、
旧エンドポイント
↓
新エンドポイント
へ変更します。
ただし、アプリケーションの再デプロイなどが必要になる場合があります。
スナップショット復元方式のメリット・デメリット
| 項目 | 内容 |
|---|---|
| データ移行 | スナップショットから復元可能 |
| エンジンバージョン | 復元時に新しいバージョンを指定可能 |
| 既存環境への影響 | 新しいクラスターを作るため、既存環境への影響を抑えやすい |
| 切り替え | アプリケーションの接続先変更が必要 |
| エンドポイント | 新しいエンドポイントが発行される |
| 検証 | 本番とは別のクラスターで事前検証可能 |
| ロールバック | 切り替え前であれば旧クラスターを残しておける |
大規模データの場合
データセットが大きい場合は、Auroraクローンがスナップショットからの復元よりも高速で、コスト効率の面でも有利になるケースがあります。
そのため、単純に「スナップショット復元が常に最適」と考えるのではなく、
- データ量
- ダウンタイム
- 検証期間
- 切り替え方法
- ロールバック要件
- コスト
などを考慮して方式を選択することが重要です。
まとめ
RDSをスナップショットから新しいエンジンバージョンへ移行する場合は、基本的に以下の流れになります。
既存RDS
│
▼
手動スナップショット
│
▼
新バージョンで復元
│
▼
新RDSクラスター
│
├─ 文字コード・照合順序確認
├─ データ整合性確認
└─ アプリケーションテスト
│
▼
接続先切り替え
│
▼
新RDSを本番利用
特に重要なのは、スナップショットから復元すると新しいRDSクラスターとエンドポイントが作成されるという点です。
そのため、本番切り替え時には、
- Route 53
- RDS Proxy
- アプリケーションの接続設定
などを利用して、接続先を新しいクラスターへ切り替える必要があります。