本ページは、AWSに関する個人の勉強および勉強会で使用することを目的に、AWSドキュメントなどを参照し作成しておりますが、記載の誤り等が含まれる場合がございます。
最新の情報については、AWS公式ドキュメントをご参照ください。
AWS Database Migration Service (DMS) は、データベースをAWSに安全かつ簡単に移行するためのフルマネージドサービスです。オンプレミスのデータベースからAWSへの移行、AWSクラウド内でのデータベース間の移行、さらには異なるデータベースエンジン間の移行も可能です。
移行中もソースデータベースは稼働し続けるため、ダウンタイムを最小限に抑えることができます。
【AWS Black Belt Online Seminar】AWS Database Migration Service 概要(YouTube)(37:19)

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

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

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

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

AWSブログ>はじめてAWS DMSを検討する際に読んでいただきたいこと
AWS Database Migration Service サービス概要
AWS Database Migration Service ドキュメント

DMSには次のような特徴があります。
DMSを使用する際には、以下の4つの主要コンポーネントを理解する必要があります。
dms-vpc-role と dms-cloudwatch-logs-role という固定名称のロールが必要です。dms-access-for-endpoint というロールも必要になります。Stopped)でもDeprovisionedになるまでの48時間は課金が継続しているようです。DMSがサポートする主なデータベースエンジンは以下のとおりです。
詳細なサポート状況については、Sources for data migration / Targets for data migrationとDMS 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つの移行タイプを選択できます。
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には以下のような制限があります。
項目 | デフォルト制限 | 引き上げ可能 |
レプリケーションインスタンス数 | 60/アカウント | はい |
レプリケーションタスク数 | 600/アカウント | はい |
レプリケーションタスク数 | 200/レプリケーションインスタンス | はい |
エンドポイント数 | 1,000/アカウント | はい |
エンドポイント数 | 100/レプリケーションインスタンス | はい |
サブネットグループ数 | 60/アカウント | はい |
レプリケーション インスタンスの合計ストレージ容量 | 30 TB | はい |
その他の制限については、AWSドキュメントを参照してください。
レプリケーションインスタンスの選択は、移行のパフォーマンスに大きく影響します。
インスタンスサイズの決定要因:
インスタンスサイズの選択例:
実際の移行では、最初に小さいインスタンスで試験移行を実施し、パフォーマンスを確認してから本番移行用のインスタンスサイズを決定することを推奨します。
レプリケーションタスクには、以下のような重要な設定があります。
移行対象のテーブルを指定します。特定のテーブルのみ、または特定のスキーマ全体を対象にすることができます。 ルールタイプ(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"
}
]
}
ルールタイプには以下のものがあります。
タスクの動作を細かく制御できます。
{
"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
}
}
主な設定項目は以下のとおりです。
DMSでは、移行時にテーブル名やカラム名を変換することができます。
テーブル名の変換:
ルールアクション(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-columnやremove-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
}
}
]
}
データマスキング:
機密データを隠すためのデータマスキングを行うことができます。
指定できるルールアクションは次のとおりです。
参考: 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で監視できます。
主要なメトリクスは次のとおりです。
ログの確認
CloudWatch Logsにレプリケーションタスクのログが出力されます。エラーが発生した場合は、まずここを確認します。
DMSを効果的に使用するためのベストプラクティスをいくつか紹介します。
データベースと分析の移行プランを構築します。

よくある問題と対処方法を紹介します。
エンドポイントのテスト接続が失敗する場合は、以下を確認してください。
CDCの遅延が大きい場合は、以下を検討してください。
レプリケーションインスタンスのメモリが不足している場合は、インスタンスタイプを変更するか、LOBの処理方法を見直します。
AWS Database Migration Serviceは、データベース移行を安全かつ効率的に実行するための強力なツールです。この記事では、DMSの基本的な概念から実践的な設定方法まで解説しました。
重要なポイントをまとめます。
実際の移行では、必ず小規模な環境でテストを実施し、パフォーマンスやデータの整合性を確認してから本番環境に適用することをお勧めします。