🍣

AWS DMSを使ってみる

2023/04/23に公開

概要

最近、データ移行に触れる機会があったので、AWSのDMSってサービスが使えるかもと思い、メモがてらにとりあえず使用感を確認する程度に触ってみる。
今回はEC2上のMysqlをマスター、RDS(Aurora)をスレーブとしてデータ移行する。
(本来は互換性ないRDBMS同士で使うと思うが、今回はお試しなので)

事前準備

EC2上にMysqlインストール

詳細手順は割愛(今回はDMSのメモなので)

AuroraでDB作成

詳細手順は割愛(今回はDMSのメモなので)

スキーマ、テーブル作成

両方のDBにdmsdbスキーマを作成。
dmsdbにusersテーブルを作成。

CREATE TABLE `users` (
  `id` int NOT NULL AUTO_INCREMENT,
  `user_name` varchar(255) NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `deleted_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
)

ユーザ作成

Mysqlの方にtestuserというユーザを作成しておく

mysql> CREATE USER 'testuser'@'%' IDENTIFIED BY 'XXXXX';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'testuser'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

実際にデータ移行してみる

レプリケーションインスタンス作成

必要な入力欄をとりあえず入力。

AZはEC2と同じところに配置しておく

しばらく待ってたら、インスタンスが作成された

エンドポイント作成(マスター側)

マスターなので、ソースエンドポイントを選択

事前準備で作成したtestuserを入力

テストの実行してちゃんと繋がるか確認(successfulになったからOK)

エンドポイント作成(マスター側)

スレーブなので、ターゲットエンドポイントを選択。
RDSの場合、プルダウンの中身などが勝手にセットされるので、便利。

とりあえず、手動でadminユーザの情報入力

テストの実行

これでマスターとスレーブのエンドポイントがそれぞれできた。

移行タスクの作成

先ほど作成したソースエンドポイントとターゲットエンドポイントをセット。
移行タイプは「既存データを移行する」を選択。
(レプリケーションの設定するにはマスター側でbin-logとかの設定しないといけないので、今回はやらない)

テーブルマッピングで事前準備で作成したdmsdbをセット。
テーブルはワイルドカード。
ここで移行対象のデータをフィルタリングできるらしい。

移行タスクのスタートアップ設定は「作成時に自動的に行う」

タスクを作成

動作確認

タスク実行前

マスター側のusersテーブル

mysql> select * from users;
+----+-----------+---------------------+---------------------+------------+
| id | user_name | created_at          | updated_at          | deleted_at |
+----+-----------+---------------------+---------------------+------------+
|  1 | test      | 2023-04-23 04:21:38 | 2023-04-23 04:21:38 | NULL       |
+----+-----------+---------------------+---------------------+------------+
1 row in set (0.00 sec)

スレーブ側のusersテーブル

mysql> select * from users;
Empty set (0.00 sec)

タスク実行後

スレーブ側のusersテーブル

mysql> select * from users;
+----+-----------+---------------------+---------------------+------------+
| id | user_name | created_at          | updated_at          | deleted_at |
+----+-----------+---------------------+---------------------+------------+
|  1 | test      | 2023-04-23 04:21:38 | 2023-04-23 04:21:38 | NULL       |
+----+-----------+---------------------+---------------------+------------+
1 row in set (0.01 sec)

ちゃんとデータ移行された

後片付け

今回作ったリソースを削除しておく

感想

とりあえず、使用感だけ把握したくて使ってみたが、思ったよりもスムーズに設定できた。
互換性のあるRDBMS同士だったかもしれないが、基本的にはPostgresとかでも同じような手順でできると思われる。

Discussion