AWS DMS サーバレスレプリケーション

# サーバレスレプリケーション
DMSによるデータベースの移行は、基本的にはレプリケーションインスタンス(DMSが使えるようにした特別なEC2インスタンス)を用いる。(設定については、[AWS Database Migration ServiceのDB移行の設定](https://qiita.com/AkioMotoki/items/ac4f6dc9456c5d90c70e)参照)
この構成とは別に、サーバレス環境が利用でき、従量課金タイプを選択できる。

# サーバレスレプリケーション#1 フルロード+CDC
当記事では、サーバレスの構成方法について、差分移行も含めたデータ移行について説明する。サーバレスレプリケーションの設定では、「移行前検証」がないため、前提条件は、レプリケーションインスタンスの移行前検証等で確認の上、設定されていること想定で、差分のみを記載する。CDCの移行前検証については、[AWS DMS CDC(差分反映構成)](https://qiita.com/AkioMotoki/items/e496f1cf602fe8244587)を参照いただきたい。
## 移行設定の作成
DMSの設定にある、サーバーレスレプリケーションから、「レプリケーションの作成」を選択し、設定を開始する。
設定項目は、レプリケーションインスタンスの移行タスクと同様。ソースDB,ターゲットDB, フルロードと変更データキャプチャ(CDC)を選択。エラー出力のために、CloudWatchログの有効化は、必ず設定する。
テーブルマッピング、変換ルールは、同様に設定する。レプリケーションインスタンスの作成時と同様、サービスの環境設定のためにVPC、サブネットグループ、セキュリティグループの設定を実施する。
可用性の設定(アベイラビリティ)、キャパシティの設定は、課金に関係するので、必要に応じて設定する。テスト時には、最低限でも良いが、キャパシティについては、最低値(1 DCU)では小さすぎて実行できなかった。
「レプリケーションの作成」で作成する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/daf01154-9ee8-4d79-3d82-8a57744e01c1.png)

## 移行の実施
実行するサーバレスレプリケーションを選択し、アクション>開始する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/ab650d5e-fda2-8bab-e6cd-3d8f2b1f58f5.png)
停止モードを選択する。
継続的に差分反映する場合は、停止しない指定をする。
停止しない場合は、期間対象となる(移行する差分がない場合も)ため、気をつけたい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/7521e7a2-fcc4-a670-624d-6f73ac770885.png)

実行後、稼働するまでの間、サーバレス環境のロードに、しばらく待機がかかる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/e78c7ef9-1f28-8401-7b6f-44bae9e24aad.png)
DBの移行にかかる時間は、移行するデータ量の影響が大きい。
移行する環境やデータによっては、キャパシティ(DCU数は実行するメモリー量)も影響すると思われる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/5e3d3875-c5fa-98c8-8ad5-c79b299d1463.png)

## 結果の確認
ステータスのメッセージや「フルロードの運行状況」で、完了したことが確認される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/989ecb00-cac3-2dcd-5aff-7677eaa50a33.png)
また、「CloudWatchログ」の「サーバレスログを表示する」で、実行状況や失敗した際の詳細を確認する。

正常に終了した場合は、テーブル統計で、レプリケートされたレコード数等を確認できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/c4f7d1ef-667e-f3ff-c5d0-274f63fa2136.png)
できれば、ターゲットDBに直接接続してデータが反映されている確認も実施する。

## CDCの停止
差分が必要なくなった場合、該当のサーバレスレプリケーションの表示から停止する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/42a0a1d6-b6c9-b098-078e-9462986e3360.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/83b52215-cf34-f7f4-efaa-38b00aa4b918.png)





# サーバレスレプリケーション#2 フルロード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/8a82e9c4-9bbd-451d-45ea-7c4e8b365369.png)
設定画面。レプリケーションタイプ「フルロード」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/ae59f6ec-4bb4-e64d-0936-6adfb40174d0.png)
### レプリケーション開始
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/38b32749-8f25-3cb9-2c0f-73030de7c99c.png)

しばらく待機
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/9d72028e-ab8b-bf31-8fac-5e1156cbd3ce.png)
ロード終了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/e3cf0088-58cd-c882-7c53-79017b6b54c4.png)
### フルロード終了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/b861d44a-8c80-4019-62d6-d09b336fe00c.png)
テーブル統計に結果の出力がないためわかりにくい
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/e7dc603a-fcc7-16a0-2e1c-c0ac58fbf1da.png)

## データの確認
実際のターゲットに接続して、データの反映を確認したところ、反映されてることを確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3802444/040083d4-45ac-9b2d-a681-6289a8e03207.png)

# DMSの課金に関する注意点
レプリケーションインスタンスは、インスタンスが存在していると、インスタンスの性能分の課金がある。
用が終わったら環境を縮小するか、削除することで経費削減ができる。
サーバレスの課金は利用分だけの課金であるが、CDCは停止しなければ、データの反映の有無に依らずに課金対象となる。キャパシティやアベイラビリティは本番に対して必要な性能を確保するよう、事前検証することをお勧めする。