Ways for Migrating Azure VMs from ASM (v1) to ARM (v2)- Part 1

Son zamanlarda hakkında pek çok soru aldığım bir konudan bahsetmek istiyorum. Azure bizlere Virtual Machine hizmetini iki farklı şekilde oluşturmamıza olanak sağlıyor. Bu farklı türlerdeki sanal sunucular Microsoft Azure içerisinde çalıştığı platform farklılıklarından kaynaklanmaktadır. Yazıya devam etmeden önce bu iki farklı terminolojinin ne anlama geldiğini kısaca açıklamanın faydalı olacağını düşünüyorum.

Classic (v1) / Azure Service Management

Classic veya Azure Service Management (ASM) olarak adlandırılırlar.Diğer adıyla v1(Virtual Machine) olarak da görebilirsiniz. Service Management kaynakları classic portal, yeni portal(Ibıza) veya Azure PowerShell / CLI ile yönetilebilir. Ancak, Classsic VM’ler bazı özellikleri, yeni Azure Portal(Ibıza) üzerinde henüz mevcut değildir. ( Network Card Custom DNS, vd.)

ARM (v2) / Azure Resource Manager

Resource Manager veya Azure Resource Manager(ARM) olarak adlandırılırlar. Azure Resource Manager yapısı Service Management yapısına göre oldukça farklıdır ve bunun detayını blog üzerinde “RESOURCE MANAGER VS SERVICE MANAGEMENT” adlı yazımdan bulabilirsiniz. Microsoft Azure ilk hizmet vermeye başladığı zamanlarda sadece PaaS ve SaaS hizmetlerini düşünerek yola çıkmıştı fakat müşterilerinden gelen talepler doğrultusunda IaaS hizmeti verince işler biraz karıştı. Service Management içerisinde oluşturulan bir sanal sunucuya dışardan gelen istekler önce Cloud Service hizmetine gelip oradan ilgili sanal sunucuya aktarılıyordu. Fakat bu yapı Resource Manger altyapısı ile yepyeni bir boyuta taşınarak Network Interface kaynağına gelip oradan erişim sağlanıyor ve Resorce Manager sunuculardaki esnekliğin, ayrıca yönetimin üst seviyelerde olduğunu şahit olacaksınız.( + Performans ) Azure yeni portal(Ibıza) üzerinden özellikle Automation ve DevOps’un etkisini ne kadar yazsak az olacağını düşünüyorum. Resource Manager Template Deployment ve Şablonlarınızı import/export yöntemi ile önemli avantajlar sunmaktadır. ARM şablonları ve geliştirdiğiniz deployment modelleri operasyon anlamında inanılmaz kolaylık sağlıyor olacak.

Azure üzerinde artık yeni bir hizmet oluşturduğunuz zaman Resource Manager altyapısını tercih etmeyi unutmayın.Teknik yetenekleri dışında Microsoft’un yeni satış modeli olan Cloud Solution Provider ise sadece Resource Manager dağıtım modelinden anlayabiliyor. Başka bir yazımda ise bu modelleri derinlemesine inceliyor olacağım. Ancak, bugün, hala Service Management (Classic) platformunu kullanan müşterilerim oldukça mevcut ve tüm kaynaklarını Resource Manager platformunda geçirmek için 4 seçenek üzerinde duracağım

Seçenek 1 – ASM2ARM Script

İlk seçeneğimiz ASM2ARM adında bir Powershell Script olarak karşımıza çıkmaktadır. GitHub üzerinden erişebileceğiniz bu script ile (v1)Virtual Machine yapısından (V2)Virtual Machine taşımanıza izin veren kod bloklarını ve cmdlet kümesini içerir. Bu sayfa üzerinde migration işlemi için bu aracı nasıl kullanılacağı hakkında daha detaylı bilgiler elde edebilirsiniz. Bu script geliştiren kişinin bir Türk olduğunu yazmayıda unutmayalım.

Avantajları:

Bu seçenek ile süreci tamamen scripted duruma getirebilirsiniz. Herhangi bir portal arayüzüne erişip bir aksiyon almanıza gerek yoktur.”ASM2ARM” ile ancak “tek” makine taşınabilir. Paralel olarak taşımak için alt yapıda bulunan tüm sanal sunucuları PowerShell içerisinde döngü kullanımı ile tek seferde gerekli taşıma sürecini başlatabiliriz. Eğer kurulmuş bir ağ topolojisinde (vNETs vb) taşımak istiyorsanız iyi bir seçim olacaktır.

Dezavantajları:

Powershell Script kullanırken bu parametrelerden birini yanlış yazdığınız zaman, özellikle çok fazla hataya eğilimli olduğunu söylemekte fayda var. Aynı zamanda taşınan kaynakların isimlerine otomatik olarak bir prefix ekler böylece önünde ‘migrated-‘ ismi gelmektedir. Bu durum maleesef idealden olarak görüyorum. Son olarak, bu taşıma süresince v1 VM(Service Management) kapalı durumda olması gerekir ve bu da kesinti anlamına gelmektedir.

Sonuç:

Powershell’in yeteneklerine baktığımızda harika bir seçim olduğunu düşünmeme rağmen, yavaş taşır ve hizmet kesinti gerektirir.

Seçenek 2 – Azure Powershell

Azure SDK v2.9 sürümü ile, kaynakların taşınması için bir takım cmdlet yapısı inşa ediliyor. Microsoft’un resmi sayfasında bulabileceğiniz bu konuda adımlara bakarak taşıma işlemlerini yapabilirsiniz. Bu komutlar hali hazırda birçok destek ve esneklikleri olup bir sonraki sürümlerde yenileri eklenecektir. Cmdlet örnekleri ” Move-AzureService, Move-AzureVirtualNetwork” şeklinde gözlemlenir.

Avantajları:

Süreç tamamen Azure Powershell cmdletleri ile yapılabilir.Microsoft’un resmi yazısı eski olsa bile, cmdlet örnekleri temel geçiş senaryoların bir çoğunu kapsamaktadır. Büyük bir yararı ise taşıma sırasında hiçbir kesinti ortaya çıkmamasıdır. VHD dokunmadan metedata ile sorunsuz bir geçiş yapılabilir.

Dezavantajları:

Şu anda desteklenen senaryolar sınırlıdır. Bulut Hizmetleri, bütün vNET ve sadece classic VM alt yapısı için geçerlidir. Resource Group içerisinde bulunan vNET yapısına dahil edilemez.

Sonuç:

Azure PowerShell ile çok hızlı ve hiçbir kesinti olmadan geçiş sağlanabilir. Kestirmeden nirvanaya ulaşmak için Powershell Workflow ile paralel işlemler başlatabilirsiniz. Ancak, desteklenen senaryolar sınırlıdır ve bütün vNETs taşınması gerekir ise mevcut bir ağ topolojisinde taşınamaz(Farklı CIDR aralığına). Microsoft’un resmin yazısı içerisinde geçiş senaryoları dikkatli bir şekilde okunmalıdır.