検証環境作成の検討
とあるシステムでAmazon Auroraにカラムを追加したいという要望が出てきました
MySQLとAWSのドキュメントを読んだ感じでは、制限があるもののオンラインで追加する事が可能である記載がありました(本記事では検証環境を作成することを目的としているのでこのあたりの詳細に関しては割愛します)
実際に本番の大きいテーブルでコマンドを実行しても問題が起きないかを試した後にカラム追加を実行したいと思い、本番環境でテストを行うにはどのような方法が良いかを検討しました
調べた結果、スナップショットやバックアップからクラスタをもう一台作成する方法とクローンを使ってデータベースを複製する方法がありました
スナップショットから複製する方法に関しては実際に、もう一つクラスターを作成するので検証で問題が起き時間がかかってしまうとコストが多くかかってしまうことが懸念されました
そこで、今回はauroraのクローン機能を使用して本番のAmazon Auroraに対してオンラインでカラムを追加することで問題が起こらないかを確認することにしました
本記事ではクローンを作成する方法やクローンの仕組みを調べたのでまとめようと思います
作成方法
対象サービスではterraformを用いてAmazon Auroraを管理していましたが、一時的に使用するリソースのためterraformを介さずWEB UIを使用して作成することにしました
手順
- AWSコンソールにログイン
- RDSのページに行く
- 対象クラスタにチェックを入れる(現状特定インスタンスだけのクローンはできない)
- 右上にあるアクションボタンから「クローンの作成」を選択
作成すると以下のようになります
実際にログインしてDatabaseやテーブル、レコードなどを確認しましたが問題なく作成されてそうでした
削除
クラスターを削除するときはクラスターに属しているインスタンスを全部消してからじゃないとエラーとなり削除できなかったです
クーロンの仕組みについて
上の記事に詳細が書いてあります
auroraはクーロンを作成すると、新しくクーロンのクラスタはできるがストレージ層はオリジナルと同じところを参照します(ストレージコピーがないので、スナップショットのリストアに比べて爆速で立ち上げることができます)
変更がある処理に関してはコピーオンライトで別の領域にコピーを作成し、そちらを参照するようにします
上の図でAがオリジナル、Bがクーロンのクラスタとした場合AがPage1のデータを更新すると1[A]を作成してそちらを参照するようにします
クーロン側のクラスタBがPage4のデータを更新するとした場合4[B]が作成されそちらを参照するようにします
このようにしてクーロンクラスタを立ち上げてもオリジナルのデータに影響が無いようになっているようでした
クローンのユースケースについて
ドキュメントでは以下のことがユースケースとして考えられるとの記載がありました
- schema変更やパラメータグループの変更等がどんなインパクトを与えるかの確認をおこなえる
- データのエクスポートや分析クエリの実行など、大量のワークロードを扱うオペレーションをクローン上で実行する
- 開発、テスト、またはその他の目的のために、本番 DB クラスターのコピーを作成する
との事でした
今回の検証を行ってみて
クローンを使用することによって爆速で同様の環境を用意することができ、更にストレージのコピーも発生しないので低コストで検証環境を作成することができました
気になったのはクローンの仕組みについては書いてあったのですが、内部の細かい処理までは終えていなかったので、コピーオンライトでコピーをする際にリードが入ったりすると思うので、本番データに少なからず接触はあり影響が絶対に出ないと断言できなかったところです
簡単ではありましたが、以上になります