【初心者向け】AWS Database Migration Service(DMS) 入門!完全ガイド

に公開

AWS Database Migration Service (DMS)

icon

☘️ はじめに

本ページは、AWSに関する個人の勉強および勉強会で使用することを目的に、AWSドキュメントなどを参照し作成しておりますが、記載の誤り等が含まれる場合がございます。

最新の情報については、AWS公式ドキュメントをご参照ください。

👀 Contents

AWS Database Migration Service (DMS) とは

AWS Database Migration Service (DMS) は、データベースをAWSに安全かつ簡単に移行するためのフルマネージドサービスです。オンプレミスのデータベースからAWSへの移行、AWSクラウド内でのデータベース間の移行、さらには異なるデータベースエンジン間の移行も可能です。

移行中もソースデータベースは稼働し続けるため、ダウンタイムを最小限に抑えることができます。

【AWS Black Belt Online Seminar】AWS Database Migration Service 概要(YouTube)(37:19)

dms-01-overview

【AWS Black Belt Online Seminar】AWS Database Migration Service ベストプラクティス - 計画編(YouTube)(51:06)

dms-02-plan

【AWS Black Belt Online Seminar】AWS Database Migration Service ベストプラクティス - 実践編(YouTube)(47:01)

dms-03-practice

【AWS Black Belt Online Seminar】AWS Database Migration Service ベストプラクティス - トラブルシューティング編(YouTube)(59:44)

dms-04-troubleshooting

生成 AI を活用したデータベースのスキーマ変換で移行を加速しよう:AWS Database Migration Service Schema Conversion(AWS-09)(YouTube)(40:06)

dms-10-aws09

AWSブログ>はじめてAWS DMSを検討する際に読んでいただきたいこと

AWS Database Migration Service サービス概要

AWS Database Migration Service ドキュメント

AWS Database Migration Service よくある質問

AWS Database Migration Service 料金

DMSの全体像

dms

DMSの主な機能

DMSには次のような特徴があります。

  • 同種・異種データベース間の移行
    • 同じデータベースエンジン間(例: Oracle → Oracle)だけでなく、異なるデータベースエンジン間(例: Oracle → PostgreSQL)の移行も可能
  • 最小限のダウンタイム
    • 継続的なデータレプリケーション (CDC: Change Data Capture) により、移行中もソースデータベースを稼働し続けることが可能
  • 多様なデータベースに対応
    • 商用データベース(Oracle、SQL Server)からオープンソースデータベース(PostgreSQL、MySQL、MariaDB)まで幅広くサポート
  • データ変換機能

DMSの構成要素

DMSを使用する際には、以下の4つの主要コンポーネントを理解する必要があります。

  • IAM Role
    • dms-vpc-roledms-cloudwatch-logs-role という固定名称のロールが必要です。
    • ターゲットデータベースにAmazon Redshiftを指定する場合は、 dms-access-for-endpoint というロールも必要になります。
    • 参考: Creating the IAM roles to use with AWS DMS
  • エンドポイント
    • ソースエンドポイント
      • 移行元のデータベース接続情報を定義
      • データベースの種類、ホスト名、ポート番号、認証情報などを設定
    • ターゲットエンドポイント
      • 移行先のデータベース接続情報を定義
      • ソースと同様に接続に必要な情報を設定
  • レプリケーションインスタンス
    • プロビジョンドインスタンス
      • 実際にデータ移行処理を実行するEC2インスタンス
      • VPC内に配置され、ソースとターゲットの両方にアクセス可能である必要がある
      • インスタンスタイプによって処理性能が変わる
    • サーバーレスインスタンス
      • EC2のプロビジョニング、エンジンバージョン、パッチ適用が不要なタイプ
      • レプリケーションが稼働している時間のみ課金されます。
        • ただし、レプリケーションが停止した状態(Stopped)でもDeprovisionedになるまでの48時間は課金が継続しているようです。
        • この48時間はレプリケーションが停止したインスタンスを再開可能な猶予時間のようです。48時間以内であれば、初期化などのフェーズを行わず再開が可能だが、この状態が課金対象となっているようです。
        • 参考: AWS DMS Serverless Components
      • プロビジョンドインスタンスに比べてサポートしているソースデータベースとターゲットデータベースに制限がある
  • レプリケーションタスク
    • ソースデータベースからターゲットデータベースへの移行に関する移行方式やテーブルマッピングなどを管理する

サポートされるデータベースエンジン

DMSがサポートする主なデータベースエンジンは以下のとおりです。

詳細なサポート状況については、Sources for data migration / Targets for data migrationDMS Serverless components - Supported Endpointsを参照してください。

※ *付はサーバーレスインスタンスがサポートするものです

データベースエンジン ソース ターゲット *ソース *ターゲット
Amazon S3
Amazon Aurora (MySQL互換、PostgreSQL互換)
Amazon RDS (MySQL, PostgreSQL)
MySQL
GooleCloud for MySQL
OCI MySQL
PostgreSQL
GoogleCloud for PostgreSQL
Amazon RDS (MariaDB)
MariaDB
Amazon RDS (Oracle)
Oracle Database
Amazon RDS (SQL Server)
Microsoft SQL Server
Azure SQL Database
MongoDB
SAP ASE (Sybase)
Amazon RDS (Db2)
IBM Db2 (Linux, Unix, Windows用)
Amazon DynamoDB
Amazon Redshift
Amazon OpenSearch Service
Amazon Kinesis Data Streams
Amazon DocumentDB
Amazon Neptune
Amazon Managed Streaming for Apache Kafka
Amazon Timestream
Babelfish
Redis OSS

移行のタイプ

DMSでは、要件に応じて3つの移行タイプを選択できます。

  • フルロード (Full Load)
    • 既存データを一度だけ移行する方式です。移行中にソースデータベースで発生した変更は含まれません。
  • フルロード + CDC (Change Data Capture)
    • 既存データの移行後、継続的にソースの変更をターゲットに反映します。最も一般的な移行パターンです。
  • CDC のみ
    • 既存データは別の方法で移行済みの場合に、変更分のみを継続的に反映します。

ソースデータベースの設定

DMSを使用する前に、ソースデータベースのパラメータを変更する必要があります。
以下に一例を示します。一部のパラメータにはデータベースの再起動が必要なものがありますので、移行前に確認が必要です。

そのほかについては、Sources for data migrationを参照してください。

MySQL or MariaDB:

参考: AWSドキュメント>Using a MySQL-compatible database as a source for AWS DMS

binlog_format=ROW
binlog_row_image=FULL

PostgreSQL:

参考: AWSドキュメント>Using a PostgreSQL database as an AWS DMS source

logical_replication=1
synchronous_commit=ON

移行対象オブジェクト

DMSでは、ソースデータベースの以下のオブジェクトが移行されます。

  • テーブル
  • プライマリキー

これ以外のオブジェクトは移行されないため、移行前または移行後に手動で作成する必要があります。
異種間データベース移行の場合は、AWS SCTの利用も検討します。

  • インデックス
  • シーケンス
  • ファンクション
  • 外部キー
  • ビュー
  • トリガー など。

AWSドキュメント>Migration planning for AWS Database Migration Serviceを参考にしてください。

Source and target endpoints – Make sure that you know what information and 
tables in the source database need to be migrated to the target database. 
AWS DMS supports basic schema migration, including the creation of tables 
and primary keys. However, AWS DMS doesn't automatically create secondary 
indexes, foreign keys, user accounts, and so on, in the target database. 
Depending on your source and target database engine, you might need to set 
up supplemental logging or modify other settings for a source or target 
database. For more information, see Sources for data migration and Targets 
for data migration.

DMSの料金

DMSの料金は、主に以下の要素で構成されます。

  • レプリケーションインスタンスの料金
    • 起動している時間に対して課金(時間単位)
    • インスタンスタイプによって料金が異なる
      • サーバーレスインスタンスの場合は、DCU(DMS キャパシティユニット)
  • 追加ストレージの料金
    • レプリケーションインスタンスに割り当てたストレージ容量に対して課金
  • データ転送料金
    • 基本的に、同一リージョン内のデータ転送は無料
    • リージョン間のデータ転送には料金が発生

詳細は料金ページを参照してください。

  • 無料枠
    • AWS Free Tierの一部として、1 年間、毎月最大 750 時間分のシングルアベイラビリティーゾーン (AZ) dms.t3.microが利用可能です

DMSのクォータ

DMSには以下のような制限があります。

項目 デフォルト制限 引き上げ可能
レプリケーションインスタンス数 60/アカウント はい
レプリケーションタスク数 600/アカウント はい
レプリケーションタスク数 200/レプリケーションインスタンス はい
エンドポイント数 1,000/アカウント はい
エンドポイント数 100/レプリケーションインスタンス はい
サブネットグループ数 60/アカウント はい
レプリケーション インスタンスの合計ストレージ容量 30 TB はい

その他の制限については、AWSドキュメントを参照してください。

レプリケーションインスタンスの選択

レプリケーションインスタンスの選択は、移行のパフォーマンスに大きく影響します。

インスタンスサイズの決定要因:

  • 移行するデータ量
  • 移行期間の要件
  • ソースとターゲット間のネットワーク帯域幅
  • CDCを使用する場合の変更率

インスタンスサイズの選択例:

  • 小規模なデータベース(10GB未満): dms.t3.medium
  • 中規模なデータベース(10GB~100GB): dms.c5.xlarge
  • 大規模なデータベース(100GB以上): dms.c5.2xlarge以上

実際の移行では、最初に小さいインスタンスで試験移行を実施し、パフォーマンスを確認してから本番移行用のインスタンスサイズを決定することを推奨します。

タスクの設定

レプリケーションタスクには、以下のような重要な設定があります。

テーブルマッピング

移行対象のテーブルを指定します。特定のテーブルのみ、または特定のスキーマ全体を対象にすることができます。
ルールタイプ(rule-type)にselectionを指定して定義します。
ルールアクション(rule-action)にexcludeを指定すると除外条件になります。

{
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "1",
      "object-locator": {
        "schema-name": "myschema",
        "table-name": "%"
      },
      "rule-action": "include"
    }
  ]
}

ルールタイプには以下のものがあります。

  • selection: 選択
  • transformation: 変換

タスク設定

タスクの動作を細かく制御できます。

参考: Task settings example

{
  "TargetMetadata": {
    "SupportLobs": true,
    "FullLobMode": false,
    "LobChunkSize": 64,
    "LimitedSizeLobMode": true,
    "LobMaxSize": 32
  },
  "FullLoadSettings": {
    "TargetTablePrepMode": "DROP_AND_CREATE",
    "CreatePkAfterFullLoad": false,
    "StopTaskCachedChangesApplied": false,
    "StopTaskCachedChangesNotApplied": false,
    "MaxFullLoadSubTasks": 8,
    "TransactionConsistencyTimeout": 600,
    "CommitRate": 10000
  }
}

主な設定項目は以下のとおりです。

  • LOB (Large Object) の処理方法
    • 画像やテキストなどの大きなオブジェクトをどう扱うか
  • フルロード時の動作
    • ターゲットテーブルを削除して作成するか、データを追加するか
  • 並列処理の数
    • 同時に処理するサブタスクの数

変換ルール

DMSでは、移行時にテーブル名やカラム名を変換することができます。
ルールタイプ(rule-type)にtransformationを指定して定義します。

テーブル名の変換:

ルールアクション(rule-action)にrenameを指定します。

{
  "rules": [
    {
      "rule-type": "transformation",
      "rule-id": "1",
      "rule-name": "1",
      "rule-target": "table",
      "object-locator": {
        "schema-name": "oldschema",
        "table-name": "%"
      },
      "rule-action": "rename",
      "value": "newschema",
      "old-value": null
    }
  ]
}

カラムの追加や削除:

特定のカラムを移行対象から除外したり、新しいカラムを追加したりすることも可能です。
ルールアクション(rule-action)にadd-columnremove-columnを指定します。

{
  "rules": [
    {
      "rule-type": "transformation",
      "rule-id": "1",
      "rule-name": "1",
      "rule-target": "column",
      "object-locator": {
          "schema-name": "Test",
          "table-name": "ITEM"
      },
      "value": "FULL_NAME",
      "expression": "$FIRST_NAME||'_'||$LAST_NAME",
      "data-type": {
            "type": "string",
            "length": 50
      }
    }
  ]
}

データマスキング:

機密データを隠すためのデータマスキングを行うことができます。

指定できるルールアクションは次のとおりです。

  • data-masking-digits-mask:数字を指定した文字に置き換えます
  • data-masking-digits-randomize: 数字をランダムに置き換えます
  • data-masking-hash-mask: 64 文字の長いハッシュ値に置き換えます

参考: Using data masking to hide sensitive information

{
    "rule-type": "transformation",
    "rule-id": "2",
    "rule-name": "2",
    "rule-target": "column",
    "object-locator": {
        "schema-name": "cust_schema",
        "table-name": "customer_master",
        "column-name": "cust_passport_no"
    },
    "rule-action": "data-masking-digits-mask",
    "value": "#"
},
{
    "rule-type": "transformation",
    "rule-id": "3",
    "rule-name": "2",
    "rule-target": "column",
    "object-locator": {
        "schema-name": "cust_schema",
        "table-name": "customer_master",
        "column-name": "email"
    },
    "rule-action": "data-masking-hash-mask"
}

モニタリングとログ

DMSタスクの状態は、Amazon CloudWatchで監視できます。

主要なメトリクスは次のとおりです。

  • CDCLatencySource
    • ソースエンドポイントでの遅延時間
  • CDCLatencyTarget
    • ターゲットエンドポイントでの遅延時間
  • FullLoadThroughputRowsSource
    • フルロード時の処理行数/秒

ログの確認

CloudWatch Logsにレプリケーションタスクのログが出力されます。エラーが発生した場合は、まずここを確認します。

ベストプラクティス

DMSを効果的に使用するためのベストプラクティスをいくつか紹介します。

移行前の準備

  • ソースデータベースのバックアップを取得
  • ネットワーク帯域幅を確認
  • セキュリティグループとネットワークACLの設定を確認
  • ソースデータベースでバイナリログやアーカイブログが有効になっているか確認

パフォーマンスの最適化

  • 大きなテーブルは分割して移行
  • インデックスの作成はフルロード後に実施
  • 不要なトリガーやストアドプロシージャを一時的に無効化
  • レプリケーションインスタンスとデータベースを同じAZに配置

セキュリティ

  • VPC内にレプリケーションインスタンスを配置
  • エンドポイントの認証情報はAWS Secrets Managerで管理
  • 転送中のデータはSSL/TLSで暗号化

AWS DMS Fleet Advisor

⚠️ 2026 年 5 月 20 日 サポート終了

データベースの分析と移行プランを構築します。

dms-fleet-advisor-diagram

トラブルシューティング

よくある問題と対処方法を紹介します。

接続エラー

エンドポイントのテスト接続が失敗する場合は、以下を確認してください。

  • セキュリティグループの設定
  • ネットワークACLの設定
  • データベースのファイアウォール設定
  • 認証情報の正確性

レプリケーション遅延

CDCの遅延が大きい場合は、以下を検討してください。

  • レプリケーションインスタンスのサイズアップ
  • 並列処理数の増加
  • ターゲットデータベースのパフォーマンス向上
  • 不要なインデックスの削除

メモリ不足エラー

レプリケーションインスタンスのメモリが不足している場合は、インスタンスタイプを変更するか、LOBの処理方法を見直します。

📖 まとめ

AWS Database Migration Serviceは、データベース移行を安全かつ効率的に実行するための強力なツールです。この記事では、DMSの基本的な概念から実践的な設定方法まで解説しました。

重要なポイントをまとめます。

  • DMSは最小限のダウンタイムでデータベースを移行できる
  • 同種・異種データベース間の移行に対応
  • フルロード、CDC、またはその組み合わせで移行方式を選択
  • レプリケーションインスタンスのサイズ選択が性能に影響
  • CloudWatchでの監視とログ確認が重要

実際の移行では、必ず小規模な環境でテストを実施し、パフォーマンスやデータの整合性を確認してから本番環境に適用することをお勧めします。

GitHubで編集を提案

Discussion