Azure SQL Kurulumu Ve Powershell Kullanımı
Veri tabanlarımızın her zaman ulaşılabilir ve güvenli bir ortamda tutulmasını isteriz. HA, yönetilebilme ve kolay ölçeklendirilebilmesi temelde aranılan özelliklerdir. Tabii her güzel şey gibi bunun da bir fiyatı vardır. Böyle bir alt yapının kurulabilmesi için donanım, lisans ve en önemlisi yetkin insanlardan oluşan bir iş gücüne ihtiyaç duyulmaktadır.
Azure bu noktada bize “SQL Databases” çözüm sunmaktadır. Bu hizmet kendi içerisinde yedekli olmasının yanında alt yapıyla ilgili tüm sorunları kendisinin üstlenmesi, bize sadece SQL seviyesinde işlemlerimize odaklanmak kalmıştır.
Yine tüm Azure hizmetlerinde olduğu gibi portal kolay bir kullanım sunmaktadır ama Powershell daha geniş ve etkili bir yönetim aracı olmakta. Bu yazımda SQL servisinin temel özelliklerinden ve beğendiğim bir iki ince noktasından bahsetmek istiyorum.
İlk önce Azure portal’i üzerinden SQL Databases’e girip sol alt köşede bulunan “NEW” tuşuyla bir SQL oluşturalım.
“Data services” altında bulunan “SQL DATABASE” içerisinde ki “Custom create’i” seçelim. Eğer Azure içerisinde ki bir BLOB storage içinde hazır bir DB’miz varsa “İmport” ile de SQL servisimizi kurabiliriz.
Gelen yeni ekranda bilgilerimizi seçelim. Burada açıklanması gereken iki adet seçenek var. Service Tiers ve Performance level. Sevice Tiers size sunulan SQL servisinin seviyesini belirler. Her seviye size farklı yedekleme, HA, performans ve saatlik ücret sunmaktadır. Daha detaylı bilgileri şu sayfada bulabilirsiniz.
http://azure.microsoft.com/tr-tr/pricing/details/sql-database/#service-premium
Öbür seçenek ise yani performans level , sizi uygulama katmanında direk etkileyen bir parametredir. Azure size SQL’i bir plartform olarak sunduğundan dolayı size ayıracağı kaynakları(cpu,memory, disk IO, transaction oranı) DTU denilen bir birim cinsinden sunmaktadır. DTU hakkında daha geniş bilgiyi http://msdn.microsoft.com/library/dn741336.aspx adresinden alabilirsiniz. Aynı zamanda Azure SQL’in limitleri ve standartlarını öğrenmek için http://msdn.microsoft.com/en-US/library/ee336245.aspx adresini mutlaka ziyaret ediniz.
Şimdi yukarıda ki işlemleri bir de Powershell ile tekrar edelim. İlk önce yeni bir SQL sunucusu tanımlayalım unutmayalım ki her veri tabanı mutlaka bir SQL sunucusuna tanımlanmalıdır. Bunun için aşağıda ki komutu çalıştırabilirsiniz. Sunucu adını tamamen rastgele atıyor.
New-AzureSqlDatabaseServer -Location "East Asia" -AdministratorLogin "testSQL" -AdministratorLoginPassword "testPassword1"
Yarattığımız veri tabanı sunucusunun kullanıcısı “testSQL” şifresiyse “testPassword1” olarak atadık. Eğer adını öğrenmek istersek “Get-AzureSqlDatabaseServer” komutunu kullanarak görebiliriz. Sunucu adını tamamen rastgele atıyor ve şu anda bunu değiştiremiyoruz belki ileride bir özellikle daha kullanıcı dostu isimler verebiliyor olacağız. “Set-AzureSqlDatabaseServer” isimli bir komut bulunmakta ama maalesef şu an için tek yapabildiği yönetici şifresini değiştirebilmek.
Set-AzureSqlDatabaseServer -ServerName "add32ffsa" -AdminPassword "newPassword1"
Şimdi gelelim tanımladığımız sql sunucusu üzerinde veri tabanı oluşturmaya.
New-AzureSqlDatabase –ServerName “owbxmpsuug” -DatabaseName "testSQL" -Edition "Standard" -MaxSizeGB 30 –Collation SQL_Latin1_General_CP1_CI_AS
Daha önce yarattığımız veri tabanı sunucusu içerisinde testSQL isimli Standart tipinde bir veri tabanı oluşturduk ve bunun maksimum büyüklüğünü 30GB olarak ayarladık
Artık verita banımız kullanıma hazır. Bazı arkadaşlar veri tabanını yaratırken sunucusundan farklı bir kullanıcı adı ve şifreye sahip olmasını istiyorlar. Bunun için “-ConnectionContext” parametresini kullanabiliriz ama bu parametrenin kullanımı biraz çetrefilli. İlk önce bir obje içerisine yetkilendirme için kullanacağımız bilgileri girelim.
$username = "sqlUser" $password = “azurePass1” $cred = new-object -typename System.Management.Automation.PSCredential ` -argumentlist $username, $password
Objeyi yarattıktan sonra “New-AzureSqlDatabaseServerContext” komutunu kullanarak istediğimiz sunucu için Context’i oluşturalım, unutmayın veri tabanını hangi sunucuda yaratmak istiyorsak onu yazmamız lazım.
$cont = New-AzureSqlDatabaseServerContext -ServerName " owbxmpsuug" -credential $cred
Artık veri tabanımızı yaratabiliriz sadece “-ServerName” yerine “-ConnectionContext” yazmamız gereklidir.
New-AzureSqlDatabase –ConnectionContext $cont -DatabaseName "testSQL" -Edition "Standard" -MaxSizeGB 30 –Collation SQL_Latin1_General_CP1_CI_AS
Gördüğünüz gibi testSQL’i de yarattık.
Veri tabanlarını nasıl yaratacağımızı öğrendiğimize göre biraz özelliklerinden bahsetmek istiyorum. SQLTest’e tıklayalım ve en altta açılan panele bakalım.
Restore: Azure SQL servisi belli aralıklarla sizin için veri tabanınızı yedekler ve seçtiğimiz plana göre de bunları saklar. Basic için 7 gün, Standart için 14 gün, Premium içinse 35 gündür. Full database backup’ı haftada bir, differential backup’ı her gün ve her 5 dakikada birse transaction log almaktadır.
Restore ekranına bakarsak restore edilecek veri tabanının yeni ismini ve hangi noktaya döneceğimizi seçebiliriz . Bunu powershell ile yapmak için ilk önce hangi veri tabanının uygun olup olmadığına bakalım.
Get-AzureSqlRecoverableDatabase -SourceDatabaseName "SQLTest" -SourceServerName "owbxmpsuug" -TargetServerName " owbxmpsuug”
Veri tabanını kurtarabileceğimizi görüyoruz. Bu durumda aşağıda ki komutla kurtarma işlemini başlatabiliriz.
Start-AzureSqlDatabaseRecovery –TargetServerName "owbxmpsuug" –SourceDatabaseName "SQLTest" –TargetDatabaseName "SQLTest_Restore"
Tabii burada şu şekilde bir soru karşımıza çıkıyor. Biz kendimiz bir yedekleme politikası kurmak istersek nasıl hareket etmemiz gerekiyor. Kopyalamak istediğimiz veri tabanına gelip Copy’e basalım
Kopyalanacak veri tabanının ismini yazalım ve hedef sunucuyu seçelim. Bu işlemi powershell ile yaparsak ekstradan bir özelliğimiz daha oluyor. “-ContinuousCopy” parametresi ile bir veri tabanını başka bir sunucuya veya Azure veri merkezine kopyalayabiliyoruz.
Start-AzureSqlDatabaseCopy -ServerName " owbxmpsuug" -DatabaseName " SQLTest" -PartnerServer "bk0b3kdfs" –ContinuousCopy
Aynı zaman da Copy’nin ek bir faydasını daha gördüm, yazılımcılar veya QA ekipleri 12 saat veya 24 saat geriden gelen canlı veriyle çalışmak istiyorlardı. Ben bir zamanlanmış görev ile bu scripti “ContinuousCopy” olmadan çalıştırarak düzenli olarak bir veri tabanına kopyaladım.
Son olarak yarattığımız bir SQL’I nasıl güvenlik altına alabiliriz kısmına basitcene değinmem kaldı. Bunun için aynen VM’lerde olduğu gibi firewall kurallarından yaralanıyoruz. Veritabanı sunucusunu yarattığımız andan itibaren sunucu dışardan gelecek trafige kapalıdır. Bunun için öncelikle kendi ip’mize izin verelim.
New-AzureSqlDatabaseServerFirewallRule -ServerName " owbxmpsuug" -RuleName "SqlAllowRule" -StartIpAddress 192.168.1.12 -EndIpAddress 192.168.1.12
Burada tek bir ip adresine izin verdim ama bir ip aralığı da tanımlayabiliriz. Eğer bu sunucuyu dışarı değil sadece Azure içerisinde kullanacaksak, aşağıda ki komutta işimizi görecektir.
New-AzureSqlDatabaseServerFirewallRule -ServerName " owbxmpsuug " -AllowAllAzureServices
Bu yazımda sadece en çok kullandığım özellikleri yazdım AzureSQL’in birçok ilginç ve işe yarar özelliği bulunmaktadır ve mutlaka powershell ile ilgili sayfasını incelemenizi önermekteyim.Ben vakit buldukça diğer özelliklerini de sizinle paylaşacağım.