BlueGreenDeploy_DB操作


24時間稼働を約束している環境の仕様変更が決まり、
サービスを止めずに、DBの仕様変更を変えることが決まりました。
しかも、顧客データの変更も必須です。(Aという文字列が、変更後ではBになる。)

Blue Green Deploy という方法をとることになりましたが、
DBのスキーマも変更するために、どの様に変更するかを実際に試したので、ここに残します。

前提:
サービスを停止させないこと。
そのため、本番と別途、仕様変更用のサーバーを用意。
ドメインの中身を入れ替えることで、大幅な修正を、顧客に影響させずに行う。

1.STGで、本番DBをClone、STGのDBとして用意。
2.STGで、STGのDBに新しいスキーマを追加
(既存のカラムに対して、制限の追加や削除しない、カラムを追加する場合もnullableやリファレンスの制限はかけない。)

3.STGの既存顧客のデータの変更
4.STGにてテストを行う。

5.新しいスキーマを本番DBに反映する。
6.本番にててうsとを行う。(古いプログラムは新しいDBにちゃんと動いているかどうか)
7. 本番の既存顧客のデータの変更
事前に、サーバー側で、旧productionで、新しいデータでも古いデータでもどちらでも稼働ができる様にする。

8.STG環境は本番DBに接続し、STG環境で新しい機能テストと回帰テストする。
(実行の手順はNODE_ENV=productionにして,再デプロイする。EBの利用を前提に、)
9.証明書等、本番に揃っているか確認する。
10.本番DomainをSTG環境にアサインする。
(AWSの場合、Route 53のエイリアスを変更する。)

  1. 8、10の間にきたリクエスト分のデータの修正 追加したカラムへのデータの追加。

この時点で、本番には反映済みになる。
あとは調整。

12.本番にて必要ではないテーブル、コラム、データを削除する。
カラムの制限も追加する。
のをstgのDBで行う。
13.本番にて必要ではないテーブル、コラム、データを削除する。カラムの制限も追加する。
14.
reference等、追加する場合、大量のデータを修正する場合、DBがダウンする可能性があるため、
やり方も考える必要がある。
コピーして、修正、
その後に、他のやり方を対応するなど。