📝

既存のリソースから Azure VM を作る

2022/05/21に公開

既存の Disk と NIC などをつかんで Azure VM を作成する

たまにあると思うんですが、Disk と NIC を残しながら Azure VM というリソースを消して、そのうえでその Disk と NIC をつくる方法を載せておきます。
Gist に置いてあったんですが、自分でもよく見に行っていて、せっかくなので一応記事に。
Disk から Azure VM を作るのは Azure Portal からも可能ですが、NIC も流用するのは PowerShell などを使わないとたぶん無理です。

PowerShell の関数としてしまっていますが、Get-AzDisk から New-AzVM の部分を抜き出しても全然大丈夫です。
New-AzVM-DisableBginfoExtension をつけないと余計な BgInfo が勝手に入ってしまうなどが注意です。
過去の経緯でそうなちゃってるんでしょうが、デフォルト値を disable にしてほしいですね、正直なところ。

あと、Set-AzVMOSDisk に -Windows という option があるので、Linux マシンであれば -Linux に変えましょ。

Function New-AzVMFromExistingResource() {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)] [string] $ResourceGroupName,
        [Parameter(Mandatory = $true)] [string] $LocationName,
        [Parameter(Mandatory = $true)] [string] $VMName,
        [Parameter(Mandatory = $true)] [string] $VMSize,
        [Parameter(Mandatory = $true)] [string] $OSDiskName,
        [Parameter(Mandatory = $true)] [string] $NICName
    )

    # 既存の OS Disk をつかむ
    $OSDisk = Get-AzDisk -DiskName $OSDiskName -ResourceGroupName $ResourceGroupName

    # 既存の NIC をつかむ
    $NIC = Get-AzNetworkInterface -Name $NICName -ResourceGroupName $ResourceGroupName

    # 既存のリソースを組み合わせて VM を作成する
    $VirtualMachine = New-AzVMConfig -VMName $VMName -VMSize $VMSize
    $VirtualMachine = Set-AzVMOSDisk -VM $VirtualMachine -ManagedDiskId $OSDisk.Id -Windows -CreateOption Attach
    $VirtualMachine = Add-AzVMNetworkInterface -VM $VirtualMachine -Id $NIC.Id
    $VirtualMachine = Set-AzVMBootDiagnostic -VM $VirtualMachine -Disable

    New-AzVM -ResourceGroupName $ResourceGroupName -Location $LocationName -VM $VirtualMachine -DisableBginfoExtension
}

もともとは Gist に書いてある内容でした。
こちらでは Availability Set を指定して作るパターンですが大して差はありません。

Microsoft (有志)

Discussion