AWS DMS で VMware Cloud on AWS 上の MySQL を Amazon Aurora に移行してみた

# 1. はじめに

AWSへのデータベース移行といえば [AWS Database Migration Service (DMS)](https://aws.amazon.com/jp/dms/)、と多くの方が思い浮かべるのではないでしょうか。

オンプレミス環境、あるいはクラウド環境上のデータベースおよび分析ワークロードを安全かつお手軽に移行できるサービスとして非常に使いやすい移行ツールかと思います。

AWS 公式サイト曰く、100万以上のデータベースシステムが AWS DMS で移行されているとのこと。

AWS DMS の数あるユースケースのひとつとして、[VMware Cloud on AWS](https://aws.amazon.com/jp/vmware/) 上で稼働する MySQL データベースから Amazon Aurora (MySQL互換)への移行を試してみたので備忘録としてまとめてみます。

> 同種データベース間の移行なので実際のMySQL to Amazon Aurora移行では別方式が採用される場合もあると思いますが、今回は基礎編ということでご参考いただければ幸いです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/e56b062f-8be0-6355-d420-bd5e3c62e355.png)

より応用的なユースケースについては次のAWS公式ブログもご参考ください。
AWS DMSを活用してVMware Cloud on AWS上で稼働するPostgreSQLのデータを [Amazon Redshift](https://aws.amazon.com/jp/redshift/) に移行し、[Amazon QuickSight](https://aws.amazon.com/jp/quicksight/) でデータ分析するというユースケースが紹介されています。

https://aws.amazon.com/jp/blogs/news/data-warehousing-and-business-intelligence-for-vmware-cloud-on-aws/

# 2. 今回の構成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/e8fddf16-cd71-0cd2-0ca1-7c836a72c8f7.png)

VMware Cloud on AWS 上で稼働させている MySQL(DB VM)を、AWS DMSでAmazon Aurora (MySQL互換)に移行します。データ移行の成否はWordPress (App VM)で確認します。

:::note
VMware Cloud on AWSとConnected VPC間の通信はすべてElastic Network Interface (ENI)経由で内部接続させているため、プライベートアクセスとなっています。
:::

ざっくりとしたイメージとしては、VMware Cloud on AWSを「オンプレミスVMware仮想環境」のように扱って、Amazon EC2に移行していると想像いただければと思います。

# 3. やってみた

ポイントとなるステップに絞って手順をご紹介します。
今回はSchema Conversion Tool (SCT)を利用しないので、AWS DMS の Replication Instance、Source/Target Endpointの作成さえすれば完了となり、手順自体は非常にシンプルです。

適宜AWS 公式ガイドおよびハンズオンガイドもご参照ください。

https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html

https://catalog.us-east-1.prod.workshops.aws/workshops/77bdff4f-2d9e-4d68-99ba-248ea95b3aca/en-US

## 前提条件

- VMware Cloud on AWS 上で WordPress と MySQL がそれぞれ App VM、DB VM として稼働している
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/1d258427-3490-c8e4-b222-68d25249eb3c.png)

- WordPress の データベースとして、MySQL がすでにセットアップされている

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/f3c205e0-2cc6-fa0c-0a57-cf9495030dbe.png)

- Connected VPC 内に Amazon Aurora (MySQL)互換が稼働している

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/be47f4ae-ab65-01c0-1f9a-34fb281ce189.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/c26eca27-d70d-e4f7-866d-fdc67997f696.png)


- VMware Cloud on AWS　と Connected VPC 間で必要な通信はすべてアクセス許可されている 
> 私の環境では両方向の通信はすべて許可するよう、VMware Cloud on AWSのFirewall Rule、Connected VPCのSecurity Groupを設定しています。
またシンプル化のため Security Groupはデフォルトの１つだけを利用しています。

- MySQLバージョンおよびAmazon Auroraバージョンはそれぞれ互換性のあるバージョンであり、またAWS DMSのサポート対象バージョンである
> 私の環境ではMySQLバージョン8.0.32を利用していたため、最新Amazon Aurora MySQLバージョンでも検証時点では未だ正式に互換性対応がされていなかったのですが、今回は検証なのでOKということにします。動作確認はできました。

https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Sources.html

https://docs.aws.amazon.com/AmazonRDS/latest/AuroraMySQLReleaseNotes/AuroraMySQL.Updates.30Updates.html


## セットアップ手順

### Replication Instance の作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/4b32d91f-5de6-1fd8-9182-883c5a357e6c.png)

Connected VPC 内に Replicaiton Instance を作成します。検証なので Single-AZ としています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/3eda777d-df39-f3d3-8980-4b9ad469ca81.png)

### Endpoint の作成

Source (MySQL側) と Target (Amazon Aurora側) の両方にEndpointを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/06dd0f1f-6dfd-b049-326a-47175cfe1a8b.png)

#### Source Endpoint の作成

まずSource Endpointを作成します。 DB VM (MySQL)へのアクセス情報を登録します。
Replication Instanceは先ほどConnected VPC内に作成したものを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/54ecaf56-525f-617f-1166-ad2eb19c3052.png)

Connections が "successful" となっていれば作成成功です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/3b1c6207-0608-96ef-980f-34a208c0ed29.png)

#### Target Endpoint の作成

続いてTarget EndPointを作成します。 Amazon Aurora へのアクセス情報を登録します。
同じくReplication Instanceは先ほどConnected VPC内に作成したものを選択します。

今回はEndpoint作成時にConnectionの確認(右下"successful")を確認しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/79947b12-3f70-2be2-5b6e-639812924ce7.png)

これにてAWS DMSでの移行前セットアップは完了です。

### Database migration task の作成、実行

次のようにDatabase migration taskを作成しました。
MySQL側のスキーマ"wordpress"を移行するよう設定しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/926709a5-78f6-0e2c-2881-e86ab0936d17.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/fba6b29f-3de4-9343-e9f6-a24f61557f43.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/49a72e90-4f66-1087-9612-cba98bce2d50.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/72f16151-f950-f18d-290e-0332f0dfa32d.png)

実行状況は"Status"で確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/3e27908f-99a2-647f-ea22-2aa5c0b02ec3.png)

これにてMySQLのデータはAmazon Auroraに移行できました。次はWordPressからデータの移行を確認します。

### WordPress (App VM) のDBアクセスの切り替え

WordPress (App VM)がAmazon Auroraにアクセスするように"wp-config.php"の設定ファイルを更新します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/95f66cc0-e0b2-dfaf-17d8-d99da2d9219f.png)

WordPressで事前に作成していた記事がすべて移行できました。(成功！)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/122eb71b-3efc-c99e-8dc4-048cb6191a79.png)

# 4. さいごに

いかがでしたでしょうか。データベース移行はちょっとハードルが高いと思われがちなのですが、AWS DMSはそのプロセスのハードルを大きく下げることができます。二の足を踏みがちなデータベース移行ですが、やればできるかも・・！と少しでも勇気を持っていただければ幸いです。

AWS DMSには参考資料が非常に多くありましたので、以下にまとめておきます。ぜひあわせてご参考ください。

# 5. 参考資料

https://aws.amazon.com/jp/blogs/news/migrate-from-mysql-running-on-vmware-cloud-on-aws-to-amazon-aurora-using-aws-database-migration-service-dms/

https://aws.amazon.com/jp/blogs/news/data-warehousing-and-business-intelligence-for-vmware-cloud-on-aws/

https://aws.amazon.com/jp/blogs/news/migrating-from-mysql-to-amazon-aurora-using-aws-sct-and-aws-dms/

https://aws.amazon.com/jp/blogs/news/category/database/aws-database-migration-service/

https://dev.classmethod.jp/articles/try-database-migration-service/

https://catalog.us-east-1.prod.workshops.aws/workshops/77bdff4f-2d9e-4d68-99ba-248ea95b3aca/en-US

https://catalog.workshops.aws/migrationimmersionday/ja-JP/rehost/dms

https://d1.awsstatic.com/webinars/jp/pdf/services/20210216_Blackbelt_DatabaseMigrationService.pdf

# 6. 関連記事

https://qiita.com/sanjushi003/items/2587e13bc0088b26c11d