· Azure Klasik Mimari (Azure Service Management Model/Architecture) (v1)
· Azure Kaynak Yönetim Mimarisi (Azure Resource Manager (ARM) Architecture) (v2)
Azure Klasik Mimari kısaca ASM(Azure Service Management) olarak da isimlendirilir. Yeni nesil Azure Resource Manager mimarisi ise kısaca ARM olarak adlandırılır.
Her iki mimarinin de birbiri ile tam uyumluluğu ya da entegrasyonu yoktur. ARM mimarisi tamamen yeni nesil Azure yönetim portalı ile ( https://portal.azure.com ) kullanılmayan başlanmıştır. Klasik Azure yönetim portalı olan ( manage.windowsazure.com ) ile ARM mimari yönetimi desteklenmemektedir.
ARM mimarisinin ASM mimarisi ile karşılaştırıldığında sağladığı avantajları genel olarak şu şekilde sıralayabiliriz:
· ARM (Azure Resource Manager) kaynakları yönetmek, yaygınlaştırmak ve izlemek için gerekli yönetim katmanı ya da arabirimini sağlayan API’dır.
· Azure kaynaklarının kurulumu, yaygınlaştırılması, yönetimi ve izlenmesini tek bir grup olarak gerçekleştirmeyi sağlamıştır. Bu yönetimi “kaynak grupları (resource groups)” kullanarak sağlamaktadır.
· ARM şablon kullanımları ile kaynakların tanımlanması ve provizyonlanması desteğini getirmiştir. Böylece ilgili kaynaklar parametrik olarak JavaScript-tabanlı bir JSON(JavaScript Object Notation) şablon dosyasında tanımlanıp, provizyonlanması sağlanmıştır.
· Rol tabanlı erişim kontrolü (RBAC –Role Based Access Control) ile daha esnek, kolaylaştırılmış ve detaylı yetki yönetim desteği gelmiştir.
· Etiketlendirme (TAG) desteği ile aynı Azure aboneliği altında kullanılan kaynakların mantıksal olarak sınıflandırılması, organize edilmesi ve yönetim desteği gelmiştir.
· BT dünyasında yazılım geliştirmesinden sorumlu ekipler (Developers, kısaca Dev) ile, yazılımları işletmeden sorumlu operasyon ekipleri (Operations, kısaca Ops) arasında etkileşimi ve işbirliğini artırmak için geliştirilen DevOps yaklaşım ve felsefesi için, altyapıyı kod seviyesinde yönetmeye (Infrastructure as a Code) dair en iyi uygulama örneklerini sağlayarak çıkış amacını da büyük oranda gerçekleştirmiştir.
· ARM mimarisi Azure bulut altyapısını bileşenlere ayırarak, modüler mimaride yönetmeyi de sağlamıştır. Böylece gerektiğinde farklı bileşenleri ya da parçaları bir araya getirerek yüksek seviyede otomatize edilmiş, ölçeklenebilir bir yapıyı sağlamıştır.
ARM mimarisinin sağladığı faydalarla ilgili yukarıdaki maddelere daha birçok ilave yapabiliriz.
ARM şablonları, JavaScript notasyonunda yazılan JSON(JavaScript Object Notation) metin dosyalarıdır. Bu dosyanın hazırlanması ve düzenlenmesinde klasik metin editör araçları ya da uygulamaları kullanılabileceği gibi, önerilen Visual Studio ile çalışmaktır. Vstudio ile sağlanan Intellisense, yardım ve fonksiyonlar şablon dosyasının hazırlanmasını çok daha kolay hale getirecektir.
JSON şablon dosyasının karakteristik özelliklerini şu şekilde sıralayabiliriz:
· Azure genel bulutu ya da Azure Stack özel bulut platformları üzerinde desteklenmektedir.
· İlgili tüm kaynaklara ait tanımlamalar, yapılandırma ayarları ve uzantıları dosya içerisinde belirtilir.
· Benzer özellikte çok sayıda kaynağın oluşturulması, yönetimi ve izlenmesinde aynı şablonu tekrar tekrar kullanabilirsiniz. Özellikle uygulamaların yükseltilme, ilave sanal sunucu vb. kaynaklarla ölçeklenebilmesi gibi amaçlar için kullanılabilir. Özellikle yatayda ya da dikeyde ölçekleme senaryolarında ilave edilecek kaynakların spesifikasyonları şablon içerisinde tanımlanır. Şablon dosyası içeriği uygulandığında, ARM önceden oluşturulan kaynakları ayırt ederek, sadece eklenen kaynakları ilave eder.
· Şablon dosyası parametriktir. Bu hem otomasyon hem de uygulamaların yönetimi ve yaygınlaştırılmasını kolaylaştırır. Parametrik olması sayesinde şablon içerisindeki parametrelere ait değerlerin çalışma anında tanımlanan farklı yapılandırma ayarları ya da ortamlarına göre aynı şablonun tekrar tekrar kullanımını sağlar.
· Hazırlanan şablon dosyası Azure Portal ya da Azure PowerShell araçları ile kullanılabilir.
· Şablon içerisinde tanımlanan kaynaklar yeni oluşturulan ya da mevcut bir Azure Resource Group içerisinde provizyonlanırlar.
· ARM şablonlarını sıfırdan, yeniden oluşturmaya gerek olmadan, GitHUB vb. platformlar üzerindeki mevcut şablonlar olduğu gibi ya da kısmi düzenlenerek kullanılabilir. Önceden hazırlanmış, örnek şablonlar için Azure QuickStart Templates sayfasını inceleyebilirsiniz. Yine benzer şekilde GitHUB arşiv deposunda da oluşturulmuş hazır şablonlara ulaşabilirsiniz. GitHub arşivinde Microsoft tarafından da desteklenen ve sürekli büyüyen JSON şablon kütüphanesini bulabilirsiniz.
Bu aşamada kısaca GIT ve GITHUB ortamlarından da bahsetmek istiyorum. GIT; yazılım geliştirme süreçlerinde kullanılan ve dağıtık yapıda da çalışmayı destekleyen, sürüm kontrolü ve kaynak kod yönetim sistemidir. GitHub, Git platformu üzerine inşa edilmiş olan ve GIT veri arşivlerini barındıran web-tabanlı servistir. GIT bir araç iken, GITHUB ise GIT aracını kullanan projelere servis sağlayıcıdır. GIT bir komut satırı aracı iken, GitHub ise web tabanlı grafiksel arayüzdür. GITHUB aynı zamanda ekipler arası iletişim yeteneklerine de sahiptir. Hazırladığınız kod verilerini başkaları ile de paylaşmaya, başkalarının kodlarına erişim sağlamaya ve uzak GITHUB sunucular üzerinde yerel veri depolarınızın kopyalarını tutmayı sağlar. Kendi bilgisayarınıza GITHUB Desktop uygulamasını kurarak da yerel bilgisayarınızdaki kodları GitHub.com ile senkronize edebilirsiniz.
ARM şablonlarının listelendiği GitHub web portalında; 101 ile başlayanlar temel özelliklere ait şablonlar iken, 201 ile başlayanlarsa ileri seviye ve karmaşık şablonlardır. Bu şablonlara doğrudan GitHUB portalından erişebileceğiniz gibi, Azure QuickStart Templates sayfasındaki arama indeksini de kullanabilirsiniz.
Bir ARM şablonu dört farklı dosyadan oluşur. Bunlar:
· Readme.md HTML dosyası. Şablon dosyasının ne amaçla hazırlandığının tanımı ve Azure aboneliğinize ait ortama bu şablonu uygulamak için gerekli kısayolları sağlar.
· AzureDeploy.JSON içerisinde üzerinde işlem yapılacak ilgili kaynakları içeren ana şablon dosyasıdır.
· MetaData.JSON dosyası, şablonu kullanmak için gerekli ilave meta verileri sağlar.
AZUREDEPLOY.JSON ŞABLON DOSYASI
Bir JSON şablon dosyası 6 adet bölümden oluşur.
Bu bölümler:
· $schema
· ContentVersion
· Parameters
· Variables
· Resources
· Outputs
$schema bulunması zorunlu olan bölümdür. Şablon dil versiyonunu tanımlayan dosya konumunu belirtir. JSON schema referansını gösterir. Şema referansı akıllı JSON istemciler tarafından JSON dosyasına uygulanan schemaya karar verir ve otomatik tamamlama, intellisense gibi ilave fonksiyonları sağlar.
ContentVersion bulunması zorunlu olan bölümdür. Şablonun içerik versiyonunun tanımlandığı bölümdür.
Parameters bulunması isteğe bağlı olan bölümdür. Şablon işletime alındığında kullanılan parametrelerin tanımlandığı bölümdür. JSON şablon dosyasına dinamik girdi olacak nesneleri sağlar.
Parametrelere birden fazla değer atanabilir (allowedvalues anahtarı kullanılarak ve köşeli parantez ([]) içerisinde tanımlanarak). Ayrıca isteğe bağlı olarak parametrelere varsayılan değer de atanabilir.
Variables bulunması isteğe bağlı olan bölümdür. Şablon işletime alındığında kullanılacak, önceden tanımlanmış parametrelere ait statik değerleri sağlar.
Resources bulunması zorunlu olan bölümdür. Bir kaynak grubu (resource group) içerisinde oluşturulan, yönetilen ya da güncellenen kaynakları tanımlar. Her kaynak için tip (type), isim (name) ve API versiyon bilgisi (apiVersion) tanımlanır. Tip (Type); kaynak sağlayıcının isim alanı ve desteklenen kaynak tipini tanımlar. Tipe ait değer; oluşturulacak kaynağa ait URL adresinin alt karakter dizisidir. Örneğin; Microsoft.Storage/storageAccounts vb. Oluşturulan şablon işletildiğinde HTTP protokolüne ait PUT isteklerini şablona ait motor(engine) gerçekleştirir.
Aşağıda örnek örnek kaynaklara ait URL yol tanımlarını görmektesiniz:
· Depolama Hesabı (Storage Account) Yol Tanımı
Microsoft.Storage/storageAccounts
· Public IP Address Yol Tanımı
Microsoft.Network/publicIPAddresses
· Sanal Ağ Yol Tanımı
Microsoft.Network/virtualNetworks
· Ağ Arabirimi Yol Tanımı
Microsoft.Network/networkInterfaces
· Sanal Sunucu Yol Tanımı Virtual Machine
Microsoft.Compute/virtualMachines
Outputs bulunması isteğe bağlı olan bölümdür. Şablon dosyası ile yapılandırma ve güncelleme sonrası dönen değerler tanımlanır.
ARM JSON şablon dosyası yapı olarak anahtar ve değer çiftlerini barındırır. Örneğin; “contentVersion” anahtarı için “1.0.0.0” değerini saklar. Anahtar adı daima çift tırnak içerisine ( “ ” ) yazılır.
Anahtarın değeri; metin (string), güvenli metin (securestring), sayı (number), mantıksal ifade (boolean expression), dizi (array) ya da nesne (object) olabilir.
JSON şablon dosyası içerisindeki yazım kurallarından bazılarını şu şekilde sıralayabiliriz:
· Şablon dosyası içeriğinde bir JSON nesnesi süslü parantez ( { } )içerisinde tanımlanır.
· Anahtar/Değer çiftinde anahtar daima iki nokta üst üste (:) ile devam eder.
· Farklı anahtar/değer çiftleri birbirinden virgülle (,) ayrılırlar.
· JSON dosyası aynı zamanda fonksiyon ve ifadeleri (expression) de içerebilir. İfadeler köşeli parantez ([]) içerisine yazılırlar ve JSON dosyasında her yerde bulunabilirler.
· Şablon dosyasından fonksiyon çağrılması fonksiyonadi(parametre1, parametre2, parametre3) şeklinde yapılır.
· Nesnelere ait özellikler nokta ve indeks operatörleri kullanılarak (resourceGroup().location gibi) referans gösterilirler.
AzureDeploy.Parameters.JSON
Azuredeploy.JSON dosyası içerisindeki parametrelere değer sağlayan ve bu değerleri çalışma anında işleten dosyadır. Azuredeploy.JSON dosyası içerisindeki parametrelere değer atamak için PowerShell komut satırı arabirimini kullanabileceğiniz gibi, azuredeploy.parameters.json dosyası ile değerler bir dosyada saklanabilir. Aşağıdaki örnekte sanal sunucuya ait işletim sistemi ve data disklerinin kaydedileceği depolama hesabı için newStorageAccountName, sanal sunucunun yönetici kullanıcısı için adminUsername, yönetici kullanıcı hesabının şifresi için adminPassword, sunucu adı için de dnsNameForPublicIP parametreleri tanımlanmıştır.
Parametrelere ait değerleri azuredeploy.parameters.json gibi bir dosyada saklayacaksanız; üretim ortamları için ayrı, test ya da dev ortamları için ayrı dosyalar tanımlamanız daha uygun olacaktır.
ARM ŞABLON KULLANILARAK KAYNAKLARIN PROVİZYONLANMASI
JSON şablon dosyası kullanılarak Azure kaynaklarının yönetimi ve provizyonlanmasında farklı yöntemler ya da araçlar kullanılabilir. Bunlar içerisinde en yaygın olanları:
· Azure Portal Kullanılarak
· Azure PowerShell Kullanılarak
Şimdi bu iki yöntemi de ayrı ayrı ele alarak Azure kaynaklarının provizyonlanmasını gerçekleştirelim.
Azure Portal İle ARM Şablon Kullanımı
Öncelikle elimizde hazırlanmış bir ARM şablon dosyamızın hazır olması gerekir. Bunun için halihazırda bulunan şablonlar için Azure Portalından ya da GITHUB portalından faydalanabiliriz. JSON şablon dosyasını kullanarak bir Windows Server sanal sunucu provizyonlaması yaparak örnek uygulamamızı gerçekleştireceğiz. Bunun için GITHUB portalında 101-vm-simple-windows şablonunu kullanacağız.
İlgili şablon bağlantısına tıkladıktan sonra açılan ve yukarıdaki ekran çıktısında da görülen JSON şablonuna ait dosyalardan README.md seçili iken alt kısımda gelen “Deploy to Azure” butonuna tıklayarak süreci başlatıyoruz.
Karşımıza gelen ekranda Azure aboneliğimize ait hesap bilgilerini girerek oturum açıyoruz.
Şablon dosyası içerisindeki yapılandırma ayarlarına ve parametrelere göre otomatik olarak aşağıdaki provizyonlama ekranı karşımıza gelecektir.
Bu ekranda şablon içerisinde tanımlanmış ve bizden istenen parametrelere ait değerleri girerek Tamam (OK) ile onaylıyoruz. Şablonu Düzenle (Edit Template) butonu üzerine tıklanarak, JSON şablon dosyasının içeriğine de ulaşabilirsiniz.
Açılan ekranda metin düzenleme editörü içerisinde istediğiniz değişiklikleri yapıp, Kaydet (SAVE) butonuna tıklayarak kaydedebilirsiniz. Yapılan değişiklikler Parametreleri Düzenle (Edit Parameters) ekranına tekrar geçerseniz anında yansıdığını göreceksiniz. Örneğin aşağıdaki gibi işletim sistemi listesine ilave seçenekler ekleyerek kaydedebilirsiniz.
Abonelik (Subscriptions) kısmında oturum açtığınız hesabına ait olduğu Azure aboneliğinize ait tanımlamayı göreceksiniz.
ARM mimarisinde oluşturulan kaynakların bir kaynak grubu (resource group) altında oluşturulması gerekir. Azure Kaynak grubu ( Azure Resource Group) yeni mimarinin temel bileşenlerinden biri olup “RG” kısaltması ile kullanımı da yaygındır. Kaynak grubu ilişkili kaynaklara ait koleksiyonu tek bir entity olarak yönetmeyi sağlar. Bu sayede aynı grup içerisindeki tüm kaynakların başlatılması, durdurulması, taşınması, silinmesi tek adımda gerçekleştirilebilir. Kaynak grubu; kaynaklar üzerinde RBAC yetkilendirme modeli ile granüler seviyede yetki tanımlamayı ve uygulamayı, grup seviyesinde denetimi, metaveri etiketleri (tag) kullanımı ile daha iyi izlemeyi sağlar. Azure kaynak grupları bir başka ifade ile ilgili kaynakların mantıksal olarak konumlandırıldığı ” kap (container) ” olarak da düşünülebilir. Örneğin; bir kaynak grubu içerisinde internete açık bir web sitesi, arka planda SQL veritabanı, bir ya da daha fazla sayıdaki sanal ağlar (virtual network), ve ilave varlıklar için bir depolama hesabı (storage account) konumlandırılabilir. Alternatif olarak, arka plandaki SQL sunucular için ayrı bir kaynak grubu kullanılarak web katmanındaki kaynaklar buraya konumlandırılabilir. Kaynakları kaynak grupları içerisine konumlandırırken bu kaynakların yaşam döngüleri, birbirileri ile etkileşimleri, entegrasyonları ve güvenlik durumları göz önünde bulundurulmalı ve buna göre gruplandırılmalıdır.
Biz bu adımda yeni bir kaynak grubu oluşturarak ilgili kaynakların onun içerisinde oluşması için “Yeni Oluştur (New)” seçeneğini seçip, metin kutusuna da kaynak grubu için isimlendirmeyi gerçekleştiriyoruz. Mevcut bir kaynak grubunuz varsa, “Var olanı kullan (Use Existing)” seçeneğini seçip listeden de ilgili grubu seçebilirsiniz.
Oluşturulacak kaynakların hangi bölgedeki veri merkezine konumlandırılacağını “Kaynak Grubu Konumu (Location)” bölümünden seçiyoruz. Biz “Batı Avrupa (West Europe)” olarak bırakıyoruz. Son olarak “Yasal Koşullar (Legal Terms)” kısmında gelen sözleşmeyi kabul ediyoruz.
Sanal sunucunun provizyonlanmasını başlatmak için “Oluştur (CREATE)” butonuna basmanız yeterlidir. Provizyonlama sürecini pano (dashboard) ekranından da takip edebilirsiniz.
Azure PowerShell İle ARM Şablon Kullanımı
Bu yöntemde de öncelikle elimizde hazırlanmış bir ARM şablon dosyamızın hazır olması gerekir. Bunun için halihazırda bulunan şablonlar için Azure Portalından ya da GITHUB portalından faydalanabiliriz. Bu yöntemde de JSON şablon dosyasını kullanarak bir Windows Server sanal sunucu provizyonlaması yaparak örnek uygulamamızı gerçekleştireceğiz. Bunun için GITHUB portalında 101-vm-simple-windows şablonunu kullanacağız.
Azure PowerShell CLI arabiriminde aşağıdaki adımları kullanarak provizyonlamayı gerçekleştirebilirsiniz:
Öncelikle Runas Administrator ile Azure PowerShell CLI uygulamasını başlatıyoruz. Aşağıdaki komut ile Azure Powershell modülünün kontrolünü yapıyoruz:
· Get-Module *AZURE* -ListAvailable
Version alanında komutların hangi Azure modülünün hangi versiyonununa ait olduğu bilgisine de ulaşabilirsiniz. Yüklü olan Azure modülüne ait versiyon bilgisini öğrenmek için de aşağıdaki komutu kullanmanız yeterlidir:
· (Get-Module azure -ListAvailable).version
Bu kontrollerden sonra öncelikle Azure abonelik bilgilerimimizle Azure PowerShell CLI aracından oturum açıyoruz. ARM mimarisinde çalışmak için Azure oturumunu açarken Login-AzureRMAccount ya da Add-AzureRmAccount, klasik mimaride Azure oturumunu açmak için de Add-AzureAccount cmdlet komutlarını kullanıyoruz. Biz ARM mimarisinde işlem yapacağımız için aşağıdaki şekilde de görüldüğü gibi Login-AzureRMAccount komutunu çalıştırıyoruz. Karşımıza aşağıdaki şekilde de görülen Çevrimiçi Oturum Açma Yardımcısı (Online Sign-in Assistant) ekranı gelecektir.
Azure abonelik hesabımıza ait bilgileri girdikten sonra Oturum Aç (Sign-in) butonuna tıklayarak oturuma açma sürecini tamamlıyoruz. Karşımıza bize ait abonelik özet bilgileri gelecektir:
Şimdi de kaynakları provizyonlamada kullanacağımız JSON şablon dosyasına ait hazırlıkları yapıyor olacağız. Öncelikle elimizde hazırlanmış bir JSON şablon dosyasının olması gerekiyor. Biz GITHUB portalındaki 101-vm-simple-windows şablonunu kullanacağız. Bu şablon dosyası ile ilgili aşağıdaki iki bilgiye ihtiyacımız var:
· Şablon dosyası konumu (TemplateFile ya da TemplateUri)
· Şablon parametre dosyası konumu (TemplateParameterFile ya da TemplateParameterUri)
Bu konumları almak için GITHUB portalında 101-vm-simple-windows şablonu içerisinden azuredeploy.json dosyası üzerine tıkladıktan sonra açılan aşağıdaki ekranda Raw butonuna tıklayarak JSON kodunu düz metin editörü biçiminde açıyoruz.
Oluşturmuş olduğumuz PowerShell Script dosyasında templatefileURI isimli degiskene bu yol tanımını değer olarak aşağıdaki şekilde atama yapıyoruz.
Tekrar 101-vm-simple-windows şablonu içerisindeki dosyalar listesinden bu kez azuredeploy.parameters.json dosyası üzerine tıkladıktan sonra açılan aşağıdaki ekranda Raw butonuna tıklayarak JSON kodunu düz metin editörü biçiminde açıyoruz.
Raw modda iken adres çubuğunda görüntülenen yol tanımı şablon dosyasını göstermektedir. Bu yol tanımını kopyalıyoruz.
PowerShell script içerisinde parameterfileURI isimli degiskene bu yol tanımını değer olarak aynı şekilde atama yapıyoruz.
Yukarıdaki değerlere ilave olarak kaynakları konumlandıracağımız veri merkezini “loc” değişkenine, kaynak grubu adını “rgname” değişkenine, sunucu adını da “deploymentName” değişkenine yukarıdaki şekilde atama yapıyoruz.
Eğer yeni bir kaynak grubu oluşturacaksanız da aşağıdaki komutun öncelikle çalıştırılması gerekir:
New-AzureResourceGroup -Name $rgname -Location $loc
Şimdi de bu değerleri kullanarak sanal sunucumuz provizyonlamak için gerekli komutu vermeye. Bu işlem için ARM mimarisinde New-AzureRmResourceGroupDeployment, klasik mimaride de New-AzureResourceGroupDeployment cmdlet komutlarını ilgili parametreleri ile aşağıdaki şekilde kullanacağız:
New-AzureResourceGroupDeployment -Name $deploymentname -ResourceGroupName $rgname –TemplateParameterUri $parameterfileURI –TemplateUri $templatefileURI
Eğer şablon dosyası GITHUB benzeri bir web platformunda ise TemplateUri ve TemplateParameterUri parametrelerini, yerel bilgisayarınızda bir konumda ise TemplateFile ve TemplateParameterFile parametreleri kullanılır.
Son durumda oluşan PowerShell komutlarımızı toplu olarak aşağıda görmektesiniz:
Artık kodlarımızı seçip çalıştırıyoruz:
Gelen ekranda Azure aboneliğimize ait hesap bilgilerini girerek oturum açma sürecini gerçekleştiriyoruz.
Provizyonlama tamamlandıktan sonra sanal sunucuya oturum açma bilgilerini kullanarak erişimi gerçekleştirebilirsiniz.
Benzer şekilde Azure Portalında ya da GITHUB portalında bulunan tüm JSON şablonlarını kullanarak çok karmaşık ve ileri seviye hem Windows tabanlı hem de Linux tabanlı altyapıları provizyonlayabilirsiniz.
SONUÇ
Bu makalemizde altyapıyı kod seviyesinde yönetmeye (Infrastructure as a Code) yönelik olarak ARM mimarisinde şablon kullanımını, şablon dosyasının hazırlanması ve şablon dosyaları kullanılarak kaynakların provizyonlanmasını ele aldık. Yeni bir makalemizde buluşmak üzere, sağlıcakla kalın.
Mesut ALADAĞ.
www.mesutaladag.com | @mesutaladag