AWS EC2 インスタンスを Azure に移行する

#はじめに
　アマゾン ウェブ サービス（以下 AWS）EC2 インスタンスは、他の仮想化基盤からインポートしたイメージに限ってエクスポートが可能です。AWS 上のギャラリーからデプロイした EC2 インスタンスを他の環境へエクスポートすることは出来ません。ベンダー ロックインがされています。

VM Import/Export を使用して VM としてインスタンスをエクスポート
https://docs.aws.amazon.com/ja_jp/vm-import/latest/userguide/vmexport.html

制約事項
インスタンスとボリュームのエクスポートには、次の制限事項があります。

以前に別の仮想化環境から Amazon EC2 にインポートしたインスタンスでない限り、Amazon EC2 からインスタンスをエクスポートすることはできません。

#概要
　上記の制約を受けて、本記事では下記ドキュメントの補足として AWS 基盤のエクスポート機能でなく、オンプレミスの物理マシンを仮想イメージに吸い上げる手法で EC2 インスタンスを Azure へマイグレーションする方法を解説しています。

アマゾン ウェブ サービス (AWS) VM を Azure に移行する
https://docs.microsoft.com/ja-jp/azure/site-recovery/migrate-tutorial-aws-azure

#Azure リソースの準備
　移行先の Azure リージョンに、下記３つの Azure リソースをデプロイしておきます。 ストレージアカウントに関しては現在で v1 のみサポートしています。
　![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/f4694a7d-f9d4-c9f6-a4de-976803901d6a.png)

#構成サーバーの用意
　移行元 AWS VPC 内に Recovery Services の構成サーバー (Configuration/Process Server) として EC2 インスタンスをデプロイします。

| 構成サーバー   |            推奨スペック |
|:--------------|-----------------------:|
| OS            | Windows Server 2012 R2 |
| CPU           |                 8 Core |
| RAM           |                   16 GB|
| DISK          |                   1 TB |

　以下は、移行対象の EC2 インスタンスが２台ある VPC 環境へ、構成サーバー (Configuration/Process Server) をデプロイした状態を示しています。
　![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/eb346317-0f21-fba0-df29-aa4f4fe20fbf.png)
　**※（非常に重要）** Mobility Service エージェントは、構成サーバーにより移行対象の EC2 へプッシュ インストールされます。その際 EC2 側で構成サーバーからの内部通信を FW 等で許可する必要があります。EC2 側で FW を開けるのが難しい場合には手動で Mobility Service エージェントをインストールする事も可能です。

参考資料：Azure Site Recovery (ASR) Mobility Service のインストール
https://www.cloudou.net/azure-site-recovery/asr003/

その他、レジストリ設定など前提条件もクリアしていることを確認します。
https://docs.microsoft.com/ja-jp/azure/site-recovery/migrate-tutorial-aws-azure#prerequisites

#構成サーバーの構築手順

１．AWS VPC 内にデプロイした **構成サーバー上でブラウザを起動**し、下記の Azure ポータルを開きます。非仮想化/その他を選択し [OK] を押します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/d35f0d6f-9b90-a35a-3e78-ebbdaeb774f4.png)
２．デプロイ計画は今回は省略しますので、完了か後で実施するとして次に進みます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/069d803f-66fa-405d-8ddf-73cf483fd494.png)
３．自己解凍形式のセットアップファイルと登録キーを、EC2 の構成サーバー上にダウンロードします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/dbbce6b3-cb66-4f6c-897b-11ec20a2d8ef.png)
　そのまま EC2 構成サーバー上でダウンロードした自己解凍形式のセットアップファイルを実行します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/8254b01f-c8b1-8413-beec-bda1ec26fbaa.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/66b029f1-9dfc-da51-27b5-cf47b09470e1.png)
　事前にダウンロードした登録キーを指定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/3e696857-009f-e1d8-df26-5b75942cd2b5.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/7344277b-e46a-5066-7b49-c2a255dff236.png)
　一部警告が出ていますが、今回はこのまま続行します。ディスク容量不足など内容によっては対応が必要な場合があります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/9077a044-6f4e-ed05-4f53-9f36c706d798.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/11522ea9-8b8f-2637-4b85-1fb66f7400ed.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/44b5070e-37ca-957a-efb3-adf3e9c825c9.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/b7acff2a-7a5f-c568-f08e-15f279760183.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/a0b1403b-a5c9-2437-ba7a-674169f92e1b.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/38708e77-9e55-f765-8e1e-04df8bfbfcf9.png)
　インストールが成功すると下記のようになります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/b5a346d5-eb54-d35f-2c94-151a79bda9d7.png)
　[Finish] 後に、移行元 EC2 インスタンスにインストールする Mobility Service エージェントの為のパスフレーズをクリップボードへコピーするか確認されるので、必要に応じてコピーして保存しておきます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/6cc87125-8cc0-e9db-a207-68e285c9e6cb.png)
　その後、設定画面が表示されるので  Mobility Service エージェントのインストールに利用する管理者アカウントを登録します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/ff7ce2e0-add9-ab13-81b9-d930e17d2611.png)
- Linux VM の場合、アカウントは、ソース Linux サーバーの root である必要があります。
- Windows VM の場合、**ドメイン アカウントを使用していなければ、移行元 EC2 インスタンスでリモート ユーザー アクセス制御をレジストリで無効にします。**

　レジストリで、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System の下に DWORD のエントリ LocalAccountTokenFilterPolicy を追加し、値を 1 に設定します。

　その他の設定は不要のためアカウント登録後に上記設定画面をクローズします。

　構成サーバーの設定が完了したら、再度 Azure ポータルに戻り、作成したサーバーを [構成サーバー] として選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/24e7f048-fae1-25b7-7648-3f73a1f3e7e4.png)
４．移行先ターゲットに、手順１で作成した Azure リソース（ストレージアカウント、仮想ネットワーク）の設定を行います。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/cb50dc83-7402-0d77-8727-5c02d2152a74.png)
５．レプリケーションポリシーを既定値で作成して、構成サーバーに関連付けします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/c4a93b39-0550-acbe-c4cb-c9740ec48eea.png)
　すべての設定が完了したら最後にOKを押して終了します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/3d024876-d247-52f5-4250-4f4139fb3196.png)

#レプリケーションを有効にする
　次にレプリケーションを有効にし、下記図のように AWS 側から Azure 側へ仮想マシンイメージの同期を開始します。初期同期には数時間を要しますが、その後は差分のみを短時間で同期し、常に最新の同期状態が継続的に保持されていきます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/53f66196-813a-d4b3-3794-22d72378ee77.png)

**作業手順**
１．AWS からの移行では、ソースを [オンプレミス] 、マシンの種類を [物理マシン] として選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/729505cc-ae4a-e7e7-6638-1ce6256d72ce.png)
２．移行先 Azure リソース（ストレージアカウント、仮想ネットワーク、etc）を設定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/79c27099-475b-47e1-de0b-e38bc04a1da2.png)
３．この段階で初めて移行元である EC2 インスタンスを設定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/a222522a-0156-2d9a-cb8a-c9cd984100b2.png)
　正常に検出されると以下のように表示されてきます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/d8e71e89-26d3-2045-ddc4-f26140a3fb9f.png)
４．Mobility Service エージェントのインストールアカウントやレプリケーションするディスクなどの設定をします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/a1cc86eb-d855-9dc4-9106-c68fabbf7276.png)
５．最終確認で問題なければOKとします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/5ecc375b-562e-f34d-0d01-58ca7b5af42f.png)
　最後にレプリケーションを有効にするとレプリケーションが開始されます。初期レプリケーションの完了まで数時間程度は要します。実際には複製する EC2 のディスクサイズに依存します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/b90d2838-c4f7-16dd-ea39-eb8d346858ac.png)

#Azure への移行
　初期レプリケーションが完了したら、最後のステップとして Azure ストレージの保護済みデータより仮想マシンをデプロイします。この処理は Recovery Services ではフェールオーバーと呼ばれています。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/08cf1901-3b0e-0e09-24db-27ef8866fee7.png)
**作業手順**
　初期レプリケーションが完了すると [レプリケートされたアイテム] で、該当サーバーが [保護済み] の状態となります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/731f5640-84ee-6b2c-a6ac-3ccebba2b600.png)

　下記のように [保護済み] の状態になると [...] をクリックして表示されるポップアップメニューで、[フェールオーバー] や [テスト フェールオーバー] が選択できるようになります。ここから対象サーバーを Azure へ移行（フェールオーバー）します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/919b4ee6-a442-a20b-dfba-fd9570c0ae2d.png)

　最初にテスト フェールオーバーを実施し成功したら、実際の移行（フェールオーバー）を実施します。具体的な操作手順は、下記の公式ドキュメントをご参照ください。

**１．テスト フェールオーバーの実行**
https://docs.microsoft.com/ja-jp/azure/site-recovery/migrate-tutorial-aws-azure#run-a-test-failover

**２．フェールオーバーの実行**
https://docs.microsoft.com/ja-jp/azure/site-recovery/migrate-tutorial-aws-azure#migrate-to-azure

　※ フェールオーバー実施の際に、移行元サーバーをシャットダウンする必要はありません。[フェールオーバー] という操作名になっていますが、実際には移行元サーバーに依存することなく、Azure ストレージに同期済みの復旧ポイントから Azure VM のイメージ（管理ディスク）が作成されます。

#移行の完了
　移行が完了すると、最初に用意した ３つの Azure リソース以外に、仮想マシンおよび仮想マシンにアタッチされているディスク、NIC といったリソースが生成されているのが分かります。
　![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/cf228bd0-d3f0-ebd4-89b5-02ca374d4bc2.png)
　この後、リモートデスクトップや SSH で仮想マシンにアクセスする場合は、Public IP アドレスをデプロイし仮想マシンにアタッチする等のカスタム作業が必要となります。Recovery Services のマイグレーション操作で自動生成されるのは、仮想マシン、ディスク、NIC の３種類のみとなります。

#後始末
　移行が正常に完了した後、移行に際し変更・追加した箇所を元に戻します。

1. 移行元 EC2 にプッシュインストールされた Mobility サービスエージェントを削除します。レジストリ、FW 設定を変更した場合には、それらも元に戻します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/166732/5f50bb97-6838-6cf7-a1f9-f0d0426f93a5.png)
2. 構成サーバーの EC2 インスタンスを削除します。
3. Azure 側では不要となった Recovery Services とストレージ アカウントを削除します。