これは何?
VPC外で立てられた古いRDS for MySQL のインスタンスが稼働中で、VPC上に移行しないといけない要件が出てきた。
可能な限り少ないダウンタイムで移行したかったが、苦戦したので記事にまとめたい。
RDSインスタンスのスペック
インスタンスタイプ: db.m3.medium
マルチ AZ: Yes
エンジンバージョン: 5.5.53
RDS for MySQL はSSL経由のレプリケーションをサポートしていない
まず前提として、RDS for MySQLではSuper権限を持ったユーザを作成できず、そういう操作が必要な場合はストアドプロシージャ経由で行うらしい。
リードレプリカの設定はmysql.rds_set_external_masterでできる。
ただしこれはMySQL DB インスタンスではSSLがサポートされない旨が書いてある。
※なぜかAuroraでは実装されている。
平文での通信は非常に困るので、レプリケーション案は見送らざるを得なかった。
シングルAZに変更してからVPCに移行させる
↓の記事を読むと、「VPC 外のマルチ AZ DB インスタンスの VPC への移行は現在サポートされていません」とある。
Amazon Virtual Private Cloud (VPC) および Amazon RDS
したがって、一旦シングルAZに切り替えれば移行ができる。
データベースの「変更」を選ぶと、サブネットグループが選択できるようになっている。
mysqldumpをとってVPC上に立てた新しいインスタンスにインポートする
説明不要な気がする。
インスタンスのスナップショットから復元する
コンソールだけで完結し、工程もスナップショットの取得と復元だけなので、最もお手軽な方法に思える。
ただしスナップショットから復元したEBSはI/Oのレイテンシが著しく増えるらしい。
どれが良さそうなのか
今回の要件は可能な限り少ないダウンタイムなので、mysqldumpからのリストアが良さそう。
ダンプデータが1.6GBくらいなので、そんなに時間がかからなかった(約15分)。
実データのサイズが大量になってくるとシングルAZの変更を挟むやり方の方が良いように思う。
備考
上記の3つの方法はAWSビジネスサポートからの回答なので信憑性はあります。
(完全に個人の見解というわけでは)ないです。
まるごとの引用でないのはAWSからやめてほしい旨の連絡があったのと、セキュリティ的に公開したくない情報を含むためです。