Azure上のWindowsサーバをインプレースアップグレードする

# はじめに
Azure VMのWindowsサーバが簡単にインプレースアップグレード出来るようになっていましたので試してみます。
OSのバージョンによっては最新（2022）にするまでに2回実施する必要があるようです。

https://learn.microsoft.com/ja-jp/azure/virtual-machines/windows-in-place-upgrade

# アップグレード用ディスクの作成
今回はWIndows Server 2016からWindows Server 2022にアップグレードします。

Azure Powershellでアップグレード用のディスクを作成します。
この段階ではまだOSにログインする必要はありません。
Microsoftのドキュメントで提供されているコードのパラメータを変更します。

```powershell
#
# Customer specific parameters 

# Resource group of the source VM
$resourceGroup = "tamura-rg"

# Location of the source VM
$location = "Japaneast"

# Zone of the source VM, if any
$zone = "" 

# Disk name for the that will be created
$diskName = "WindowsServer2022UpgradeDisk"

# Target version for the upgrade - must be either server2022Upgrade or server2019Upgrade
$sku = "server2022Upgrade"


# Common parameters

$publisher = "MicrosoftWindowsServer"
$offer = "WindowsServerUpgrade"
$managedDiskSKU = "Standard_LRS"

#
# Get the latest version of the special (hidden) VM Image from the Azure Marketplace

$versions = Get-AzVMImage -PublisherName $publisher -Location $location -Offer $offer -Skus $sku | sort-object -Descending { [version] $_.Version	}
$latestString = $versions[0].Version


# Get the special (hidden) VM Image from the Azure Marketplace by version - the image is used to create a disk to upgrade to the new version


$image = Get-AzVMImage -Location $location `
    -PublisherName $publisher `
    -Offer $offer `
    -Skus $sku `
    -Version $latestString

#
# Create Resource Group if it doesn't exist
#

if (-not (Get-AzResourceGroup -Name $resourceGroup -ErrorAction SilentlyContinue)) {
    New-AzResourceGroup -Name $resourceGroup -Location $location    
}

#
# Create Managed Disk from LUN 0
#

if ($zone) {
    $diskConfig = New-AzDiskConfig -SkuName $managedDiskSKU `
        -CreateOption FromImage `
        -Zone $zone `
        -Location $location
}
else {
    $diskConfig = New-AzDiskConfig -SkuName $managedDiskSKU `
        -CreateOption FromImage `
        -Location $location
} 

Set-AzDiskImageReference -Disk $diskConfig -Id $image.Id -Lun 0

New-AzDisk -ResourceGroupName $resourceGroup `
    -DiskName $diskName `
    -Disk $diskConfig

```

ディスクが作成されました。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/253852ed-79b0-7aff-e10a-5d72eb70bddc.png)

# アップグレード前確認
前提条件としてKMSサーバと通信出来る必要があります。
VMはAzureマーケットプレイスのOSイメージから作成しているので通信出来るようになっていますが、
念のため確認します。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/d026ea31-5b49-2c39-bf6d-1d9da1d040d6.png)

アップグレード前のOS。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/23b1549c-aafb-fbd6-70a7-f6d3ae15bbe0.png)

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/d117d434-dfe7-9c0a-615c-26ee12ecc32c.png)

# アップグレード実行
アップグレード用のディスクをVMにアタッチします。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/3ef212d4-d954-32d5-2c66-ace8a6d3108b.png)


OSにRDPでログインし、Powershellでアップグレードのsetupを実行します。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/5fac37c7-981a-b418-99dd-b9b68805c573.png)

セットアップ画面が起動しますのでアップグレード先を選択します。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/a475f396-9177-b776-2fb6-ab3358c31c37.png)

アップグレードが始まりました。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/49bc84f8-5d65-15bc-f097-b5ff8de889af.png)

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/6b1d7772-d476-0805-4f87-b270d8dc3a34.png)

RDPのセッションが切断されたらAzure Portalのブート診断から進捗を確認できます。
ブート診断を設定していない場合は設定変更してください。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/d967941f-baf2-708b-a06f-7ddfc6373949.png)

アップグレードが完了したようで起動しました。
25分くらい掛かったでしょうか。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/8ba21172-4759-0bc6-daf5-230314e78097.png)

# アップグレード確認
Azure Portal上でWindows Server 2022に変わっていました。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/01c84d42-82d0-374f-30ba-a506519aa5f8.png)

OS上でもアップグレードが確認出来ました。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/f77c0c5d-1f8e-7df7-ede6-6c54f000d3fe.png)

# 終わりに
とても簡単にアップグレード出来ました。
EOL対応等に良いですね。