Azure Storage Services – Part 2:Blob Storage

Önceki makalemizce Azure Depolama Hizmetleri’ni kullanmak için gerçekleştirilmesi gereken ilk adımın Depolama Hizmeti oluşturmak olduğunu incelemiştik. İki farklı depolama hizmeti içerisinde sunulan özellikler de farklıydı. Şu an için daha çok kullanıma sahip olan Standard Storage Account oluşturulduğu takdirde Blob, Queue, Table gibi farklı depolama özelliklerine sahip olunabiliyor. Bu makalemizde en sık kullanılan opsiyonlardan olan Blob Storage’i inceliyor olacağız.

Azure Blob Storage genellikle yapılandırılmamış verileri barındıran ve HTTP/HTTPS protokolü üzerinden erişim imkanı veren bir hizmettir. Uygulamanız içerisinde bulunan text dosyaları, resim dosyaları, video yada ses dosyaları boyutlarından bağımsız olarak Blob Storage içerisinde barındırılabilir.

Azure Blob Storage ile birlikte iki kaynak erişime açılır.

Containers: Konteynırlar birden fazla blob’un gruplandırılması ile oluşur. Günün sonunda elinizde bulunan yapılandırılmamış verinin her biri (text dosyası, imaj dosyası, video dosyası) aslında bir blob’dur ve bir container içerisinde yer alması gerekmektedir.

Blobs: Blob ise yukarıda bahsettiğimiz gibi farklı türlerde de olabilen verinin her birine verilen isimdir. Azure Storage hizmeti üzerinde ise iki tip blob bulunmaktadır.

  • Block Blob: Genellikle paralel yüksek boyuttaki verilerin upload edilmesi senaryolarında efektif olarak kullanılacak şekilde tasarlanmıştır. Block Blob ları her biri farklı Block ID lere sahip blocklardan oluşmuştur. Maksimum 4MB olan bu blocklar maksimum değeri 200 GB olabilen Block Blobları oluşturur. Her biri MD5 ile hashlanemiş yüksek boyuttaki blocklar network üzerinden paralel şekilde upload edilebilir. Aynı zamanda upload işlemi izlenebilir, kesinti olan yerden tekrardan devam ettirilebilir. Özellikle streaming senaryolarında da sıklıkla kullanılır. Blocklara bölünmüş dosyalar upload işlemi sonrasında tek bir dosya haline getirildiğinden önemli bir performans kazancı sağlanır.

 

  • Page Blob: Blob üzerinden random read/write işlem gereksinimi olan senaryolardan Page Blob kullanımı önerilir. Oluşturulurken kendisine bir maksimum değer atanır ve oluşturulduktan sonra içerisine page eklenmesi gerçekleştirilebilir. Page blob için maksiumum boyut 1TB olarak belirlenmiştir. Özellikle random read/write işlem gereksinimi duyan Azure sanal makineler Page Blob üzerinde tutulur. Önceki makalelerde bahsettiğimiz Premium Storage Account da aynı şekilde sanal makineleri Page Blob mimarisi üzerinde tutar.

Yukarıdaki blob seçimini şu örnekle de açıklayabiliriz. Örneğin yerel ortamınızda büyük birkaç adet sanal disk var ve bu diskleri hızlı ve güvenilir şekilde Azure Storage üzerine aktarmak sonrasında da Azure sanal makine olarak kullanmak istiyorsunuz.

Bu noktada yüksek boyutlu dosyaların paralel şekilde upload edilmesi için Block Blob kullanılması önerilir. Ancak bu dosyalar sanal makine olarak kullanılacak ve random read/write talepleri olacağı için Page Blob üzerinde hayatına devam etmesi önerilmektedir.

Azure Storage Account oluşturulduktan sonra bir adet Blob hizmeti varsayılan URL formatı ile hizmete sunulur.

image

Örneğin blob içerisine atılmış olan bir resime erişim aşağıda şekilde gerçekleştirilir.,

https://anilblob.blob.core.windows.net/resimler/Image1.PNG

Yukarıdaki blob URL adresine bakıldığında anilblob isimli bir depolama hesabı içerisindeki blob hizmetinde, Resimler isimli container altında Image1.PNG dosyası bulunduğu anlaşılabilir.

Yukarıda bahsettiğimiz gibi Blob Storage içerisindeki dosyalara erişim yapılması için mutlaka en az bir adet container’a sahip olunması gerekmektedir. Varsayılan hesap içerisinde bir container gelmez ve sizin ilk container oluşturma işlemini gerçekleştirmeniz gerekmektedir.

image

Yeni bir container oluşturmak için “Create A Container” linkine tıklanır.

image

Görüldüğü gibi container için bir isim verilir ve erişim yöntemi seçilir. Erişim yöntemi özellike uygulamalarınızda dikkatli yapılandırmanız gereken bir ayar olacaktır. Blob Storage içerisindeki container lar için üç farklı erişim yöntemi bulunmaktadır.

Private: Bu erişim yönteminde container içerisinde bloblara yalnızca depolama hesabı sahibi erişebilir.

Public Container: Bu erişim yöntemi ile hem container’ın kendi özellikleri için hem de container içerisinde yer alan bloblar için public read erişimi verilir.

Public Blob: Bu erişim yöntemi ile yalnızca container içerisinde yer alan bloblar için public read erişimi verilir.

Oluşturulan container aşağıdaki gibi görüntülenir.

image

Bir sonraki adım ise bu container içerisine istenilen blobların gönderilmesidir. Bu işlem için makale serisinin devamında farklı yöntemleri (.NET, PowerShell, Ruby vb) kullanıyor olacağız.

Oluşturulan container içerisinde sanal makine diskleriniz yada size/uygulamalarınıza ait verileriniz yüklenebilir, değiştirilebilir yada silinebilir. Bunun dışında ek bir güvenlik katmanı olarak Blob Snapshot kullanılabilir.

Blob Snapshot ile istenilen bir blob’un o anlık kopyası alınabilir. Örneğin PowerShell ile

$snapshot = $blob.CreateSnapshot()

komutu kullanılarak istenilen blob için snapshot alınabilir. Tabii ki öncesinde $blob değişkeni için storage account, key, credentials ve blob bilgisi verilmesi gerekiyor. Bu detaylara ilerleyen yazılarda değineceğiz.

Snapshot alımında dikkat etmeniz gereken en önemli unsur bu snapshotların Azure fiyatlandırmasına nasıl yansıyacağıdır. Bunun için http://msdn.microsoft.com/en-us/library/azure/hh768807.aspx adresinin incelenmesi önemlidir.

Yukarıda bahsettiğimiz gibi Blob hizmetinde yetkilendirme yapmak için container bazında read hakkı tanımı yapabiliyorduk. Ancak uygulamanız içerisinde istemcilerinizin blob storage üzerine veri yazmak istemesi durumunda Depolama Hesabınız ile oluşturulan erişim anahtarları kullanmanız yada istemcilere bu anahtarları dağıtmanız gerekmektedir.

Örneğin client kurulumu gerçekleştirilecek bir uygulama dizayn ettiniz ve client belirli periyodlar ile dosyaları blob storage içerisine yazmak durumunda. Böyle bir durumda client ile birlikte depolama hesap erişim anahtarınızı da vermeniz gerekmektedir.

Ancak depolama anahtarı yazma erişimi dışında bu şekilde dağıtılamayacak seviyede kritik aksiyonların alınabileceği bir güvenlik kilididir. Bu kilide sahip olan kişi hem hesap üzerinde hem de hesap altında bulunan tüm container ve bloblar üzerinde yetkilere sahip olacaktır.

İşte bu soruna çözüm olarak Microsoft Azure üzerinde Shared Access Signature özelliğini sunmaktadır. SAS sayesinde depolama hesabı erişim anahtarları verilmeden istenilen istemcilere kaynaklar üzerinde yetkilendirmeler verilebilir. SAS sizin istediğiniz kaynak için özel bir URI adresi oluşturur ve parametreler ile de erişim detaylarını belirtir.

Aşağıda oluşturulmuş bir SAS URI ve parametre detaylarını inceleyebilirsiniz:

https://myaccount.blob.core.windows.net/sascontainer/sasblob.txt?sv=2012-02-12&st=2013-04-29T22%3A18%3A26Z&se=2013-04-30T02%3A23%3A26Z&sr=b&sp=rw&sig=Z%2FRHIX5Xcg0Mq2rqI3OlWTjEg2tYkboXr1P9ZUXDtkk%3D

URI içerisinde bulunan parametreler: Blob URI, Storage Service sürümü, başlangıç zamanı, bitiş zamanı, sr=b ile kaynağın blob olduğunun belirtilmesi, sp=rw ile read ve write yetkilerinin verilmesi ve son olarak sig= ile signature atamasının gerçekleştirilmesi.

Görüldüğü gibi SAS sunduğu esneklik sayesinde hem farklı yetkileri hem container hem blob bazında vermenizi sağlar hem de bu yetkilerin ne zaman başlayıp ne zaman biteceğine dair parametre vermenize imkan sağlar. Bu sayede istemci yalnızca kendisine verilen SAS URI ile aksiyonlarını kendisine tanınan izinler dahilinde gerçekleştirebilir.

PowerShell dahil farklı yöntemler ile SAS oluşturabilir ve yetkilendirme işlemleri gerçekleştirilebilir.

New-AzureStorageContainerSASToken -Name resimler_test -Permission rwdl

Yukarıdaki komut ile resimler_test container özelinde full erişim yetkisi tanımlanmıştır. Blob için SAS anahtarı ise aşağıdaki komut ile oluşturulabilir.

New-AzureStorageBlobSASToken -Container test -Blob resim.jpg -Permission rwd

Aynı komut aşağıdaki parametreler sayesinde ilgili anahtarın ne kadar geçerli olabileceğini de belirleyebilir.

$startTime = Get-Date$endTime = $startTime.AddHours(3.0)New-AzureStorageBlobSASToken
-Container test -Blob resim.jpg -Permission rw -StartTime $startTime -ExpiryTime $endTime

Benzer anahtarı C# ve Azure Storage Client Library for .NET ile oluşturmak için aşağıdaki makale incelenebilir.

http://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-shared-access-signature-part-2/

One thought on “Azure Storage Services – Part 2:Blob Storage

Leave a Reply

Your email address will not be published. Required fields are marked *

83 + = 89