AWS DMSを利用してRDSのPostgreSQLからRDSのPostgreSQLにデータを移行しました。
構成
移行元DBの構成
移行元DBは以下のような構成です。
スキーマはデフォルトのもの(Public)を利用するとします。
前提条件
- 移行元RDSはPostgreSQL 11.12で、複数DBが存在する。
- 移行元RDSのデータは今後更新されることはない。
- 移行元RDSのデータを全て移行先RDSに移行する。
- 移行先RDSは新規構築したものを利用する。
作業内容
移行先RDSを新規構築
以下の流れで移行先RDSを新規構築しました。
後からデータベースを手動で作成するので、最初のデータベースは空にしました。
移行先RDSにDBを手動で作成する
移行先RDSにpsqlで接続して移行元RDSと同じ名前のDBを作成します。
今回は移行元RDSにDBが2つあるので、2つ作成します。
CREATE DATABASE sample_db1;
CREATE DATABASE sample_db2;
セキュリティグループの用意
移行元RDSと移行先RDSにアタッチするセキュリティグループのインバウンドルールに以下の2つのルールを記載します。
DMSでレプリケーションインスタンスを作成
AWS DMSでレプリケーションインスタンスを作成します。
セキュリティグループはインバウンドのルールはなし、アウトバウンドの設定はデフォルトの状態のものを利用しました。
DMSでエンドポイントを作成
エンドポイントは以下の4つを作成する必要があります。
- ソースエンドポイント:移行元RDSのsample_db1用
- ソースエンドポイント:移行元RDSのsample_db2用
- ターゲットエンドポイント:移行先RDSのsample_db1用
- ターゲットエンドポイント:移行先RDSのsample_db2用
作成の流れは以下の通りです。
エンドポイントの作成の前にテストの実行をして、レプリケーションインスタンスから移行元RDSにアクセスできることを確認します。
データベース移行タスクを作成&実行
4つのエンドポイントを作成したら、データベース移行タスクを作成して実行します。
移行元RDSにDBは2つありどちらのデータも移行するので、データベース移行タスクも2つ作成します。
移行先DBの確認
2つのデータベース移行タスクのステータスが「ロード完了」になったら、移行先RDSにpsqlを使って接続し、DBやテーブル、データの数を確認します。
想定外だったこと
- AWS DMSを使えば移行元DBクラスターを丸ごと移行できると思っていましたが、AWS DMSはDB単位でデータを移行する必要がありました
- AWS DMSでエンドポイントを作成する前に、移行先RDSに予めDBを作成しておく必要がありました。
- AWS DMSではロール(ユーザ)は移行できないので、移行先RDSに手動でロールを作るか、別の移行方法を考える必要があります。
参考
-
Full-load task settings
https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TaskSettings.FullLoad.html -
Using a PostgreSQL database as an AWS DMS source
https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html -
Using a PostgreSQL database as a target for AWS Database Migration Service
https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html