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

 

今回は、Azure VMをAzureの別テナントへ移行してみました。

実際に試行錯誤して実施してみたのですが、最終的には以下のような段取りになりました。

      • Azure VMのManaged Disksを別テナントのBlobストレージにコピーする
      • コピーしたファイルをManaged Disksに戻す
      • Managed DisksからVMを作成する

実施してみた所、Azure VMのManaged Disksを移行先のテナントのBLOBストレージにVHDファイルとして保管する必要があるようでした。移行先テナントでVHDファイルをManaged Disksに戻すことで仮想マシンを作成することで実現出来ました。

今回作業にあたっては、PowerShellを利用して実施してみました。

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

1 .Azure VMのManaged Disksを移行先テナントのBlobストレージにコピーする

まず事前に以下の準備をしておきます。

      • 移行先のテナントに、ストレージアカウントとBlobストレージのコンテナを準備しておく
      • 移行対象の仮想マシンを停止しておく。(Managed DisksにAzure VMをアタッチしていない場合はそのままで実行可能です。)

Managed Disksを一旦ローカルにダウンロードして、移行先のストレージアカウントにアップロードする事でも対応可能です。

ただ作業が面倒なので、以下のサイトを参考に、Managed Disksをダウンロードせずに、直接移行先のBlobストレージにコピーする方法を試してみました。

サイト記載のサンプルをAz化しています。

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

Power Shell実行時には各テナントへのログイン画面が表示されます。適時ログインして下さい。

※サイト記載のサンプルをAz化しています。

#Managed Disk Copy PowerShell

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

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

# SAS URL の作成(有効時間を1時間にしています。タイムアウトになる場合は適時調整します。)
$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

コマンドが完了したら、移行先のBlobストレージ内にファイルが生成されているの確認してください。生成されていたら作業は完了です。

.コピーされたVHDファイルをManaged Disksに変換する

コピーされたファイルをコピー先のテナントでManaged Disksに変換します。

以下のサイトを参考に戻すPower Shellを作ってみました。

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

本Power Shellの重要な注意点ですが、OS Typeを指定しないと、変換自体は出来るのですが、後の作業で仮想マシン作成ボタンが押せない状態となります。これでドはまりしました。

Power Shell内で指定するVHDファイルのURLは、VHDファイルが保管されているBlobストレージにて確認します。

Storage ExplorerにてVHDファイルを選択します。右クリックするとプロパティという項目が表示されますので選択します。下記画面が表示されますので、Uriに表示されている内容をコピーします、Power Shell実行時に指定するVHDファイルのURLになります。

実際に実行するPower Shellは下記の通りになりました。

# 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

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

Power Shellを実行し完了すると、新たにManaged Disksができています。確認はディスクのメニューでできます。

変換が終了したManaged Disksを選択すると、VMの作成というボタンが表示されてますのでクリックします。そうすると仮想マシンの作成画面に遷移しますので、そのまま作成を進めればAzure VMが作成できます。

※オペレーティングシステムが空白の場合はVMの作成ボタンがクリックできません。

.移行後のAzure VMで作業が必要そうです

なお、OMSエージェントを含む、拡張機能は接続先のテナントが異なる為、再度設定が必要になります。この編でドはまりする事もあるので注意が必要になります。

別件にはなりますが参考程度で見て頂ければと。(結果、関連パッケージのアンインストール、インストールを実施しました。)

Log AnalyticsでLogやリソース情報が取得出来なくなった時にやった事