AWS DMS で Amazon RDS for SQL Server のデータ移行を行う~ Serverless 編~

AWS DMS で Amazon RDS for SQL Server のデータ移行を行う~ Serverless 編~

DMS を使った RDS for SQL Server の移行をサーバーレスモードで試しました。
2025.09.30

コーヒーが好きな emi です。最近はカフェインを控えています。

以下のブログで、DMS のレプリケーションインスタンス(プロビジョンドインスタンス)を作成し、プロビジョンドモードで RDS for SQL Server のデータ移行検証を行いました。
https://dev.classmethod.jp/articles/dms-rds-for-sql-server-data-migration/

今回は上記ブログの環境でレプリケーションインスタンス(プロビジョンドインスタンス)を削除し、DMS のタスクモードをサーバーレスにして RDS for SQL Server のデータ移行を試してみます。

構成イメージ

以下の構成で検証します。Windows Server 2022 には SQL Server Management Studio(SSMS)をインストールしておき、ソースとなる DB とターゲットとなる DB に接続して中身のデータを確認するために使います。
dms-rds-for-sql-server-data-migration-serverless_32

0. 準備

レプリケーションインスタンスとプロビジョンドタスクの削除

AWS DMS で Amazon RDS for SQL Server のデータ移行を行う | DevelopersIO で作成した構成から、レプリケーションインスタンス(プロビジョンドインスタンス)を削除しておきます。

dms-rds-for-sql-server-data-migration-serverless_1

普通に削除しようとすると、削除できませんでした。
dms-rds-for-sql-server-data-migration-serverless_2

詳細を表示すると、
dms-rds-for-sql-server-data-migration-serverless_3

			
			Replication Instance 'dms-replication-instance' has one or more replication tasks.
(機械翻訳)レプリケーションインスタンス 『dms-replication-instance』 には、1つ以上のレプリケーションタスクが存在します。

		

dms-rds-for-sql-server-data-migration-serverless_4

つまり、レプリケーションインスタンスが紐づいているレプリケーションタスクを先に削除しておかないといけないそうです。
dms-rds-for-sql-server-data-migration-serverless_5

タスクを削除しましょう。
dms-rds-for-sql-server-data-migration-serverless_6

すぐに削除できました。
dms-rds-for-sql-server-data-migration-serverless_7

再度レプリケーションインスタンスを削除します。
dms-rds-for-sql-server-data-migration-serverless_8

10 分程度待ち、今度は削除できました。
dms-rds-for-sql-server-data-migration-serverless_9

ターゲット DB の掃除

AWS DMS で Amazon RDS for SQL Server のデータ移行を行う | DevelopersIO でデータが移行された状態になっているので、user テーブルを丸ごと削除しておきます。

user テーブルの削除

			
			DROP TABLE dbo.[user];

		

データベース内のテーブル一覧の表示

			
			SELECT name FROM sys.tables;

		

これは「sys.tables という表から、name 列の値を取り出して見る」というコマンドです。SQL Server には MySQL のように show tables; のようなテーブル一覧を表示するコマンドがありませんので、select でテーブル一覧を表示します。

sys.tables は SQL Server が内部で持っているシステムビュー(メタ情報の表)で、「このデータベースにどんなテーブルがあるか」という情報が格納されています。普通のユーザーが作るテーブルではなく、データベースの管理用テーブルです。

sys.tables には「テーブルID」「作成日時」「スキーマID」など様々な列があり、その中の一つが name 列で、テーブルの名前が入っています。
SELECT name FROM sys.tables; と書くと、テーブル名だけ一覧で表示されるわけです。

dms-rds-for-sql-server-data-migration-serverless_10

name に何もない、つまり、テーブルは無い状態であることが確認できました。

エンドポイント接続の確認(できない)

レプリケーションインスタンスがあった時は、レプリケーションエンドポイントとの接続確認を行うことができ、接続がうまくいっていないとタスクが作成できませんでした。
サーバーレスの場合はどうなるのか確認してみます。
dms-rds-for-sql-server-data-migration-serverless_11

「接続のテスト」をクリックすると、
dms-rds-for-sql-server-data-migration-serverless_12

dms-rds-for-sql-server-data-migration-serverless_13

			
			Important: Connection testing for AWS DMS Serverless endpoints
When using endpoints with DMS Serverless replications, you cannot perform connection testing through this interface. DMS Serverless automatically validates your endpoint connection as part of the startup sequence when you start replication.
(機械翻訳)重要: AWS DMS サーバーレス エンドポイントの接続テストについてDMS サーバーレス レプリケーションでエンドポイントを使用する場合、このインターフェースを通じて接続テストを実行することはできません。DMS サーバーレスは、レプリケーションを開始する際の起動シーケンスの一環として、エンドポイント接続を自動的に検証します。

		

タスクモードがサーバーレスの場合、エンドポイント接続の確認はこの画面からはできないそうです。AWS 側で接続の確認を行ってくれるようです。

https://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Serverless.Components.html

1. レプリケーションタスク(サーバーレス)の作成

レプリケーションタスクのタスクモードをサーバーレスで作成します。サーバーレス方式の場合はレプリケーションインスタンスを作成する必要がないので、もうタスクの作成に進みます。
dms-rds-for-sql-server-data-migration-serverless_14

タスク名、ソース DB、ターゲット DB を指定し、タスクモードはサーバーレスを選択します。タスクタイプは移行のみとします。
dms-rds-for-sql-server-data-migration-serverless_15

ターゲットテーブル準備モードは「ターゲットのテーブルをドロップ(削除)」、「レプリケーションに LOB 列を含める」では、デフォルトの「制限付き LOB モード」のままにします。

設定値の説明は AWS DMS で Amazon RDS for SQL Server のデータ移行を行う | DevelopersIO - 5. 移行タスクの作成 を参照してください。

dms-rds-for-sql-server-data-migration-serverless_16

高度な設定はデフォルトのまま進めます。
dms-rds-for-sql-server-data-migration-serverless_17

テーブルマッピングではウィザードを選択して「新しい選択ルールを追加」をクリックします。
今回は以下のように設定します。

  • スキーマ名:dbo
  • スキーマテーブル名:user
  • アクション:含む

RDS for SQL Server に SQL Server Management Studio(SSMS)でデータを挿入する | DevelopersIO でデータを挿入したテーブルの情報を入れています。
dms-rds-for-sql-server-data-migration-serverless_18

作成済みの VPC、サブネットグループ、セキュリティグループを設定します。セキュリティグループは、レプリケーションインスタンスに設定したのと同じものを設定しています。

検証のため、可用性ではシングル AZ を選択しコストを抑えます。
dms-rds-for-sql-server-data-migration-serverless_19

アベイラビリティゾーンは指定なしで進めます。

「キャパシティ」では、レプリケーションに使用するコンピューティングリソースのキャパシティの最小値と最大値を設定します。このキャパシティは、DMS キャパシティユニット(DCU)と言います。

最小値は任意で、何も設定しないと 1 DCU(1 vCPU、2 GiB)になります。
最大値は必須項目です。
dms-rds-for-sql-server-data-migration-serverless_20

(参照)キャパシティ情報タブ転記
			
			AWS DMS computes the minimum capacity required to successfully complete each replication. AWS DMS bases this assessment on the replication's workload. You set the maximum capacity for the replication. AWS DMS uses this range to create scaling rules for the following thresholds:

CPU utilization

Connections

Available memory

AWS DMS can increase capacity to the value of Maximum.


		

https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.Creating.html?icmpid=docs_console_unmapped

前回レプリケーションインスタンスを作成したとき t3.medium(2 vCPU、CPU バーストクレジットあり、 4 GiB メモリ)を指定したので、似たようなキャパシティとして、最大 DCU は 2 DCU(2 vCPU、4 GiB メモリ)にしてみました。

メンテナンスウィンドウを設定し、タスクを作成します。
dms-rds-for-sql-server-data-migration-serverless_21

サーバーレスタスクが作成されました。
dms-rds-for-sql-server-data-migration-serverless_22

2. レプリケーションタスク(サーバーレス)の開始

アクションからタスクを開始します。
dms-rds-for-sql-server-data-migration-serverless_23

移行前評価はオフにしてタスクを開始します。移行前評価はあとで検証しましょう。
dms-rds-for-sql-server-data-migration-serverless_24

タスクのステータスが初期化中となり、
dms-rds-for-sql-server-data-migration-serverless_25

メタデータの準備中となり、
dms-rds-for-sql-server-data-migration-serverless_26

キャパシティのプロビジョニング中となります。
dms-rds-for-sql-server-data-migration-serverless_27

キャパシティのプロビジョニングが終わり、タスクが開始されます。
dms-rds-for-sql-server-data-migration-serverless_28

サーバーレスのタスクのステータスは以下ドキュメントに遷移図があります。

https://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Serverless.Components.html

タスクの作成からトータルで 20 分程待ち、ロードが完了しました。開始・停止時間と、プロビジョンド DMS キャパシティユニットのところに DCU が表記されました。
dms-rds-for-sql-server-data-migration-serverless_29

ターゲット DB に接続してデータが移行されているか確認します。

			
			SELECT * FROM [user];

		

▼実行結果

			
			id          name       address
----------- ---------- ----------
1           Yamada     Tokyo
2           Satou      Chiba
3           Kinjo      Okinawa

(3 行に影響しました)

完了時刻: 2025-09-30T21:14:08.7899582+09:00

		

dms-rds-for-sql-server-data-migration-serverless_30

無事 user テーブルが作成され、データが移行されていることが確認できました。

また、少したってタスクのステータスを見ると、「停止およびプロビジョニング解除済み」となっていました。
プロビジョンドモードと違ってタスクが動いていない時間はコンピューティングリソースが解放されるので、コストがかかりっぱなしにならないというわけです。
dms-rds-for-sql-server-data-migration-serverless_31

ちなみに、時間当たりの料金だとサーバーレスの方が少し高いです。
https://aws.amazon.com/jp/dms/pricing/

オンデマンドインスタンス(プロビジョンドインスタンス)の料金(東京リージョン)

インスタンスタイプ 時間あたりの料金 (シングル AZ) 時間あたりの料金 (マルチ AZ)
t3.medium(2 vCPU、CPU バーストクレジットあり、 4 GiB メモリ) USD 0.112 USD 0.224

サーバーレスの料金(東京リージョン)

AWS DMS キャパシティユニット (DCU) 時間あたりの料金 (シングル AZ) 時間あたりの料金 (マルチ AZ)
2(2 vCPU、4 GiB メモリ) USD 0.229 USD 0.458

おわりに

DMS のタスクモードをサーバーレスにして RDS for SQL Server のデータ移行を試してみました。

プロビジョンドモードと比べるとレプリケーションインスタンスを作成する手間が省けるので設定は簡単になりつつ、コンピューティングリソースを作成する兼ね合いでタスク作成から完了まで若干待ち時間が長いという特徴もありました。

実は一部エラーでうまく進まないタイミングがあったりもしたので、CloudWatch Logs も確認して後で詳細を確認しようと思います。

本記事への質問やご要望については画面下部のお問い合わせ 「DevelopersIO について」 からご連絡ください。記事に関してお問い合わせいただけます。

参考

https://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Tasks.Creating.html?icmpid=docs_console_unmapped

https://repost.aws/questions/QUu1lpkXONTs6C15kdSibT2w/dms-serverless-replication-instance-can-t-be-started-reloaded-or-resumed

この記事をシェアする

FacebookHatena blogX

関連記事

AWS DMS で Amazon RDS for SQL Server のデータ移行を行う~ Serverless 編~ | DevelopersIO