Jak przenieść snapshot dysku VM do innego regionu?

przenieś obraz dysku do innego regionu w Azure

Last updated on 19 kwietnia, 2021

W ostatnim wpisie pokazałem jak podmienić dyski w maszynach wirtualnych na Azure za pomocą skryptu PowerShell. Wystarczyło mieć obraz dysku maszyny i można było to szybko wykonać podmianę. Dzisiejszy wpis będzie uzupełnieniem poprzedniego i pokaże jak taki obraz (snapshot) wykonać i przenieść do dowolnej lokalizacji (regionu). Wykonamy snapshot dysku VM (wirtualnej maszyny) i przeniesiemy go do odpowiedniej lokalizacji.

Snapshot

Snapshot tak zwana ‘migawka’ dysku czyli mówiąc wprost kopia dysku wykonana w danym momencie. Możemy wykonać go w dowolnej chwili, nawet za pomocą portalu odszukując interesujący nas dysk i klikając na ‘Create snapshot‘.

Azure disks

Tylko teraz zaczynają się schody. Snapshot możemy utworzyć tylko w subskrypcji w której znajduje się nasz dysk, a co więcej tylko w lokalizacji w której się on znajduje. Ma to swoje konsekwencje w tym, że nie będziemy mogli go użyć tak łatwo w innej lokalizacji(regionie) czy subskrypcji.

Azure create snapshot

Gdy utworzymy nasz snapshot, to nie będziemy mieli możliwości, żeby go przenieść za pomocą portalu.

Azure snapshots
Azure snapshot

Jednak nie wszystko stracone, o ile nie będziemy mogli w prosty sposób przenieść naszego snapshotu za pomocą portalu o tyle nie jest to problemem używając PowerShella.

Kopiowanie snapshotu

Na początku musimy mieć utworzony snapshot dysku, można to zrobić za pomocą portalu jak pokazałem w przykładzie powyżej. Gdy już mamy utworzony snapshot to możemy zalogować się do naszej azurowej subskrypcji za pomocą PowerShella:

Connect-AzAccount

Możemy także użyć Cloud Shell:

azure cloud shell

Przed uruchomieniem poniższego skryptu musimy w nim poprawić nazwy zmiennych.

Podać nazwę snapshotu który chcemy przenieść i jego grupę zasobów.

Miejscem docelowym będzie Storage Account. Podajemy jego nazwę, nazwę BLOBa do którego trafi obraz dysku, oraz nazwę grupy zasobów w której się znajduje. A na sam koniec nazwę jaką ma mieć utworzony obraz dysku. Jeśli nie mamy w docelowej lokalizacji utworzonego Storage Account to musimy go utworzyć.

# SOURCE
$SnapshotResourceGroup = "ResourceGroupNAME1"
$SnapshotName = "SnapshotName"

# DESTINATION
$StorageAccount = "StorageAccountNAME"
$StorageAccountBlob = "StorageAccountBlobNAME"
$storageaccountResourceGroup = "ResourceGroupNAME2"
$vhdname = "disk_image_name"


#SA_KEY
$StorageAccountKey = (Get-AzStorageAccountKey -Name $StorageAccount -ResourceGroupName $StorageAccountResourceGroup).value[0]
$snapshot = Get-AzSnapshot -ResourceGroupName $SnapshotResourceGroup -SnapshotName $SnapshotName

#GRANTING ACCESS
$snapshotaccess = Grant-AzSnapshotAccess -ResourceGroupName $SnapshotResourceGroup -SnapshotName $SnapshotName -DurationInSecond 3600 -Access Read -ErrorAction stop 
   
$DestStorageContext = New-AzStorageContext –StorageAccountName $storageaccount -StorageAccountKey $StorageAccountKey -ErrorAction stop

Write-Output "START COPY"
Start-AzStorageBlobCopy -AbsoluteUri $snapshotaccess.AccessSAS -DestContainer $StorageAccountBlob -DestContext $DestStorageContext -DestBlob "$($vhdname).vhd" -Force -ErrorAction stop
Write-Output "END COPY"

Tworzenie dysku

Gdy mamy przeniesiony snapshot do nowej lokalizacji możemy w prosty sposób za pomocą portalu utworzyć dysk. Wystarczy podczas tworzenia dysku jak źródło wybrać “Storage blob” i wskazać obraz, który przed chwilą stworzyliśmy. Należy pamiętać, że tworzony dysk nie może być mniejszy niż snapshot.

add azure disk
add azure disk - source
add azure disk - source storage account
add azure disk - source storage account BLOB

Jak podmienić sam dysk na maszynie wirtualnej dowiecie się z poprzedniego artykułu: https://lepczynski.it/azure/podmiana-dysku-z-os-na-azure-vm/

Oczywiście można zautomatyzować wszystko. Ja podałem prosty przykład że można przenieść snapshot do innego regionu. Równie dobrze można stworzyć bardziej skomplikowany skrypt, który po podaniu źródłowej nazwy dysku, grupy zasobów i lokalizacji docelowej:

  • utworzy Storage Account w docelowej lokalizacji,
  • wykona snapshot,
  • przeniesie snapshot do docelowej lokalizacji,
  • utworzy dysk z snapshotu w docelowej lokalizacji,
  • usunie niepotrzebny snapshot,
  • usunie niepotrzebny Storage Account.

Wszystko zależy głównie od naszej pomysłowości, pamiętajcie o tym. Jeśli dotrwaliście do końca i byście chcieli więcej bardziej zaawansowanych rzeczy, skryptów to zostawcie komentarze, wtedy postaram się zrobić bardziej zaawansowany wpis.

Inny sposób na przeniesienie dysku

Przy okazji są też inne sposoby w jakie można przenieść dysk do innego regionu, nawet bez użycia PowerShella. Zakładając że posiadamy VM w regionie A którą chcemy skopiować do regionu B to można np… Utworzyć nową grupę zasobów w regionie A. Skopiować do niej VM i przenieść całą grupę zasobów(zawierającą kopię naszej VM) do nowej lokalizacji, do regionu B. Operację tą można wykonać całkowicie za pomocą portalu, tylko dla mnie jest bardziej czasochłonna i jej nie używam 😉

Przeniesienie maszyn wirtualnych platformy Azure do innego regionu platformy Azure: link.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *