Azure Virtual Machineを別テナントに移してみた

 

Azureのテナント間での仮想マシンを移行を試してみました。

仮想マシンのManaged DisksをいったんBLOBストレージにVHDファイルとして保管する必要があるようでした。VHDファイルをManaged Disksに戻し仮想マシンを作成することで実現出来ました。

Power Shellを利用して仮想マシンのテナント間の移行を実施してみました。

主な実施手順は以下の通りになります。

    • Managed Disksを別テナントのBlobストレージにコピーする
    • コピーしたファイルをManaged Disksに戻す
    • Managed DisksからVMを作成する(今回は割愛しています。)

※なお、同じテナントの別サブスクリプションへは、Managed Disksのまま移行が可能です。

1 .Managed Disksを別テナントのBlobストレージにコピーする

以下のサイトを参考に、Managed Disksをダウンロードせずに、直接Blobストレージにコピーしています。なお、サイト記載のサンプルをAz化しています。

https://docs.microsoft.com/ja-jp/archive/blogs/jpaztech/export-managed-disks-to-vhd

事前にコピー先のテナントには、ストレージアカウントとBlobストレージのコンテナを準備しておきます。
また、各テナントにログインが必要になりますので、適時ログインして下さい。

※本コマンドを発行前には、対象の仮想マシンは停止しておいてください。

#Managed Disk Copy PowerShell

# コピー元へのログイン
Login-AzAccount
Select-AzSubscription -SubscriptionId  “コピー元のサブスクリプション ID”

# コピー元のディスクパラメータ
$sourcergname = “コピー元リソースグループ名”
$diskname = “コピー対象のManagedDisk名”

# SAS URL の作成
$mdiskURL = Grant-AzDiskAccess -ResourceGroupName $sourcergname -DiskName $diskname -Access Read -DurationInSecond 3600

# コピー先の情報
# コピー先テナントにログイン

Login-AzAccount
Select-AzSubscription -SubscriptionId  “コピー先のサブスクリプション ID”

# コピー先の各種パラメーター
$targetrgname = “コピー先リソースグループ名”
$storageacccountname = “コピー先ストレージアカウント名”
$countainername = “コピー先コンテナ名”

$storageacccountkey = Get-AzStorageAccountKey -ResourceGroupName $targetrgname -Name $storageacccountname
$storagectx = New-AzStorageContext -StorageAccountName $storageacccountname -StorageAccountKey $storageacccountkey[0].Value
$targetcontainer = Get-AzStorageContainer -Name $countainername -Context $storagectx

$destdiskname = “コピー後のファイル名”
$sourceSASurl = $mdiskURL.AccessSAS

# コピー
$ops = Start-AzStorageBlobCopy -AbsoluteUri $sourceSASurl -DestBlob $destdiskname -DestContainer $targetcontainer.Name -DestContext $storagectx
Get-AzStorageBlobCopyState -Container $targetcontainer.Name -Blob $destdiskname -Context $storagectx -WaitForComplete

 

.コピーしたファイルをManaged Disksに戻す

コピーしたファイルをコピー先のテナントでManaged Disksに戻します。以下のサイトを参考に戻すPower Shellを作ってみました。

https://docs.microsoft.com/ja-jp/archive/blogs/jpaztech/convertvhdtomanageddiskdeployvm

複数のサブスクリプションにログインした状態での作業となるため、作業ミス防止用に明示的にサブスクリプションを指定を追加しています。

vhdのURLは、以下の方法で確認が可能です。
Azure Portal上で、ストレージ アカウントを選択→Blobを選択→ファイルが保管された コンテナーを選択→対象のディスクファイルを選択。プロパティが表示されますが、この中のURLがVHDのURLとなります。

なお、OS Typeを指定しないと、後の作業で仮想マシン作成ボタンが押せない状態となります。

# VHD→ManagedDisk PowerShell

#Select Subscription
$SubscriptionId =“コピー先のサブスクリプションID”
Select-AzSubscription -SubscriptionId $SubscriptionId

#Parameter
$ResourceGroupName = “ManagedDiskのRG名”
$location = “ManagedDiskのロケーション”
$DiskName = “作成するManagedDisk名”
$vhdUri = “コピーしたファイルのURL”
$AccountType =“ストレージアカウントのType (ex; Standard_LRS)”<
$OsType = ”ManagedDiskのOS Type (ex; Linux)”

#Disk Config
$DiskConfig = New-AzDiskConfig `
-AccountType $AccountType `
-Location $Location `
-CreateOption Import `
-SourceUri $vhdUri `
-OsType $OsType

#VHD → Managed Disk
New-AzDisk `
-DiskName $DiskName `
-Disk $DiskConfig `
-ResourceGroupName $ResourceGroupName

完了すると、新たにManaged Disksができています。

作成したManaged Disksを選択すると、仮想マシンの作成というボタンが表示されてますのでクリックします。そうすると仮想マシンが作成されます。