Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS DMS で SQL Server を移行してみた/aws-dms-sql-server...

Avatar for emi emi
October 26, 2025

AWS DMS で SQL Server を移行してみた/aws-dms-sql-server-migration

Toranomon Tech Hub 第五回 秋のIT大運動会! 〜技術ジャンル対抗LTバトル〜
https://toranomon-tech-hub.connpass.com/event/365716/

Avatar for emi

emi

October 26, 2025
Tweet

More Decks by emi

Other Decks in Technology

Transcript

  1. 自己紹介 2 • 最近やっていた・いること ◦ Terraform を用いた AWS リソース構築支援 ◦

    AWS Control Tower を用いたマルチアカウント環境での AWS Security Hub、Amazon GuardDuty 展開 ◦ AWS リソース負荷軽減、構成検討 ◦ コスト最適化アセスメント ◦ Amazon QuickSight や Amazon Athena を利用した データ分析・可視化 • 名前(ニックネーム) ◦ 木谷 映見(emi) • 部署 ◦ クラスメソッド株式会社 ◦ クラウド事業本部コンサルティング部 • 趣味 ◦ コーヒー、ドーナツ、サウナ、 ホットヨガ、漫画、音楽など AWS Certified Cloud Practitioner バ ッ ジ AWS Certified AI Practitioner バ ッ ジ AWS Certified Solutions Architect - Professional バ ッ ジ AWS Certified DevOps Engineer - Professional バ ッ ジ AWS Certified Advanced Networking - Specialty バ ッ ジ AWS Certified Machine Learning - Specialty AWS Certified Security - Specialty バ ッ ジ AWS Certified SysOps Administrator - Associate バ ッ ジ AWS Certified Developer - Associate バ ッ ジ AWS Certified Solutions Architect - Associate バ ッ ジ AWS Certified Data Engineer - Associate バ ッ ジ AWS Certified Machine Learning Engineer - Associate バ ッ ジ AWS Certified Cloud Practitioner バ ッ ジ AWS Certified AI Practitioner バ ッ ジ AWS Certified Solutions Architect - Professional バ ッ ジ AWS Certified DevOps Engineer - Professional バ ッ ジ AWS Certified Advanced Networking - Specialty バ ッ ジ AWS Certified Machine Learning - Specialty AWS Certified Security - Specialty バ ッ ジ AWS Certified SysOps Administrator - Associate バ ッ ジ AWS Certified Developer - Associate バ ッ ジ AWS Certified Solutions Architect - Associate バ ッ ジ AWS Certified Data Engineer - Associate バ ッ ジ AWS Certified Machine Learning Engineer - Associate バ ッ ジ 最近はカフェインを控えています
  2. 目次 3 ⚫ AWS DMS のおさらい ⚫ AWS DMS Serverless

    で Amazon RDS for SQL Server のデータ移行を行う ⚫ 1. セキュリティグループの作成 ⚫ 2. レプリケーションサブネットグループの作成 ⚫ 3. レプリケーションタスクの作成 ⚫ 4. レプリケーションタスクの開始 ⚫ 移行がうまくいかない場合
  3. AWS DMS のおさらい 4 ⚫ AWS DMS のおさらい ⚫ AWS

    DMS Serverless で Amazon RDS for SQL Server のデータ移行を行う ⚫ 1. セキュリティグループの作成 ⚫ 2. レプリケーションサブネットグループの作成 ⚫ 3. レプリケーションタスクの作成 ⚫ 4. レプリケーションタスクの開始 ⚫ 移行がうまくいかない場合
  4. 6 ⚫ AWS Database Migration Service(DMS) ⚫ データベース移行を簡単に実現するマネージドサービス ⚫ オンプレミス

    AWS、AWS AWS 間の移行が可能 ⚫ オンライン移行ツールであり、移行中もソースデータベースは稼働し続ける AWS DMS のおさらい AWS Database Migration Service (AWS DMS)
  5. 7 ⚫ 主な特徴 ⚫ 同種・異種データベース間の移行に対応 ⚫ Oracle → PostgreSQL、SQL Server

    → Aurora など ⚫ 3 つの移行タイプ ⚫ フルロード(一括移行) ⚫ CDC(継続的レプリケーション) ⚫ フルロード + CDC ⚫ DMS Serverless ⚫ 容量の自動スケーリング ⚫ 使った分だけの課金 AWS DMS のおさらい AWS Database Migration Service (AWS DMS)
  6. 11 ⚫ DMS Serverless ⚫ 従来の仕組み:プロビジョンド AWS DMS のおさらい レプリケーションに必要な

    コンピューティングリソースとして レプリケーションインスタンス (プロビジョンドインスタンス)を 作成する必要がある
  7. 12 ⚫ 従来のプロビジョンド方式でレプリケーションインスタンスを作成する際の サイジング検討 ⚫ TPS(1 秒あたりのトランザクション数)やトランザクション量が高いシステムではメモリ 不足がボトルネックになりやすいため、R 系列(メモリ最適化タイプ)を選ぶケースが多い ⚫

    T3 系のバースト型インスタンスはコスト効率が良いが、常時高負荷になるケースでは コストペナルティが出る可能性があるため注意 ⚫ 最初からオーバースペックにしすぎるとコストが無駄になるため、試運転/モニタリングによる 検証フェーズを組むと良い ⚫ 処理量に応じてインスタンスを手動でスケールアップする AWS DMS のおさらい
  8. 13 ⚫ 従来のプロビジョンド方式でレプリケーションインスタンスを作成する際の サイジング検討 ⚫ TPS(1 秒あたりのトランザクション数)やトランザクション量が高いシステムではメモリ 不足がボトルネックになりやすいため、R 系列(メモリ最適化タイプ)を選ぶケースが多い ⚫

    T3 系のバースト型インスタンスはコスト効率が良いが、常時高負荷になるケースでは コストペナルティが出る可能性があるため注意 ⚫ 最初からオーバースペックにしすぎるとコストが無駄になるため、試運転/モニタリングによる 検証フェーズを組むと良い ⚫ 処理量に応じてインスタンスを手動でスケールアップする AWS DMS のおさらい 柔軟性はやや低い
  9. 15 ⚫ DMS Serverless ⚫ レプリケーションに使用するコンピューティングリソースのキャパシティ(DMS キャパシティ ユニット、DCU)の最小値と最大値を設定 ⚫ 最小値(MinCapacityUnits)は任意で、何も設定しないと

    1 DCU(1 vCPU、2 GiB)になる ⚫ 最大値(MaxCapacityUnits)は必須項目 ⚫ 設定値に応じて DMS Serverless のコンピューティングリソースが増減する。使用した分だけ の従量課金となる ⚫ 時間当たりの料金だとサーバーレスの方が少し高い AWS DMS のおさらい Aurora Serverless v2 などと似ている AWS DMS サーバーレスでの Auto Scaling について https://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Serverless.Components.html#CHAP_Serverless.autoscaling サーバーレスレプリケーションの作成 https://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Serverless.Components.html#CHAP_Serverless.create 料金 - AWS Database Migration Service |AWS https://aws.amazon.com/jp/dms/pricing/ インスタンスタイプ 時間あたりの料金 (シングル AZ) 時間あたりの料金 (マルチ AZ) t3.medium (2vCPU、CPU バーストクレジットあり、 4GiB メモリ) USD 0.112 USD 0.224 AWS DMS キャパシティユニット (DCU) 時間あたりの料金 (シングル AZ) 時間あたりの料金 (マルチ AZ) 2 (2 vCPU、4 GiB メモリ) USD 0.229 USD 0.458 サーバーレスの料金(東京リージョン) オンデマンドインスタンス(プロビジョンドインスタンス)の料金(東京リージョン)
  10. 16 ⚫ DMS サーバーレスでの自動スケーリングのチューニング ⚫ ドキュメントを見ると以下のようにチューニングするのが推奨されている ⚫ MaxCapacityUnits はできるだけ大きい値に設定 ⚫

    使用分のみ課金されるため実コストは見積り最大値より低い ⚫ MinCapacityUnits は突発的なワークロード増加に対応できる程度の大きさにする ⚫ プロビジョニング/プロビジョニング解除の時間差を補う ⚫ CapacityUtilization が常に 100% でログに out-of-memory イベントが記録されるよう だとプロビジョニング不足の兆候 ⚫ out-of-memory 発生時、自動復旧は時間がかかるため MinCapacityUnits を増やして 手動でタスク再開する方が迅速 AWS DMS のおさらい AWS DMS サーバーレスでの Auto Scaling について https://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Serverless.Components.html#CHAP_Serverless.autoscaling サーバーレスレプリケーションの作成 https://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Serverless.Components.html#CHAP_Serverless.create
  11. AWS DMS Serverless で Amazon RDS for SQL Server のデータ移行を行う

    18 ⚫ AWS DMS のおさらい ⚫ AWS DMS Serverless で Amazon RDS for SQL Server のデータ移行を行う ⚫ 1. セキュリティグループの作成 ⚫ 2. レプリケーションサブネットグループの作成 ⚫ 3. レプリケーションタスクの作成 ⚫ 4. レプリケーションタスクの開始 ⚫ 移行がうまくいかない場合
  12. 20 AWS DMS Serverless で Amazon RDS for SQL Server

    のデータ移行を行う AWS DMS で Amazon RDS for SQL Server のデータ移行を行う~ Serverless 編~ | DevelopersIO https://dev.classmethod.jp/articles/dms-rds-for-sql-server-data-migration-serverless/ SQL Server に SQL Server Management Studio (SSMS) でログインして データ挿入やデータ確認を 行うための踏み台
  13. 1. セキュリティグループの作成 21 ⚫ AWS DMS のおさらい ⚫ AWS DMS

    Serverless で Amazon RDS for SQL Server のデータ移行を行う ⚫ 1. セキュリティグループの作成 ⚫ 2. レプリケーションサブネットグループの作成 ⚫ 3. レプリケーションタスクの作成 ⚫ 4. レプリケーションタスクの開始 ⚫ 移行がうまくいかない場合
  14. 22 1. セキュリティグループの作成 AWS DMS で Amazon RDS for SQL

    Server のデータ移行を行う | DevelopersIO -セキュリティグループの作成 https://dev.classmethod.jp/articles/dms-rds-for-sql-server-data-migration/
  15. 2. レプリケーションサブネットグループの作成 23 ⚫ AWS DMS のおさらい ⚫ AWS DMS

    Serverless で Amazon RDS for SQL Server のデータ移行を行う ⚫ 1. セキュリティグループの作成 ⚫ 2. レプリケーションサブネットグループの作成 ⚫ 3. レプリケーションタスクの作成 ⚫ 4. レプリケーションタスクの開始 ⚫ 移行がうまくいかない場合
  16. 24 2. レプリケーションサブネットグループの作成 AWS DMS で Amazon RDS for SQL

    Server のデータ移行を行う | DevelopersIO -レプリケーションサブネットグループの作成 https://dev.classmethod.jp/articles/dms-rds-for-sql-server-data-migration/
  17. 3. レプリケーションタスクの作成 25 ⚫ AWS DMS のおさらい ⚫ AWS DMS

    Serverless で Amazon RDS for SQL Server のデータ移行を行う ⚫ 1. セキュリティグループの作成 ⚫ 2. レプリケーションサブネットグループの作成 ⚫ 3. レプリケーションタスクの作成 ⚫ 4. レプリケーションタスクの開始 ⚫ 移行がうまくいかない場合
  18. 26 ⚫ タスク名、ソース DB、ターゲット DB を指定 ⚫ タスクモードはサーバーレス ⚫ ターゲットテーブル準備モード

    ⚫ 何もしない(Do nothing) ⚫ 既存のテーブルをそのまま利用(構造もデータも変更しない) ⚫ すでにターゲットにテーブルが準備されており、CDC のみで同期したい場合に適する ⚫ ターゲット上のテーブルを削除(Drop tables on target) ⚫ 移行開始前にターゲットテーブルを削除して再作成 ⚫ 空のテーブルから移行を始めたい場合に利用 ⚫ 切り詰め(Truncate) ⚫ 既存のテーブル構造はそのまま残し、中身のデータだけ削除 ⚫ スキーマを保持したままデータを入れ替える用途に適する 3. レプリケーションタスクの作成 AWS DMS で Amazon RDS for SQL Server のデータ移行を行う~ Serverless 編~ | DevelopersIO -レプリケーションタスク(サーバーレス)の作成https://dev.classmethod.jp/articles/dms-rds-for-sql-server-data-migration-serverless/
  19. 27 ⚫ レプリケーションに LOB 列を含める ⚫ LOB 列を含めない ⚫ LOB

    カラムは移行せず無視する ⚫ 限定 LOB モード ⚫ 「最大 LOB サイズ」で指定した長さまでで切り捨てる ⚫ 高速だがデータは一部欠ける可能性あり ⚫ 完全 LOB モード ⚫ 「LOB チャンクサイズ」で分割して全データを転送 ⚫ 完全に移行できるが処理は遅め 3. レプリケーションタスクの作成 AWS DMS で Amazon RDS for SQL Server のデータ移行を行う~ Serverless 編~ | DevelopersIO -レプリケーションタスク(サーバーレス)の作成https://dev.classmethod.jp/articles/dms-rds-for-sql-server-data-migration-serverless/
  20. 28 ⚫ LOB(Large Object)/ CLOB(Character Large Object) ⚫ データベースで扱う非常に大きなデータを格納するための専用データ型 ⚫

    通常の数値や文字列カラムよりもサイズが大きくなる ⚫ BLOB (Binary Large Object) ⚫ 画像、動画、音声、PDF などのバイナリデータを保存するための型 ⚫ 写真ファイルや動画ファイルそのもの ⚫ CLOB (Character Large Object) ⚫ 小説や記事、ソースコードなどの長文テキストデータを保存するための型 ⚫ 数万〜数百万文字レベルの文章 ⚫ NCLOB (National Character LOB) ⚫ Unicode 文字(多言語テキスト)を扱える LOB 3. レプリケーションタスクの作成 AWS DMS で Amazon RDS for SQL Server のデータ移行を行う~ Serverless 編~ | DevelopersIO -レプリケーションタスク(サーバーレス)の作成https://dev.classmethod.jp/articles/dms-rds-for-sql-server-data-migration-serverless/
  21. 29 ⚫ テーブルマッピング ⚫ スキーマ名 ⚫ スキーマテーブル名 ⚫ アクション:含む 3.

    レプリケーションタスクの作成 AWS DMS で Amazon RDS for SQL Server のデータ移行を行う~ Serverless 編~ | DevelopersIO -レプリケーションタスク(サーバーレス)の作成https://dev.classmethod.jp/articles/dms-rds-for-sql-server-data-migration-serverless/ SQL Server の構造イメージ
  22. 30 ⚫ 作成済みの VPC、サブネットグループ、セキュリティグループを設定 ⚫ 可用性 ⚫ マルチ AZ or

    シングル AZ 3. レプリケーションタスクの作成 AWS DMS で Amazon RDS for SQL Server のデータ移行を行う~ Serverless 編~ | DevelopersIO -レプリケーションタスク(サーバーレス)の作成https://dev.classmethod.jp/articles/dms-rds-for-sql-server-data-migration-serverless/
  23. 4. レプリケーションタスクの開始 31 ⚫ AWS DMS のおさらい ⚫ AWS DMS

    Serverless で Amazon RDS for SQL Server のデータ移行を行う ⚫ 1. セキュリティグループの作成 ⚫ 2. レプリケーションサブネットグループの作成 ⚫ 3. レプリケーションタスクの作成 ⚫ 4. レプリケーションタスクの開始 ⚫ 移行がうまくいかない場合
  24. 32 ⚫ レプリケーションタスクの開始 4. レプリケーションタスクの開始 AWS DMS で Amazon RDS

    for SQL Server のデータ移行を行う~ Serverless 編~ | DevelopersIO https://dev.classmethod.jp/articles/dms-rds-for-sql-server-data-migration-serverless/
  25. 33 ⚫ 移行前評価 ⚫ 移行前に実現可能性と潜在的な問題を評価 ⚫ タスク開始前または開始時に自動実行され JSON/PDF 形式のレポートを生成 ⚫

    評価項目の例 ⚫ ターゲットデータベースのトリガー検出(特 定の操作が起きたら自動的に実行される処理 が無いか) ⚫ セカンダリインデックスがフルロード中にタ ーゲット DB で有効か(インデックスが有効 だと、データ挿入のたびにインデックス更新 が発生し、移行速度が大幅に低下) ⚫ etc… ⚫ 「合格」「警告」などの結果が得られ る 4. レプリケーションタスクの開始 AWS DMS で Amazon RDS for SQL Server のデータ移行を行う~ Serverless 編~ | DevelopersIO https://dev.classmethod.jp/articles/dms-rds-for-sql-server-data-migration-serverless/
  26. 34 ⚫ トータルで 20 分程待ち、ロードが完了 ⚫ タスクのステータスを見ると、「停止およびプロビジョニング解除済み」とな っていた ⚫ プロビジョンドモードと違ってタスクが動いていない時間はコンピューティン

    グリソースが解放されるので、コストがかかりっぱなしにならない 4. レプリケーションタスクの開始 AWS DMS で Amazon RDS for SQL Server のデータ移行を行う~ Serverless 編~ | DevelopersIO -レプリケーションタスク(サーバーレス)の作成https://dev.classmethod.jp/articles/dms-rds-for-sql-server-data-migration-serverless/
  27. 移行がうまくいかない場合 35 ⚫ AWS DMS のおさらい ⚫ AWS DMS Serverless

    で Amazon RDS for SQL Server のデータ移行を行う ⚫ 1. セキュリティグループの作成 ⚫ 2. レプリケーションサブネットグループの作成 ⚫ 3. レプリケーションタスクの作成 ⚫ 4. レプリケーションタスクの開始 ⚫ 移行がうまくいかない場合
  28. 37 ⚫ まずは移行前評価で何か警告が出ていないか確認 ⚫ タスク作成時にタスクログを有効化。CloudWatch Logs でタスクログを確認 移行がうまくいかない場合 AWS DMS

    のタスクモードをサーバーレスで試した際にフルロードが完了しなかったように見えた原因を CloudWatch Logs から調査する | DevelopersIO https://dev.classmethod.jp/articles/dms-serverless-full-load-troubleshooting-with-logs/
  29. 38 ⚫ AWS DMS のソースデータベースとターゲットデータベース間でデータが一致 しない場合のトラブルシューティング | AWS re:Post ⚫

    1. ラージバイナリオブジェクト (LOB) が正しく設定されていない ⚫ 制限付き LOB モードで LobMaxSize を超えるデータが切り捨てられる ⚫ ターゲットのLOB列のデータがソースと完全一致しない ⚫ 解決策 ⚫ ログファイルで切り捨て警告メッセージを確認 ⚫ 診断サポートスクリプトで LOB 列の最大サイズを特定 ⚫ LOB列の最大サイズより大きい LobMaxSize を設定 ⚫ LOB 列が 100MB を超える場合は、フル LOB モードまたはインライン LOB モードを使用 移行がうまくいかない場合 AWS DMS のソースデータベースとターゲットデータベース間でデータが一致しない場合のトラブルシューティング | AWS re:Post https://repost.aws/ja/knowledge-center/dms-source-target-data-mismatch
  30. 39 ⚫ AWS DMS のソースデータベースとターゲットデータベース間でデータが一致 しない場合のトラブルシューティング | AWS re:Post ⚫

    2. ソースまたはターゲットのデータ型がサポートされていない ⚫ DMS がソースのデータ型を内部データ型に変換し、さらにターゲットのデータ型に変換する際 に不一致が発生 ⚫ 特定のデータ型が完全にサポートされていない(例: PostgreSQL の ENUM 型) ⚫ 解決策 ⚫ データ不一致を特定後、ソースとターゲットでデータ型に関連する制限を確認 ⚫ サポートされていないデータ型を特定 ⚫ 必要に応じて変換ルールやマッピングを調整 移行がうまくいかない場合 AWS DMS のソースデータベースとターゲットデータベース間でデータが一致しない場合のトラブルシューティング | AWS re:Post https://repost.aws/ja/knowledge-center/dms-source-target-data-mismatch
  31. 40 ⚫ AWS DMS のソースデータベースとターゲットデータベース間でデータが一致 しない場合のトラブルシューティング | AWS re:Post ⚫

    3. CDC のレプリケーション中に発生するエラーまたは例外により、 ターゲットのデータベースで DML トランザクションが失敗する ⚫ CDC 中にエラーや例外が発生し、ターゲットで DML 操作が失敗 ⚫ ソースの変更がターゲットに反映されない ⚫ 解決策 ⚫ タスクログでエラーを確認 ⚫ 制御テーブルを参照し、データのレプリケーション段階で記録された例外を確認 ⚫ 検証を有効にしている場合は awsdms_validation_failures_v1 テーブルをクエリして詳細情報を取得 ⚫ エラー内容に応じて、権限、ネットワーク、データ型などの問題を解決 移行がうまくいかない場合 AWS DMS のソースデータベースとターゲットデータベース間でデータが一致しない場合のトラブルシューティング | AWS re:Post https://repost.aws/ja/knowledge-center/dms-source-target-data-mismatch
  32. 41 ⚫ 最近見かけた事象 ⚫ NOT NULL 制約違反 ⚫ ソース DB

    からターゲット DB へのレプリケーション時、カラムに NULL 値を 挿入しようとした ⚫ ターゲット DB ではこのカラムが NOT NULL 制約を持っているため、 レプリケーションが失敗 ⚫ エラー内容 ⚫ Cannot insert the value NULL into column 'xxx', table 'xxx'; ⚫ column does not allow nulls. UPDATE fails. ⚫ 解決策 ⚫ 変換ルールで coalesce または ifnull 関数を使用して NULL 値を適切な値に変換 移行がうまくいかない場合 AWS DMS のソースデータベースとターゲットデータベース間でデータが一致しない場合のトラブルシューティング | AWS re:Post https://repost.aws/ja/knowledge-center/dms-source-target-data-mismatch
  33. 参考 42 ⚫ AWS Database Migration Service 概要【AWS Black Belt】

    - YouTube https://www.youtube.com/watch?v=oopjz4vu9CY ⚫ AWS Database Migration Service ベストプラクティス - 計画編【AWS Black Belt】 - YouTube https://www.youtube.com/watch?v=teaU4tWraXE ⚫ AWS Database Migration Service ベストプラクティス - 実践編【AWS Black Belt】 - YouTube https://www.youtube.com/watch?v=2tE9uCGrk6M ⚫ AWS へのシステム移行の要点 (前編) | Amazon Web Services ブログ https://aws.amazon.com/jp/blogs/news/key-points-of-migrating-to-aws-part1/ ⚫ AWS へのシステム移行の要点 (後編) | Amazon Web Services ブログ https://aws.amazon.com/jp/blogs/news/key-points-of-migrating-to-aws-part2/ ⚫ データベース移行とは - データベース移行の説明 - AWS https://aws.amazon.com/jp/what-is/database-migration/ ⚫ RDS for SQL Server に SQL Server Management Studio(SSMS)でデータを挿入する | DevelopersIO https://dev.classmethod.jp/articles/rds-for-sql- server-ssms/ ⚫ AWS DMS で Amazon RDS for SQL Server のデータ移行を行う | DevelopersIO https://dev.classmethod.jp/articles/dms-rds-for-sql-server-data-migration/ ⚫ AWS DMS で Amazon RDS for SQL Server のデータ移行を行う〜 Serverless 編〜 | DevelopersIO https://dev.classmethod.jp/articles/dms-rds-for-sql- server-data-migration-serverless/ ⚫ AWS DMS のタスクモードをサーバーレスで試した際にフルロードが完了しなかったように見えた原因を CloudWatch Logs から調査する | DevelopersIO https://dev.classmethod.jp/articles/dms-serverless-full-load-troubleshooting-with-logs/ ⚫ AWS DMS のソースデータベースとターゲットデータベース間でデータが一致しない場合のトラブルシューティング | AWS re:Post https://repost.aws/ja/knowledge-center/dms-source-target-data-mismatch ⚫ AWS DMS を使用して DB エンジン間でデータを移行する | AWS re:Post https://repost.aws/ja/knowledge-center/migrate-db-dms ⚫ 異種混在データベースの移行 - AWS 規範ガイダンス https://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/migration-oracle- database/heterogeneous-migration.html