AWS

【AWS】複数のRDSを1つに統合する

はじめに

僕の所属している会社ではデータベースにAWSRDSを使用しています。

事業拡大の一環として似たようなサービスをたくさん展開することになり、似たような構造や内容のEC2RDSをそのサービスの個数分だけ立てました。

その際に取り組んだことをまとめていきたいと思います。

mysqlを使用しています

RDSの統合

RDSをサービスの個数分立てたものの、1つのRDSを立ててその中にいくつもdatabaseを作成して運用するほうがコスパが良いことを後から聞きました。

アクセスもそんなに多くない状況だったのでもともとt2microRDSがいっぱい立っているというかんじだったので、ほとんどがt2microでも持て余してしまうような状況であったので統合したほうが全てを足したものでそれにあったインスタンスタイプを選べるので必要以上のインスタンスタイプになるのを防げて料金も安く収めやすいし、インスタンスタイプが強いものを1つ立てるので処理能力においても統合したほうがパフォーマンスもよくなります。

databaseの作成

まずはAWSのコンソールで普段と同じようにRDSを作成しました。インスタンスタイプは統合したときの規模に合わせて決めます。後からでも変更できるので余裕持った上で途中で調整する形でやりました。

普段DBの操作はSequelProで行っているのでSequelProの画面上で説明します。

SequelProで先程作ったRDSに接続します。

次にそれぞれのサービスのdatabaseを作成していきます。

ここでセキュリティ面を考えた際に、ユーザーをサービスごとに作成し、そのユーザーはそのサービスのdatabaseにしかアクセス出来ないような設定にしました。


CREATE DATABASE sampledb DEFAULT CHARACTER SET utf8; //databaseの作成
CREATE USER sample@"%" IDENTIFIED BY "password"; //userの作成
GRANT all ON sampledb.* TO sample@"%" IDENTIFIED BY "password"; //userに対して権限を設定
SHOW GRANTS for sample@"%"; //userの権限を確認

これらをクエリで実行します。
するとこのようなかんじで出力されるかと思います。

設定できたら、確認として作成したユーザーで作成したdatabaseにアクセスしてみましょう。

databaseの選択が1つしかできなくなっていれば正しく設定できています。

database のコピー

次に既存のdatabaseから新しいdatabaseに中身をコピーしていきます。これは成功法かはわかりませんが、SequelProで簡単に行うことができます。

既存のdatabaseを選択した状態で「ファイル」→「エクスポート」でエクスポートすることができます。.sqlファイルをエクスポートします

次に新しいdatabaseに接続して「ファイル」→「インポート」で先程作成した.sqlファイルをインポートすることでコピーが完了です。

もちろんですがこの作業の間にdatabaseの値が書き換わったとしてもdatabaseをエクスポートした段階のものでしかコピーできないのでアクセスが無い時間帯に行うなど工夫が必要です。

dbconfigの書き換え

databaseの作成、コピーが完了したので、そのDBを使用しているサービスであたらしいDBに接続するように設定を書き換えます。

古いdatabaseの削除

古いdatabaseは必要なくなるので削除します。

このときモニタリングの部分でアクセスがなくなっているかをパット見ですが確認することができます。

あと削除する際にスナップショットを作成することが出来るので万が一のためにスナップショットをとっておくといいと思います。