Azure MigrateでLinuxをLift&Shiftしようとしてコケまくり詰んだ話

# はじめに
皆さんこんにちは。  
今回は表題の通り、Azure MigrateでLinuxをLift&Shiftしようとしてコケまくり詰みまくり、それらを解決するまでの道のりを書き残しています。  

# 何をしようとしたのか?
他所のクラウド上で稼働しているLinux(CentOS)をAzureにLift&Shiftしたい
→とりあえず手元のProxmox VEに仮想マシンを建ててマイグレーション出来るかテストしよう!と思い立ち検証を行った

# コケポイント・詰みポイントは？
## マイグレーション用Windows Serverの言語設定
Azure Migrateには`Azure Migrate:Discovery and Assessment`と`移行およびモダン化ツール`の2つのアプライアンスがあり、前述はWindows Server 2016が推奨環境で、日本語環境でもなんの問題もなく動作します。  
しかし、後者はWindows Server 2022が推奨されており、言語は*英語のみ*がサポートされています。
その英語というのは、英語版のインストールメディアのみを意味します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/10ec9386-30a7-d126-fa6b-a6f5681bef89.png)
上記のように、日本語インストールメディアからインストールしたWindows Serverに英語Language Packageを導入して入れ替えてもダメでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/52ae86e6-284d-ac9b-3ef4-2ebc1bbf3931.png)
しかも、英語版インストールメディアを使用した場合でもキーボード配列は英語しか認めてくれません。
当初はOSのインストール時に毎回日本語106キーボードに変更しており、諦めて英語キーボード設定で再度インストールを行い、作業を継続しました。
## Windows Server 2022のIISコンフィグエラー→2012R2を代わりに使う
おそらくProxmox VE上だけの問題かと思われますが、推奨環境であるWindows Server 2022でアプライアンスをセットアップ開始したところ、IISのコンフィグでコケてセットアップに失敗する症状に見舞われました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/c11077e1-8e45-b369-bffb-be037372b131.png)
不思議なことに、PowerShell-ISEがないとエラーを吐いて何も進みません。
実はWindows Server 2022ではなく2012R2を代わりに使用することも可能なのでそちらを試した所、一発でインストールに成功しました。
(2022では2番目の`Configuring Internet Infomation Services features`でエラーが発生してインストールが中断されました)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/42c168aa-21bb-ede5-13ee-ae822ae04108.png)

## Linux用のモビリティサービスエージェントが使えなくなっていた
今回の記事で一番のクソデカ爆弾がこれです。
Microsoft Learnの記事どおりにレプリケーションアプライアンスのWindows Server 2012R2からモビリティサービスエージェントをLinuxに取り込み、解凍して指定通りコマンドを実行しました。
`/usr/local/ASR/Vx/bin/UnifiedAgentConfigurator.sh -i <アプライアンスIPアドレス> -P <アプライアンスパスフレーズファイル>`

すると…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/2bc54ba7-6616-db48-d261-9c86066332a0.png)
`Provide Source Config File Path :`と要求されます。Microsoft Learnには何かを追加で指定する記述は有りません。
### なんだこいつ～！！！！
パスフレーズファイルかな?と思い適当に指定するも謎にAzureRcmCliに渡されておりエラーに…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/aae4662b-25fb-b06a-4926-63b7a23fc468.png)

ここからどうしようもなくなり、Azure Support Request(SR)に下記の質問をぶん投げました。

> 下記の公開情報に沿ってエージェントの登録を試みている。
> https://learn.microsoft.com/ja-jp/azure/migrate/tutorial-migrate-physical-virtual-machines#install-on-linux 
> しかし、Provide Source Config File Path: と表示され、何を入れればよいのかが分からない。
> 具体的にどのようなファイルを指定すれば良いか知りたい。

そこから休みを挟んで4日後…
> コマンドは間違ってないように見えるのでコマンドパスとパスフレーズファイルに間違いがないか確認してね!(要約)

と、かなり的外れな解答が返ってきました。
そのファイルは何を指定すればいいのかを教えてくれ～！と返信をぶん投げた所
> 確認したらバージョン 9.55に起因する不具合に関連してるっぽいので調査中!乞うご期待!!(要約)

とようやく調査が開始し、同時にMicrosoft側のミスであったことが判明しました。

そして最終的にサポートから提示された解決方法は
```
<エージェントをインストールするコマンド>
sudo ./install -r MS -v VmWare -q -c CSLegacy
 
<エージェントを登録するコマンド>
/usr/local/ASR/Vx/bin/UnifiedAgentConfigurator.sh -i <replication appliance IP address> -P <Passphrase File Path> -c CSLegacy
```
のように、各コマンドの最後に`-c CSLegacy`を付与することで問題を回避できるとの事でした。
実際に試した所、当初のMicrosoft Learnの記載通りの動きになり、正しくモビリティサービスエージェントがインストール・動作することを確認しました。

サポート側の解答によると、今回の不具合は
- ディザスターリカバリーのアップデートにモダンアーキテクチャとクラシックアーキテクチャによる違いが発生した
- それらの機能を使用したAzure Migrateの改修に情報共有が及ばず、古い情報がMicrosoft Learnに掲載されていた。

ことが原因であり、
- 現在Linuxの移行にはクラシックアーキテクチャを使用せざるを得ない(モダンアーキテクチャのエージェントベースの移行がサポートされていない)こと
- クラシックアーキテクチャは2026年3月30日を以てレプリケーションの構成変更が不可能になり、使用できなくなること
を確認し、それらに対応したアップデートに取り組んでいる。とのことでした。

## Azure Linux VM エージェントが動かない
AzureVMにLift&Shiftすることに成功し、VMの状態を確認しようとした所、何も表示されない現象に見舞われました。
確認した所、本来であればマイグレーション時に自動でインストールされるAzure Linux VM エージェントが正しく動作していませんでした。

実はAzure Linux VM エージェントはPython3ベースで動作するソフトウェアで、マイグレーション時に自動でインストール用のシェルが実行されるのですが、その際にPython3がシステムに存在しない場合にそのままエラーで進まなくなる事が判明しました。
(Microsoft Learnを見ればエージェントのインストールに必要な要件にPython3が書いているのでちゃんと読めばいいだけなんですが)

そのため、マイグレーション後に仮想ネットワークゲートウェイを作成し、AzureVPNで接続してSSHし、`yum install python3`を叩いて再起動することで解決しました。(エージェントがインストールされていない場合、起動毎に試行しているようです)
いちいち後からやるのはとても面倒くさいのでマイグレーション前に各マシンにインストールしておくことをおすすめします。

# 最後に
多分そんなにいないと思いますがAzureでLinuxをLift&Shiftする方は覚悟の準備をしておいてください!(ワザップジョルノ)
最後までご覧頂き有難う御座いました。