Przejdź do treści

Jak przenieść snapshot dysku VM do innego regionu?

przenieś obraz dysku do innego regionu w Azure 2022

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 create snapshot

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 basics

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

azure search snapshot
azure disk backup 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.

azure search and add disk
azure create managed disk
azure storage account add disk
azure storage account containers image disk

Jak podmienić sam dysk na maszynie wirtualnej dowiecie się z poprzedniego artykułu Podmiana dysku z OS na Azure VM.

Oczywiście można zautomatyzować wszystko. Ja podałem prosty przykład w którym opisałem jak 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 Twojej pomysłowości, pamiętaj o tym. Jeśli dotrwałeś do końca gratuluję;) Jeśli chcesz więcej bardziej zaawansowanych rzeczy, to zostawcie komentarz, a postaram się cos wymyślić.

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ę VM) do nowej lokalizacji, do regionu B. Operację tą można wykonać całkowicie za pomocą portalu, tylko jest ona bardziej czasochłonna 🙂

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