Cloud Service
AWS Database Migration Service (DMS)
稼働中のデータベースを最小停止で AWS へ移行し、継続的なレプリケーションも行うマネージドな DB 移行サービス。
- 1.動いている DB を止めずに AWS へ移せる、ダウンタイム最小の移行サービス。
- 2.全件ロード後に変更を継続反映(CDC)し、切替まで両者を同期し続ける。
- 3.同種移行はそのまま、異種移行は SCT でスキーマ変換してから DMS でデータを運ぶ。
解決する課題
オンプレミスや他クラウドで稼働しているデータベースを AWS へ移したいとき、最大の障壁は「移行中もサービスを止められない」という制約です。データを一括でエクスポートしてインポートする方式では、その間の書き込みが失われるか、長いダウンタイムが必要になります。DMS は、最初に全件をコピーしたうえで移行中に発生し続ける変更も追従して反映することで、切替の瞬間まで移行元と移行先を同期させ続け、停止時間を最小化します。
- 稼働中の本番 DB を、できるだけ停止せずにAWS へ移したい
- 移行作業の間も書き込みが続くため、一括コピーだけでは整合性が取れない
- Oracle から PostgreSQL のように、エンジンの異なる DB へ載せ替えたい
- オンプレミスと AWS の間で、当面は継続的にデータを同期しておきたい
移行元と移行先が同じエンジン(MySQL から MySQL など)なら、スキーマはそのまま使えて DMS のデータ移行だけで完結します。エンジンが異なる異種移行では、先にスキーマやストアドプロシージャを変換する工程が別途必要になります。この切り分けが設計の出発点です。
主要概念と用語
- レプリケーションインスタンス: 移行処理を実行する計算リソース。移行元から読み取り、変換して移行先へ書き込むエンジンが動く
- エンドポイント: 移行元(ソース)と移行先(ターゲット)それぞれの接続情報。1 つのインスタンスで複数の組み合わせを扱える
- レプリケーションタスク: どのテーブルをどう移すかを定義する作業単位。移行のモード(全件ロード、変更反映など)を指定する
- フルロード: 既存データを全件まとめて移行先へコピーする初期処理
- CDC(変更データキャプチャ): 移行元のトランザクションログを読み取り、フルロード後に発生した変更を移行先へ継続反映する仕組み
- 同種移行 / 異種移行: エンジンが同じ移行と、異なるエンジン間の移行。後者はスキーマ変換を伴う
- SCT(Schema Conversion Tool): 異種移行で、テーブル定義やストアドプロシージャなどのスキーマを移行先エンジン向けに変換する補助ツール。DMS 本体とは役割が分かれる
- サーバーレス: レプリケーションインスタンスのサイズを固定で確保せず、処理量に応じて容量を自動調整する利用形態
仕様・制限・クォータ
- 移行はフルロードのみ、フルロード+CDC、CDC のみの組み合わせで実行できる
- 移行元・移行先には、リレーショナル DB だけでなく一部の NoSQL やデータストアも指定でき、多様なエンジンの組み合わせに対応する
- DMS が移行するのは主にテーブルのデータであり、インデックスや外部キー、ストアドプロシージャなどの複雑なスキーマ要素は対象外になりやすい。異種移行ではこれらを SCT 側で変換する
- テーブルマッピングにより、移す対象のスキーマ・テーブルの選択や、移行時の名前変換・列のフィルタリングといった変換ルールを定義できる
- レプリケーションインスタンスはネットワーク到達性が前提で、移行元・移行先の双方へ接続できるVPC・サブネット・セキュリティグループの設計が必要
対応する移行元・移行先の組み合わせ、扱えるデータ型、各種の上限値は時期によって変わります。設計時は必ず最新の公式情報で対応可否を確認してください。
内部の仕組み
DMS の中核はレプリケーションインスタンスです。利用者はソースとターゲットのエンドポイントを定義し、タスクで移行対象と動作モードを指定します。タスクを開始すると、インスタンスはまずフルロードで既存データを移行先へコピーします。フルロードの最中にも移行元では書き込みが続くため、その間の変更はトランザクションログから捕捉して保留し、フルロード完了後にまとめて適用します。
その後は CDC が継続的に動き、移行元のログから新しい変更を読み取って移行先へ反映し続けます。これにより移行元と移行先がほぼリアルタイムで同期した状態を保てるため、アプリケーションの接続先を切り替える短い瞬間だけ停止すれば移行が完了します。CDC を止めずに長期間動かせば、移行ではなく継続的なレプリケーションとしても使えます。
フルロード中の変更を取りこぼさないために、DMS はロード開始時点からログ上の変更を追跡しています。フルロードが終わると保留していた変更を適用し、そのまま CDC へ移行するため、両フェーズの間でデータの欠落が起きないように設計されています。
設計パターン / ベストプラクティス
- 最小停止のカットオーバー: フルロード+CDC で同期を保ち、切替直前に移行元への書き込みを止めて差分を反映しきってからアプリの接続先を切り替える
- 異種移行は SCT と組み合わせる: 先に SCT でスキーマを変換して移行先に作成し、その後 DMS でデータを運ぶ二段構えにする
- インデックスや制約は後付け: フルロードを高速化するため、移行先のセカンダリインデックスや外部キーは初期ロード後に作成する方が効率的なことが多い
- 継続レプリケーションでの併用運用: 移行後すぐ旧環境を捨てず、しばらく CDC で同期し続けて切り戻し可能な状態を保つ
- サーバーレスで容量管理を委ねる: 処理量の見積もりが難しい場合は、インスタンスサイズを固定せず自動調整する形態を選び、過不足を抑える
- 事前検証: 本番前にテスト移行を行い、データ型の不一致や変換ルールの妥当性を確認しておく
運用・監視
- タスクの進捗とステータス(フルロードの割合、CDC の状態)はコンソールや API で追跡できる
- CloudWatch メトリクスでレプリケーションインスタンスの CPU・メモリ・ストレージや、移行元とのレプリケーション遅延を監視する
- 行単位のエラーや変換失敗はタスクログに記録され、検証機能でソースとターゲットのデータ整合性を確認できる
- 遅延が増えたら、レプリケーションインスタンスのサイズ不足、ネットワーク帯域、ターゲット側の書き込み性能を疑う
- 移行が完了し切替が済んだら、不要になったタスク・エンドポイント・インスタンスを停止/削除して課金を止める
コスト
- 課金は主にレプリケーションインスタンスの稼働時間と、それに付随するストレージで構成される
- サーバーレス形態では確保した固定サイズではなく、実際の処理量に応じた容量に対して課金される
- 移行元・移行先が AWS の外にある場合は、データ転送に関わる費用も考慮する
- 移行が終わったあとも放置するとインスタンスの稼働料がかかり続けるため、完了後の停止・削除が基本
- 長期の継続レプリケーション用途では、常時稼働するコストを前提にインスタンスサイズの適正化を行う
DMS のレプリケーションインスタンスは起動している限り課金されます。一回限りの移行では、カットオーバーが済み次第タスクとインスタンスを片付けるのがコスト面の鉄則です。
セキュリティ
- 移行データの保存時暗号化は KMS の鍵で管理される
- 移行元・移行先との転送時の暗号化には SSL/TLS を利用できる
- DMS の操作権限や、移行先などへのアクセス権限は IAM で最小権限に絞る
- レプリケーションインスタンスは VPC 内に配置し、移行元・移行先へはプライベートな経路で接続するのが望ましい
- DB の接続情報は平文で持たず、Secrets Manager などで安全に管理する
DMS は本番の実データを移行元から移行先へ運びます。経路の暗号化、エンドポイント認証情報の保護、インスタンスのプライベート配置を徹底し、データが想定外の経路に流れないようにしてください。
Well-Architected の観点
- 運用上の優秀性: 移行をタスクとして定義・再実行でき、進捗やデータ整合性を可視化しながら計画的にカットオーバーできる
- 信頼性: フルロードと CDC の連携でデータ欠落を防ぎ、継続同期により切り戻し可能な状態を保てる
- セキュリティ: KMS による保存時暗号化、SSL/TLS による転送時暗号化、IAM の最小権限、VPC でのプライベート配置
- コスト最適化: サーバーレスでの容量自動調整と、移行完了後の速やかな停止・削除によるムダの排除
試験で問われるポイント
- 「稼働中の DB を最小停止で AWS へ移したい」→ DMS(フルロード+CDC)
- 「移行中も同期を保ちたい/切り戻せるようにしたい」→ CDC による継続レプリケーション
- 「Oracle から PostgreSQL など異種エンジンへ移す」→ スキーマは SCT で変換し、データは DMS で運ぶ二段構え
- DMS が運ぶのは主にデータ。複雑なスキーマやストアドプロシージャの変換は SCT の役割という分担
- 「ペタバイト級を回線が細い環境でオフライン移送」は DMS ではなく Snow Family
関連サービス・比較
スキーマ変換を担う AWS SCT(Schema Conversion Tool) とよく対比されます。DMS はデータを移す役割、SCT はスキーマを変換する役割で、異種移行ではこの 2 つを組み合わせて使います。
| 観点 | DMS | SCT |
|---|---|---|
| 主な役割 | データの移行と継続同期 | スキーマやコードの変換 |
| 扱う対象 | テーブルのデータ | テーブル定義やストアドプロシージャ |
| 異種移行での位置づけ | 変換後にデータを運ぶ後工程 | 先にスキーマを変換する前工程 |
| 継続同期 | CDC で同期し続けられる | 一度きりの変換が中心 |
ハンズオン / CLI例
# レプリケーションインスタンスを作成(VPC 内に配置)
aws dms create-replication-instance \
--replication-instance-identifier migrate-ri \
--replication-instance-class dms.t3.medium \
--allocated-storage 50 \
--replication-subnet-group-identifier my-dms-subnet-group \
--no-publicly-accessible
# ソース/ターゲットのエンドポイントを作成
aws dms create-endpoint \
--endpoint-identifier src-mysql \
--endpoint-type source \
--engine-name mysql \
--server-name onprem-db.example.internal \
--port 3306 \
--username admin \
--ssl-mode require
# フルロード+CDC のタスクを作成して開始
aws dms create-replication-task \
--replication-task-identifier app-migration \
--source-endpoint-arn arn:aws:dms:ap-northeast-1:123456789012:endpoint:SRC... \
--target-endpoint-arn arn:aws:dms:ap-northeast-1:123456789012:endpoint:TGT... \
--replication-instance-arn arn:aws:dms:ap-northeast-1:123456789012:rep:RI... \
--migration-type full-load-and-cdc \
--table-mappings file://table-mappings.json
AWS Service
AWS Database Migration Service (DMS)を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
移行・転送
比較で見る軸
クラウド: AWS / カテゴリ: 移行・転送 / 難易度: intermediate
導入後に効く点
全件ロード後に変更を継続反映(CDC)し、切替まで両者を同期し続ける。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- AWS
- カテゴリ
- 移行・転送
- 難易度
- intermediate
- 関連資格
- SAA-C03 / DEA-C01
- 設計柱
- operational / reliability
判断チェックリスト
- 自社の用途が「移行・転送 / operational」に近いか確認する。
- 強みである「動いている DB を止めずに AWS へ移せる、ダウンタイム最小の移行サービス。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。