DMS エラー Test connection for replication instance の解決法
発生したエラー
DMS 移行タスクの実行時に以下エラーが発生しました。
Test connection for replication instance <レプリケーションインスタンス名> and endpoint <ソースエンドポイント名> should be successful for starting the replication task
訳:
レプリケーションインスタンス <レプリケーションインスタンス名> とエンドポイント <ソースエンドポイント名> 間の接続テストが成功する必要があります。これにより、レプリケーションタスクを開始できます。
エラー解決方法
ソース DB とターゲット DB のセキュリティグループにレプリケーションインスタンスからのアクセスを許可するようにルールを追加するとエラー解消します。
DMS 接続障害のトラシューについては下記公式ブログもご参照ください。
やってみた
セキュリティグループの作成
以下 3 つのセキュリティグループを作成します。
移行元/移行先データベースには、パブリック EC2 インスタンスからのインバウンドルールのみ設定しており、その他はありません。
※パブリック EC2 は、DB に接続してソース-ターゲット間で移行がちゃんと完了できているか確認するためのものです。
-
移行元データベース用:source-db-sg
-
移行先データベース用:target-db-sg
-
DMS レプリケーションインスタンス用:dms-replication-instance-sg
DMS 環境の構築
以下ブログを参考に移行元と移行先であるデータベースの作成および DMS の設定をします。
なお、セキュリティグループはそれぞれ前項のものを使用します。
タスク実行 -> 失敗
作成したタスクを選択し、アクションから「開始」します。
タスクの開始を試みましたが、以下のようにエラーとなります。
Test connection for replication instance <レプリケーションインスタンス名> and endpoint <ソースエンドポイント名> should be successful for starting the replication task
エラーの詳細は、作成したエンドポイントの接続タブに記載があります。
Application-Status: 1020912, Application-Message: Cannot connect to ODBC provider ODBC general error.
タスク実行時のエラー文とエンドポイントのエラーメッセージより、原因は、レプリケーションインスタンスとエンドポイント間の接続に見受けられます。
そのため、DMS レプリケーションインスタンスからの接続を許可するよう、移行元 DB のセキュリティグループにインバウンドルールを追加します。
ソースエンドポイント(移行元 DB)とレプリケーションインスタンスが繋がるかを確認するため、エンドポイントの画面より「接続のテスト」を選びます。
「テストの実行」を選びます。
ステータスが Successful となり、無事に移行元への接続ができていそうです。
接続タブを見ても、先ほどのエラーメッセージが消えていることが確認できます。
続いて、ターゲットエンドポイントも確認します。
こちらにも同様のエラーが出ています。
DMS レプリケーションインスタンスがタスク実行時に移行先 DB にアクセスできるよう、ターゲットデータベースのインバウンドルールに設定を追加します。
インバウンドルールを追加したら、ソースエンドポイントの時と同様に接続のテストを実行します。ステータスが Successful になりました!
タスク実行 -> 成功
それでは、再度タスクを実行します。今度はエラーが発生せず、タスクが開始されました。ステータスも「開始中」となっています。
タスクが完了しました。
パブリック EC2 からターゲットに接続し、 test_db.user テーブルがちゃんと移行されているか確認します。
以下結果より、きちんと移行されていました。
$ mysql -u admin -p -h <ターゲット DB エンドポイント>
...
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| awsdms_control |
| information_schema |
| mysql |
| performance_schema |
| sys |
| test_db |
+--------------------+
6 rows in set (0.00 sec)
mysql> select * from test_db.user;
+------+--------+---------+
| id | name | address |
+------+--------+---------+
| 1 | Yamada | Tokyo |
| 2 | Satou | Chiba |
| 3 | Kinjo | Okinawa |
+------+--------+---------+
3 rows in set (0.00 sec)
終わりに
今回は、DMS のレプリケーションインスタンス-エンドポイント間の接続エラーについて検証してみました。原因は単純なセキュリティグループの設定不足によるエラーでしたが、きっと同じように詰まる方もいらっしゃると思うのでブログ化しました。
本記事がどなたかのお役に立てば幸いです。
参考文献