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’.
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.
Gdy utworzymy nasz snapshot, to nie będziemy mieli możliwości, żeby go przenieść za pomocą portalu.
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:
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.
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.