Windows Server 2022 Preview を Azure CLI で作成する

## 背景と目的

Windows Server 2022 の Preview 版が発表され、Azure 上で触る事が出来るようなので、Azure CLI で VM を作成してみました。

[Announcing Windows Server 2022—now in preview](https://cloudblogs.microsoft.com/windowsserver/2021/03/02/announcing-windows-server-2022-now-in-preview/)

## 前提条件と実施環境

Azure Cloud Shell で Bash を使用しました。

## 実施内容

パラメータを設定します。

```bash:bash
azRG=myResourceGroup
azRegion=japaneast
azVMName=myVM
azUserName=azureuser
azPassword=$(openssl rand -base64 16)
echo $azPassword
```

リソースグループを作成します。

```bash:bash
az group create \
  --name $azRG \
  --location $azRegion
```

(省略可) シンプルに VM を作成してみますが、「 win2022datacenter 」という OS イメージは無いみたいです。

```bash:bash
az vm create \
  --resource-group $azRG \
  --name $azVMName \
  --image win2022datacenter \
  --admin-username $azUserName \
  --admin-password $azPassword

(ResourceNotFound) The Resource 'Microsoft.Compute/images/win2022datacenter' under resource group 'myResourceGroup' was not found. For more details please go to https://aka.ms/ARMResourceNotFoundFix
```

(省略可) Windows Server 2022 の OS イメージを探します。 「 --all 」オプションは、少々時間がかかります。

```bash:bash
az vm image list \
  --location $azRegion \
  --sku windows-server-2022 \
  --all

[
  {
    "offer": "microsoftserveroperatingsystems-previews",
    "publisher": "MicrosoftWindowsServer",
    "sku": "windows-server-2022",
    "urn": "MicrosoftWindowsServer:microsoftserveroperatingsystems-previews:windows-server-2022:20295.1.2102122102",
    "version": "20295.1.2102122102"
  }
]
```

OS イメージに urn を指定して VM を作成します。

ついでに、VM サイズを指定し、デフォルトで世界中に勝手にオープンしてしまうポートを作らないよう NSG を設定し、デフォルトで作成される Premium SSD の約 1/4 の価格で使える Standard HDD を指定しています。

```bash:bash
az vm create \
    --resource-group $azRG \
    --name $azVMName \
    --image MicrosoftWindowsServer:microsoftserveroperatingsystems-previews:windows-server-2022:20295.1.2102122102 \
    --admin-username $azUserName \
    --admin-password $azPassword \
    --size Standard_DS1_v2 \
    --nsg-rule NONE \
    --storage-sku Standard_LRS
```

VM が作られたら RDP 用の NSG ルール を追加します。

＜自身の IP アドレス＞は、`curl inet-ip.info` などで調べます。

```bash:bash
azNSG=$(az network nsg list \
  --resource-group $azRG \
  --query [].name \
  --out tsv)

az network nsg rule create \
    --resource-group $azRG \
    --name RDP \
    --nsg-name $azNSG \
    --priority 1000 \
    --source-address-prefixes ＜自身の IP アドレス＞/32 \
    --destination-port-ranges 3389 \
    --access Allow \
    --protocol Tcp
```

＜VM の IP アドレス＞を調べます。

```bash:bash
az vm show \
  --show-details \
  --resource-group $azRG \
  --name $azVMName \
  --query publicIps \
  --out tsv
```

## 実施結果

VM にリモートデスクトップ接続して、OS の名前やバージョンを確認します。

```shell:cmd
C:\Users\azureuser>systeminfo | findstr OS
OS Name:                   Microsoft Windows Server 2022 Datacenter
OS Version:                10.0.20295 N/A Build 20295
OS Manufacturer:           Microsoft Corporation
OS Configuration:          Standalone Server
OS Build Type:             Multiprocessor Free
BIOS Version:              American Megatrends Inc. 090008 , 12/7/2018
```

Windows Server 2022 Preview を触って満足したら、リソースグループを削除します。

```bash:bash
az group delete \
  --name $azRG
```

## 参考

[az vm create](https://docs.microsoft.com/en-us/cli/azure/vm?view=azure-cli-latest#az_vm_create)

[az vm image list](https://docs.microsoft.com/en-us/cli/azure/vm/image?view=azure-cli-latest#az_vm_image_list)

[az network nsg rule create](https://docs.microsoft.com/en-us/cli/azure/network/nsg/rule?view=azure-cli-latest)

[az vm show](https://docs.microsoft.com/en-us/cli/azure/vm?view=azure-cli-latest#az_vm_show)