【禁忌】Azure仮想マシン上にWindowsServer 2003を展開しようと思った話

# どうして･･･
古いサーバーがぶっ壊れましてOSがWindowsServer2003だったんですよね
<font color="Red">**↑ この一文だけでヤバさが滲み出ている**</font>

まぁ幸い待機系サーバーだったので業務影響はなかったんですが、、

当然 
**「流石に新しいOSに載せ替えましょうぜ！」** 
って言ったんですけど、
**「んー？Azure上にWindowsServer 2003って作れないの？(ﾊﾅﾎｼﾞ」**
って言われたので、とりあえずできるかどうかだけ確認してみた

いやまぁ、結果的にはできたんでとりあえず備忘録としますが･･･

:::note alert
当然のことながらWindowsServer2003をこの令和の時代に使い続ける暴挙はしないほうがいいです。
とんでもなく脆弱なサーバーを作成していることを自覚して作業が必要です。もし参考にする人が居たとしても色々と自己責任でお願いしますね。
:::

<font color="Red">記事としては「できる」という内容になってますが、「できる = 案として採用してOK」ではないですので･･･</font>

<font color="LightGray">じゃあ記事書くなよって？記事にするのが一番自分の理解深まるんよねぇ</font>

# 前提として必要なもの
- Windows10 + Hyper-Vの環境
- Windows Server 2003のインストールDisk
- Windows Server 2008のインストールDisk（Hyper-V統合サービス導入用iso入手のため）
- それぞれのWindowsライセンス

確認したら、WindowsServer2003を導入した当初のインストールメディアや
未使用のライセンスキーが残っていたので使うことにする。
これらがなかったらその時点で詰み。

# 流れ
やることは一般的な流れだが･･･
- ローカルのWindows10上のHyper-VにWindowsServer2003をセットアップ
↓
- Hyper-V仮想マシンのvhdをAzure上にアップロード
↓
- アップロードしたVHDから仮想マシンを作成

## Hyper-V上にWindowsServer 2003の仮想マシンを導入
isoイメージからWindowsServer 2003を導入。手順は割愛。
世代的にServer2003を導入するのが初めてだったので、色々古臭くてびっくり。。

## WindowsServer2003にHyper-V統合サービスを導入
そのままだとマウスが使えなかったりしだので、Hyper-V統合サービスなるものを導入する。
調べたところWindows10のHyper-Vには付属していないようで、
WindowsServer2008でHyper-Vを有効にすることで、
統合サービスをインストールするためのisoイメージを取得可能な模様

ということで、
手元のWindows10端末にHyper-Vを導入し、
Hyper-V上にWindowsServer2008をインストールする

### WindowsServer2008にHyper-Vを導入
Hyper-V上の仮想マシンでHyper-Vを導入することは、通常はできないらしい（初めて知った）
単純にWindowsServer2008をセットアップしてHyper-Vを導入しようとしたところエラーになった。
やる場合は、Hyper-V仮想マシンに入れ子の仮想化を可能にするように設定が必要らしい。

WindowsServer2008のホストとなっているWindows10端末で、
管理者権限でPowerShellを実行し、下記コマンドを流す
```
Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true
```
https://learn.microsoft.com/ja-jp/virtualization/hyper-v-on-windows/user-guide/nested-virtualization

これでWindowsServer2008でHyper-Vを導入できる。

### Hyper-V統合サービスセットアップ用ISO（vmguest.iso）の入手
WindowsServer2003にHyper-V統合サービスを導入するためのISOイメージを取得する。
Hyper-Vを導入したWindowsServer2008の下記フォルダにisoがあるので取得
```
C:\Windows\System32\vmguest.iso
```
### WindowsServer2003にServicePack2を反映する
いざHyper-V統合サービスを導入しようと思ったら今度はバージョンが古いとかで怒られた。
調べた感じ、ServicePack2が必要みたい。

https://www.tomsword.com/weblog/mouse-not-captured-in-remote-desktop-sesion-in-hyper-v

参考にしてServicePack2を導入する。
というか、この頃のWindowsUpdateってブラウザに説明が出るのね･･･

### WindowsServer2003にHyper-V統合サービスの導入
WindowsServer2003でvmguest.isoをマウントして、
Hyper-V統合サービスをインストールする。
これでマウス等が使えるようになる。

## WindosServer2003をAzureにアップロードする前の設定
とりあえず最低限下記は設定

- リモートデスクトップを有効にしておく
- WindowsUpdateの実施（できるとこまで）
- WindowsFirewallの設定（無効にするのか、必要なポートは開ける）

これで大体の準備は完了

## AzureにVHDをアップロードする
### VHDX→VHDへの変換
Hyper-Vの「ディスクの編集」から、
アップロードする仮想マシンのディスクをVHDX→VHDに変換をかける。

### VHDのアップロード
Az-AddVHDを使う。AzurePowerShellは便利だからAzureユーザーはみんな使おうね。

https://learn.microsoft.com/ja-jp/azure/virtual-machines/windows/disks-upload-vhd-to-managed-disk-powershell

```shell
$path = "[VHDファイルのパス]"
$resourceGroup = "[アップロード先のリソースグループ]"
$location = "[リージョンを任意に]"
$name = "[アップロードしたディスクの名称を任意に]"

Add-AzVhd -LocalFilePath $path -ResourceGroupName $resourceGroup -Location $location -DiskName $name
```
::: note warn
環境によっては多少の時間と負荷はかかるので、諸々の影響がないか気をつけてやる。
:::
アップロード完了したらいよいよ･･･

## Azure上にWindowsServer2003の仮想マシンを作成する
アップロードしたディスクを選択し、そこからVMを作成する。

:::note alert
パブリックIPアドレスの付与はしない
:::
::: note alert
NSGはちゃんと設定する
:::

作成できたらブート診断でWindowsServer2003の画面が表示されるかをワクワクしながら待つ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2420694/1f1f1e05-6591-db55-e50e-a02258f65a9f.png)

表示されたらリモートデスクトップで接続できるか確認する。

･･･うおお！（謎の感動）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2420694/625c68f7-6150-3977-94da-c920296405de.png)


これで禁断のWindowsServer2003(Azure仮想マシン)が完成･･･

# おわり
いやできないやろ～ってたかを括ってたらまさかできてしまうとは･･･
結果的にできてしまいましたが、**「できる = 案として採用」ではありません**

インフラエンジニアのお仕事は、
問題に対してどのような選択肢があって、それが実現できるかどうか、
そしてそれぞれのリスクや問題を加味した上で、適切な選択を会社に提案することですので。

今回の諸々は脆弱で危ないことをやってるわけですが、
やってみる経験自体はとても貴重なことなので、大いに意味があったかなぁ、と思いました。

というか、AzureへのVHDアップロード自体は非常に有用なので、
それ単体でまた記事はまとめましょうかね。