Çeşitli sebeblerden dolayı Managed Disk kullanan Azure VM’lerinizi region’lar arası taşımak isteyebilirsiniz. Azure Managed Disk’ler Azure IaaS VM’nin disk yönetimini, VM diskleriyle ilişkili depolama hesaplarını yöneterek basitleştirir, ancak bu durum, farklı region’larda managed diskler oluşturmak için depolama hesaplarında VHD dosyalarının kullanılmasını da engeller.
Peki Managed Disk Kullanan VM’leri Region’lar arası nasıl taşıyabiliriz ?
Managed Disk VM Migration Checklist:
1. Virtual Machine Snapshot’ının alınması
2. Hedef Region’da Storage Account ve Container oluşturulması
3. Snapshot’un hedef Storage Account’a VHD olarak kopyalanması
4. Kopyalanan VHD’den VM Disk oluşturulması
5. Hedef lokasyonda (West Europe) VM’in Oluşturulması
West Europe Region’ina taşınmak istenen Virtual Machine:
Değişkenler:
$ResourceGroupName = “RG_EmreMartin”
$Sourcelocation = “West US”
$Vmname =”VMPROD001″
$NewVmName =”VMPROD002″
$skuName =”Standard_LRS”
$TargetLocation =”West Europe”
$StorageAccount =”vmprod001migration”
$DiskSize =”128″
$StorageType =”Standard_LRS”
$Vmsize = “Standard_A1”
$virtualNetworkName =”RG_EmreMartin”
Notes:
$NewVmName : Taşınacak VM ismi farklı olmak zorundadır . Aynı ismi kullanmak istiyorsanız işlemlere başlamadan önce Virtual Machine’i portal üzerinden “Deleted” yaparak komut setlerindeki $NewVmName parametresini $Vmname ile değiştirmeniz gerekmektedir.
$virtualNetworkName: Benim ortamında taşınacak VM mevcut Virtual Network’e dahil edilecektir. Taşıma işlemlerine başlamadan önce ilgili region’da bir Virtual Network oluştuduğunuza emin olun.
PowerShell ile AzureRM Account’ımıza login olarak çalışmayı yapacağımız Subscription’i seçiyoruz.
Login-AzureRmAccount
Select-AzureRmSubscription -SubscriptionId 97037a45-XXXXXXXXX
1. Virtual Machine Snapshot’ının alınması
$vm = get-azurermvm -ResourceGroupName $resourceGroupName -Name $vmName
$snapshot = New-AzureRmSnapshotConfig -SourceUri $vm.StorageProfile.OsDisk.ManagedDisk.Id -Location $Sourcelocation -CreateOption copy
New-AzureRmSnapshot -Snapshot $snapshot -SnapshotName “$vmname.SnapShot” -ResourceGroupName $resourceGroupName
2. Hedef Region’da Storage Account ve Container oluşturulması
New-AzureRmStorageAccount -ResourceGroupName $resourceGroupName -Name $StorageAccount -SkuName $skuName -Location $TargetLocation | New-AzureStorageContainer -name vhds -Permission Container
$storageAccountKey=(Get-AzureRmStorageAccountKey -ResourceGroupName $resourceGroupName -AccountName $StorageAccount).Value[0]
#SAS Key ve Storage Context oluşturulması
$sas=(Grant-AzureRmSnapshotAccess -ResourceGroupName $ResourceGroupName -SnapshotName $snapshotName -Access Read -DurationInSecond 7200)
$destinationContext = New-AzureStorageContext –StorageAccountName $StorageAccount -StorageAccountKey $storageAccountKey
3. Snapshot’un hedef Storage Account’a VHD olarak kopyalanması
Start-AzureStorageBlobCopy -AbsoluteUri $sas.AccessSAS -DestContainer vhds -DestContext $destinationContext -DestBlob “$StorageAccount.vhd”
Yukarıdaki komut ile VHD kopyalama işlemini başlattıktan sonra diğer adımlara geçmeden kopyalama işleminin tamamlandığına (Success) emin olunuz. Kopyalama durumunun kontrol etmek için:
Get-AzureStorageBlobcopystate -Container vhds -blob “$StorageAccount.vhd” -Context $destinationContext
4. Kopyalanan VHD’den VM Disk oluşturulması
$sourceVHDURI=(Get-AzureStorageBlob -blob $StorageAccount.vhd -context $destinationContext -Container vhds).ICloudBlob.uri.AbsoluteUri
$diskConfig = New-AzureRmDiskConfig -AccountType $storageType -Location $TargetLocation -CreateOption Import -StorageAccountId $storageAccountId -SourceUri $sourceVHDURI
New-AzureRmDisk -Disk $diskConfig -ResourceGroupName $resourceGroupName -DiskName $StorageAccount
*Dilerseniz oluşturmuş olduğumuz diski (Unmanaged) daha sonra Managed Disk’e çevirebilirsiniz.
https://docs.microsoft.com/en-us/azure/virtual-machines/windows/convert-unmanaged-to-managed-disks
5. Hedef lokasyonda (West Europe) Virtual Machine Oluşturulması
#Mevcut Virtual Network’in Tanımlanması
$virtualNetwork = Get-AzureRmVirtualNetwork -ResourceGroupName $resourceGroupName -Name $virtualNetworkName
#NIC ve Public IP ‘nin oluşturulması
$publicIp = New-AzureRmPublicIpAddress -Name “$vmname.ip” -ResourceGroupName $ResourceGroupName -Location $targetlocation -AllocationMethod Dynamic
$networkInterface = New-AzureRmNetworkInterface -ResourceGroupName $resourceGroupName -Name “$vmname”-Location $targetlocation -SubnetId $virtualNetwork.Subnets[0].Id -PublicIpAddressId $publicIp.Id
Virtual Machine’in Hazırlaması
$destinationContext = New-AzureStorageContext –StorageAccountName $StorageAccount -StorageAccountKey $storageAccountKey
$vmConfig = New-AzureRmVMConfig -VMName $NewVmName -VMSize $Vmsize
$blob=Get-AzureStorageBlob -Container vhds -Context $destinationContext -Blob $blobname
$diskid=$blob.ICloudBlob.Container.Uri.AbsoluteUri
$VHDurl=”$diskid/$StorageAccount.vhd”
$vmConfig = Set-AzureRmVMOSDisk -VM $vmConfig -Name “$StorageAccount.vhd” -VhdUri $VHDurl -CreateOption Attach -Windows
$vmConfig = Add-AzureRmVMNetworkInterface -VM $vmConfig -Id $networkInterface.Id
6. Azure Virtual Machine’nin Oluşturulması
$vm = New-AzureRmVM -VM $vmConfig -Location $targetlocation -ResourceGroupName $resourceGroupName
West Europe Region’ina taşınan Virtual Machine:
Faydalı olması dileğiyle.
Managed Disk Kullanan Virtual Machine’lerin Region’lar Arası Taşınması
Managed Disk Migration Between Regions.