DMSを使ったデータベース移行を試してみた

2018.09.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

このたびの平成30年北海道胆振東部地震被害により被災された皆さまへ 心よりお見舞い申し上げます。

はじめに

こんにちは、吉井です。 今回は AWS Database Migration Service の導入を題材にします。

AWS Database Migration Service とは

Database Migration Service (以下 DMS) はその名の通りデータベースのデータ移行を支援するサービスです。
オンプレミス~AWS間、オンプレミス~オンプレミス間のデータ移行を支援します。
(AWS~AWS間も技術的には可能ですが、これは別サービスを選択したいところです)
クラウドシフトしたサーバーへのデータ移行、検証目的でのデータレプリケーション、遠隔地バックアップなどに活用出来ると思います。

DMSの仕組み

DMSは、
● Replication Instance (データレプリケーションを実行するインスタンス)
● Replication Task (データレプリケーションの実行単位)
● Source Endpoint (ソースデータベースへの接続定義)
● Target Endpoint (ターゲットデータベースへの接続定義)
で構成されます。
https://docs.aws.amazon.com/ja_jp/dms/latest/userguide/Welcome.html より抜粋

レプリケーション方法

3パターンのレプリケーション方法が考えられます。

方法 説明
全ロード ソースデータベースからターゲットデータベースへ指定したテーブルデータがそのまま移行されます。
全ロード + CDC ソースで変更をキャプチャしながら、全ロードが実行されます。
全ロードが完了すると、キャプチャされた変更がターゲットにレプリケーションされます。
最終的に、変更のレプリケーションは安定した状態に到達します。
CDC のみ ネイティブのエクポート/インポートツールで一括ロードした後に、DMSは差分のみをレプリケーションします。

対応製品

DMSは数多くのデータベースをエンドポイントとして利用出来ます。
自身が管理しているデータベースが対応しているか否かはユーザーガイドを確認してください。
ユーザーガイド AWS Database Migration Service のソース
ユーザーガイド AWS Database Migration Service のターゲット

環境構築

それでは環境構築をしていきます。
AWSマネジメントコンソールへログインし、DMSを開きます。

サブネットグループの作成

サブネットグループを作ります。
左側メニューから「サブネットグループ」をクリックしサブネットグループを作成します。
Replication InstanceをMulti-AZ構成にするのがベストプラクティスです。

Replication Instance の作成

Replication Instance を作成します。
左側メニューから「レプリケーションインスタンス」をクリックし Replication Instance を作成します。

設定項目を埋めていきます。

設定項目 説明
名前 管理しやすい名前を記入
説明 何のためのインスタンスなのか一見して判断出来る説明を記入
インスタンスクラス 十分な処理能力のあるインスタンスタイプを選択
選択に悩む場合はテストを繰り返して決定します
エンジンバージョン 通常は最新を選択
VPC Replication Instanceが所属するVPCを選択
マルチAZ はい がベストプラクティス
パブリックアクセス可能 ソース/ターゲットデータベースからインターネット経由でReplication Instanceへ接続する場合はチェックを入れる

アドバンスト

設定項目 説明
割り当てられたストレージ ログファイルをキャッシュされたトランザクションのために使います
ソースデータベースの特性に合わせてサイズを決定
まずはデフォルトで試行して増やしていく
レプリケーションサブネットグループ 前の手順で作成したサブネットグループを選択
アベイラビリティゾーン ソースデータベースが所属しているアベイラビリティゾーンを指定
VPCセキュリティグループ Replication Instanceに紐付けるセキュリティグループを選択
KMSマスターキー 暗号化に使用するキーを指定

メンテナンス

設定項目 説明
マイナーバージョン自動アップグレード チェックを入れると Replication Instance に対してマイナーエンジンアップグレードが適用されます
メンテナンスウィンドウ マイナーエンジンアップグレードが行われる時間帯を指定(UTC

設定項目を埋めて作成をします。
少々待つと Replication Instance のステータスが「利用可能」に変わります。

エンドポイントの作成

Replication Instance からデータベースへ接続するためのエンドポイントを作成します。
ソースデータベース、ターゲットデータベースの2つ分必要です。
左側メニューから「エンドポイント」をクリックしエンドポイントを作成します。

設定項目を埋めていきます。

設定項目 説明
エンドポイントタイプ ソース または ターゲット を選択
RDS DBインスタンスの選択 エンドポイントが RDS の場合はチェック
エンドポイント識別子 管理しやすい識別子を記入
ソースエンジン エンドポイントのデータベースタイプを選択
サーバー名 エンドポイントのIPアドレスやFQDNを記入
ポート エンドポイントデータベースのポート番号を記入
SSLモード エンドポイントとの接続を暗号化する場合はSSLモードを選択
ユーザー名 エンドポイントデータベースのユーザー名を記入
パスワード エンドポイントデータベースのパスワードを記入
データベース名 エンドポイントデータベースのデータベース名を記入

エンドポイント接続のテスト

設定項目 説明
VPC レプリケーションを実行するVPCを選択
レプリケーションインスタンス 上の手順で作成した Replication Instance を選択

テストの実行ボタンをクリックして接続テストを実行します。
失敗した場合は、上の設定項目に記入した内容、セキュリティグループ、エンドポイント側のファイアウォール設定、純粋なネットワーク疎通などを確認します。

ソース、ターゲット共にエンドポイントを作成します。

タスクの作成

レプリケーションを行うためのタスクを作成します。
左側メニューから「タスク」をクリックしてタスクを作成します。

設定項目を埋めていきます。

設定項目 説明
タスク名 管理しやすいタスク名を記入
レプリケーションインスタンス 上の手順で作成した Replication Instance を選択
ソースエンドポイント 上の手順で作成したソースエンドポイントを選択
ターゲットエンドポイント 上の手順で作成したターゲットエンドポイントを選択
移行タイプ 全ロードする場合は「既存のデータを移行する」を選択
CDCの場合は「データ変更のみをレプリケートする」を選択
作成時にタスクを開始 チェックを入れるとタスク作成後にタスクが開始される

タスク設定

設定項目 説明
ターゲットテーブル作成モード 何もしない - ターゲットにテーブルが存在することが前提です。データは Insert されます。
ターゲット上のテーブルのDROP - ターゲットのテーブルを Drop → 再作成してからデータをロードします。
TRUNCATE - ターゲットテーブルを Truncate してからデータをロードします。
レプリケーションにLOB列を含める LOB列をレプリケーション対象に含めるかどうかを選択
最大LOBサイズ 制限付きLOBモードを選択した場合のサイズ
検証の有効化 有効にするとデータが確実に移行されることを検証します
ロギングの有効 CloudWatch ログにプロセス状況を記録

テーブルマッピング
レプリケーション対象とするスキーマとテーブルを指定します。
画面例は SQL Server のマッピングです。

タスクの完了

タスク画面に戻りステータスを監視します。
「ロード完了」となれば成功です。

CloudWatch メトリックの監視

レプリケーション中に最低限監視しておく CloudWatch メトリックです。
レプリケーションが異常終了しないように監視しておく、転ばぬ先の杖ですね。

監視するメトリック 説明
CPUUtilization CPU使用率。高い場合はインスタンスタイプをスケールアップ
FreeableMemory 空きメモリ。空きが少ない場合はインスタンスタイプをスケールアップ
SwapUsage GB単位でスワップしていたらインスタンスタイプをスケールアップ
FreeStorageSpace Replication Instance のストレージを増やす、または、ソースからの読み取りを調整
NetworkTrasmitThroughput ネットワーク帯域が不足した場合はインスタンスの分割、ソースからの読み取りを調整
NetworkReceiveThroughput ネットワーク帯域が不足した場合はインスタンスの分割、ソースからの読み取りを調整

制限

全てのデータベースが無条件でレプリケーション出来るわけではありません。
ソース/ターゲットデータベースの制限事項、前提条件は予め調べておきます。
ユーザーガイド データ移行のソース

参考

Blackbelt [Amazon Database Migration Service]

ユーザーガイド