AWS MGN(application migration service)を使ってみた

MGNはオンプレからAWSへの移行時に利用できるサービスで他製品と比較して移行時のダウンタイムもすくなく、かなり便利なサービスだとおもいます。※対象OSに縛りはありますが。(サポートOS:https://docs.aws.amazon.com/mgn/latest/ug/Supported-Operating-Systems.html)

すでに色々なサイトでやり方については記載があったりしますが、AWSのUIは更新頻度も高く需要がそこそこありそうかなという思いと、そもそも忘れっぽいので記事にしたいと思います。

# 前提
移行元OS：Ubuntu 22.04.1 LTS（仮想マシン）
ESXi : 7.0 Update 2
※OSユーザは必ずSSH鍵認証を有効にしておくこと。


# 通信要件
MGNを利用するにあたり、事前に公式ページから通信要件を確認したいと思います。
以下、アーキテクチャとネットワークの概要が確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/5ccdcb53-8521-de07-800a-7a3412769a29.png)
※引用元：https://docs.aws.amazon.com/ja_jp/mgn/latest/ug/Network-Settings-Video.html

必要になる要件は、オンプレサーバからMGN宛てのHTTPS通信とステージング領域のレプリケーションサーバ宛TCP1500が必要であり且つ、レプリケーションサーバからMGN宛てのHTTPSが必要となります。

このため、ステージング用VPCと移行先VPC環境にInetrnet-GWをアタッチする構成にしたいと思います。また、以前は個別にセキュリティグループを作成する必要があったようですが、現在は自動で作成してくれるようです。

作業は以下の流れで進めていきます。

- IAMユーザ作成
- VPC関連作成
- MGNレプリケーションテンプレート設定
- オンプレAgent導入
- MGN レプリケーション確認
- MGN テストインスタンス起動
- MGN カットオーバーインスタンス起動
※VPC設定など不要なところがあれば、読み飛ばしてください。

# 1. IAMユーザ作成

それでは、レプリケーション用に使用するユーザを作成します。ユーザ名をmgn-userとして作成ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/804c7cce-badc-509e-4a66-422871fd61ef.png)

許可のオプションで「ポリシーを直接アタッチする」を選択して、「AWSApplicationMigrationAgentPlicy」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/79877e49-7903-5bfc-4473-ee1eaa9a494e.png)

「ユーザ作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/b9a0681f-02ca-f8fa-d8ee-fbabacaa67a6.png)

続いて、作成したユーザをクリックして、アクセスキーを作成しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/ae409f04-bd6e-613f-e644-2c7c8eb92cb8.png)

ユースケースは「コマンドラインインタフェース(CLI)を選択して、「アクセスキーをアクセスキーを作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/691fe920-b8ed-7e96-e8a8-30c1ecd76e48.png)

後ほどオンプレマシン側の設定で利用するので必ずcsvファイルをダウンロードしておきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/e0228bd8-05b7-bb30-a273-adc82adef8b9.png)


# 2. VPC関連の設定
レプリケーション用EC2インスタンスが生成されるステージング用VPCと本番用EC2インスタンスが生成されるデプロイ用VPCを作成します。今回はそれぞれのVPCにInetrnet-GWをアタッチしていますが、こちらは構成に合わせて変えていただければと思います。

ステージング用VPCを作成します。CIDRは10.0.0.0/16として作成ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/ea316e7d-d795-3621-9265-8d3fa49b6780.png)

続いて、デプロイ用VPCを作成します。CIDRは10.2.0.0/16として作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/e83a46dc-ec16-bf59-ab9f-8d99c4e55c03.png)


次に、それぞれのサブネットを作成します。ステージング用VPCとデプロイ用VPCでそれぞれ1つ作成しましょう。

・ステージング用
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/e1c0fe1a-24d9-e284-c668-65558a626b23.png)


・デプロイ用
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/966d8fdb-4a58-57f7-e004-5b4cad80596e.png)


Inetrnet-GWもそれぞれ１つ作成します。

・ステージング用
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/e6e16c7e-b336-91ad-4f67-c9fe4a9fb5d2.png)


・デプロイ用
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/88b9c085-410d-6925-2bc1-03fac6477a5e.png)

作成後はそれぞれのVPCにアタッチしておきます、

続いて、ルートテーブルを作成します。こちらもそれぞれ１つ作成します。

・ステージング用
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/505152d7-1aae-eab6-7095-83c91acca047.png)

テーブル作成後はサブネットの関連付けをします。「サブネットの関連付け」タブをクリックし、「サブネットの関連付けを編集」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/a36df39c-e9d6-cfe4-fd17-b3afc10ea5fb.png)

ステージング用セグメントを選択して、「関連付けを保存」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/a849117e-460c-0f80-99a4-f462a1152d52.png)

最後にルートテーブルを追加しましょう。「ルート」タブをクリックし、「ルートを編集」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/4b832ed7-c6e5-20f6-5f40-4b0778cb96b0.png)

インターネット向け(0.0.0.0/0)としてInternet-GWを選択して、「変更を保存」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/e7d13c19-5a4a-b338-7e17-323c2566240a.png)

同様の方法で、デプロイ用セグメントも変更してください。

# 3. MGN設定
それではいよいよ、Application Migration Serviceの設定に入ります。画面左メニューの「設定」から「レプリケーションテンプレート」をクリックし、編集をクリックします。（私の画面ではすでに一度設定済みの為、初回画面では表示が異なるかもしれません。。。。）


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/fde0bebb-0dd5-fe0e-e3b6-57786da3bdd7.png)

画面遷移後、ステージング領域サブネットに先ほど作成したステージング用サブネットを選択しておきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/de239924-1a52-710a-ee89-036e2ea7b277.png)

今回セキュリティグループは自動生成してもらう事にしますので、デフォルト設定のままでいきます。その他もデフォルト設定として、「テンプレートを保存」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/c1431c9b-8c31-c3a1-b496-03773a524542.png)

これで、一旦AWS側の設定は完了です。次はオンプレ側の設定入ります。


# 4. オンプレAgentインストール
レプリケーション用Agentをダウンロードしましょう。以下公式ページに案内があります。
URL:　https://docs.aws.amazon.com/ja_jp/mgn/latest/ug/linux-agent.html

リージョンを指定すればよいみたいなので、今回は東京リージョンを利用しますので以下のコマンドを一般ユーザで実行します。

```bash
$ wget -O ./aws-replication-installer-init.py https://aws-application-migration-service-ap-northeast-1.s3.amazonaws.com/latest/linux/aws-replication-installer-init.py
```

ダウンロードが完了したら、IAMユーザ作成時のcsvファイルを開き、以下コマンドの＊をご自身の内容に置き換えてから実行しましょう。
```bash
$ sudo python3 ./aws-replication-installer-init --region ap-northeast-1 --aws-access-key-id ******************** --aws-secret-access-key ****************************************
```

問題なければ以下のように表示されます。
```bash
The installation of the AWS Replication Agent has started.
Identifying volumes for replication.
Choose the disks you want to replicate. Your disks are: /dev/sda
To replicate some of the disks, type the path of the disks, separated with a comma (for example, /dev/sda,/dev/sdb). To replicate all disks, press Enter:
Identified volume for replication: /dev/sda of size 30 GiB
All volumes for replication were successfully identified.
Downloading the AWS Replication Agent onto the source server...
Finished.
Installing the AWS Replication Agent onto the source server...
Finished.
Syncing the source server with the Application Migration Service Console...
Finished.
The following is the source server ID: s-603bdeaf62f35b991.
You now have 1 active source server out of a total quota of 150.
Learn more about increasing source servers limit at https://docs.aws.amazon.com/mgn/latest/ug/MGN-service-limits.html
The AWS Replication Agent was successfully installed.
```
これでAgentの設定も完了です。AWSコンソールに戻りレプリケーション状態を確認します。


# 5. MGN レプリケーション確認
Agentから通信が発生すると、MGNのソースサーバー画面が以下のように変化します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/29b6e462-b5f2-19bc-7325-40ca31ba4f31.png)

ソースサーバー名をクリックすると、詳細を確認することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/210a35f7-8ab2-65c6-1138-d9a21166ce17.png)

画面下を見るとレプリケーション開始ステップの状況がわかります。このステップがすべて緑になり、レプリケーションの進行状況が100%で且つスナップショットが生成されると次のステップに進むことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/e95b2ac0-1cac-8ef3-513c-6dafb71e87a5.png)

この際、EC2インスタンスを確認すると、Replication Serverが起動していることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/be295f25-975d-034e-5040-1916838aac27.png)

初期レプリケーションが完了すると、テストの準備完了にフェーズが移ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/6955f650-89ce-00d2-890e-95681d294c63.png)

では、テストインスタンスをデプロイ用セグメントで起動ましょう。


# 6. MGN テストインスタンス起動
EC2の起動テンプレートが新たに作成されています。こちらのテンプレートからテストインスタンスを稼働させるセグメントを指定していきたいと思います。アクションから「テンプレートを変更」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/cdffca72-6f0d-5e63-8ef4-384576e99251.png)

ネットワーク設定まで画面をスクロールさせ、サブネットを作成したdeploy-1aを選択します。EC2インスタンスに適用するセキュリティグループは適宜用途に合わせて作成しておいたものを選択してください。「テンプレートのバージョンを作成」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/7079b086-e1a5-a15c-e145-ba73fd3f4b5f.png)

続いて、デフォルトバージョンも変更しておきましょう。アクションから「デフォルトバージョンを設定」をクリックし、最新バージョンを選択して「デフォルトバージョンとして設定」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/5595591e-e5a8-9e5e-3ee5-8e920cd2b33f.png)


これで、テストインスタンスを起動する準備が整いましたのでMGNのソースサーバの画面に遷移して「テストインスタンスを起動」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/e4059db0-3bd2-f75b-04ac-0f8809c6b2b3.png)

「起動」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/df6fd9d5-38a5-ae56-4ad2-46e183664ea3.png)

しばらくすると、Conversion Serverが起動してきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/3bfb960f-dbb4-01bc-1456-8a9e552b4fea.png)

Conversion Serverは2/2のチェックに合格し、しばらくすると終了してその後ターゲットのEC2インスタンス(オンプレから移行したサーバ)が表示されます。ステータスは停止中⇒停止済み⇒実行中と遷移します。この処理には数分かかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/759f5a85-c3a9-5d82-8597-3df169e15873.png)

実行中になったので、OSにログイン確認してみたいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/f205fc39-b691-fd9f-2607-303f2904351b.png)

無事ログインできました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/fd6c135b-45a8-3f09-8d1d-f5d34c62e8e8.png)

この後はカットオーバー処理に移行します。


# 7. MGN カットオーバーインスタンス起動
テストインスタンスに無事アクセスできたところで、MGN画面より「カットオーバーの準備完了してマーク」をクリックします。これをしないと次のフェーズに進めないため、必ず実行します。インスタンスが終了するまで待ちます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/4dc2a55d-c0d1-00ad-7dd8-3425a00ca677.png)

ではカットオーバーインスタンスを起動しましょう。「カットオーバーインスタンスを起動」をクリックします。
起動までの流れはテストインスタンスと同じになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/ec9a2322-aa05-501c-73a3-eb803cb1e110.png)

インスタンス起動が完了したら、「カットオーバー最終処理」をクリックします。これでレプリケーションが停止します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/ef8e5aa6-7747-9220-305e-a755ab9ed0f0.png)

「最終処理」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/964162dd-b8fe-20e4-48b2-237c4ba68bc9.png)

これで移行完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/eef3fb24-d0ad-e833-0e4e-9e44161df995.png)


移行元のサーバを見ると、レプリケーションサーバからリセットパケットが飛んでいるのがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/58a360ac-4547-f0f5-99a1-0f7a0f854f3b.png)


ただ、このままだとAWS Application Migration Service Replication Serverが残り続けますので、ソースサーバの一覧のアクションから「アーカイブとしてマーク」をクリックしましょう。これでAWS Application Migration Service Replication Serverは停止します。