Microsoft Azure Storage #S1B1

Cihat Solak
lTunes Tribe
Published in
9 min readMay 1, 2022

Azure, günümüzün sorunlarını çözmek ve geleceği şekillendirmek üzere yeni çözümleri hayata geçirmemize yardımcı olacak şekilde tasarlanmış 200’den fazla ürün ve cloud hizmetinden oluşur. Hizmetlerinden biri olan Azure Storage, verilerimizi depolamak için sunulmuş cloud çözümüdür.

Microsoft Azure Storage

Anladım, Azure Storage Bana Neler Sağlıyor?

  • 💪🏽 Dayanıklılık (Durable): Günümüzün en önemli konularının başında verinin güvenliği geldiğine göre ilk tercih sebebi verilerin güvenliği olabilir. Azure Storage, sürücünün bozulması ya da bölgesel felaketlerde (tabii ki seçimlerinize bağlı olarak) verilerin güvenliğini sağlar. Ayrıca kaydedilen verileri korunaklı ve geri teslimi garanti edecek şekilde depolar. Örneğin kullanıcıdan alınan verileri sanal makinenin harddisk’inde tuttuğumuzda harddisk’in arızalanması durumunda ağrımaz başa çaput sararız. Bu tür senaryolara karşı azure storage, depoladığımız her veriyi tercih bağımsız minimum 3 kopyayla birlikte tutar. Neden 3 kopya? Çünkü Azure’da tutulan verinin herhangi bir kopyasında problem olması durumunda azure devreye girerek diğer kopyalardan veriye ulaşmamızı sağlar. İşin özünde dayanıklı veri tutmamıza imkân sağlıyor.
  • 👮🏽‍♂️ Güvenli (Secure): Storage içerisinde depolanan her türlü veri mutlaka 256 bit ile şifrelenir (encode) daha sonra deşifre (decode) edilir. Buradaki şifreleme konusu opsiyonel değildir, kapatılamaz.
  • 🏹 Ölçeklenebilir (Scalable): Günümüzde ölçeklenebilirliğin tercih sebebi değil de, zorunluluk olduğunu düşündüğümden ötürü her daim şahsım adına önem arz ediyor. Ölçeklenebilirlik ve azure’un ilişkisi nedir? Azure storage ölçeklenebilirlik konusunda depoladığım herhangi bir veriye aynı anda 200 kez erişilmeye çalışıldığında da 20.000 kez erişilmeye çalışıldığında da aynı süre içerisinde cevap döneceğini söyler. Standart bir sanal makinede ise ölçeklenebilirlik dediğimiz konu manuel olarak ayarlanır fakat azure storage bunu kendi içerisinde halletmektedir. Günün sonunda aynı veriye 1 saniyede 1.000.000 istek (request) sağlasanız da veya saniye içerisinde 10 kez istek (request) sağlasanız da aynı süre zarfında response döneceğinin garantisini verir.
  • 🌍 Accessible (Erişilebilir): Ölçeklenebilirliğin önemi olduğu kadar erişilebilirlikte bir o kadar önem arz etmektedir. Storage içerisinde depolanan her veri her yerden erişilebilir durumdadır. Eğer ihtiyaç halinde erişim kısıtı sağlamak istiyorsak bu da mümkündür. Örneğin özel olarak birkaç API adresinden erişim sağlamak istiyorum şeklinde kural seti oluşturulabilir veya CORS ayarlarını aktif hale getirebiliriz.

Storage Derken? Neleri Kapsıyor?

Azure Storag e- File & Queue & Table & Blob
Azure Storag e— File & Queue & Table & Blob

Table Storage (NoSQL)

Senaryoya göre değişkenlik gösterebilir fakat bazı zamanlar RDBMS dediğimiz ilişkisel veri tabanlarının yanı sıra verilere hızlı erişmek adına yarı yapılandırılmış dosyalar (özünde ilişkisel olmayan ebeveyn-çocuk (parent-child) ilişkisine dayalı veriler) kullanmaya ihtiyacımız olabilir. Bu ihtiyaca binaen de yarı yapılandırılmış dosyaları table storage aracılığı ile depolayabiliriz. Şöyle ki, ilişkisel veri tabanı (RDBMS) dışında NoSQL (MongoDB, Cassandra, ElasticSearch, Amazon DynamoDB, HBase vb.) türevi veri tabanına ihtiyacımız olduğunda ve elimizde de alternatif olarak table storage değerlendirilebilir. Table’da tutulan veriler anahtar-değer (key-value) şeklinde tutulduğundan ayrıca indexlendiğinden dolayı okuma/yazma oranına da iyi yönde etkilemektedir. Eğer hali hazırda azure storage kullanıyorsak MongoDB, DynamoDB veya türevi veri tabanı kullanmak yerine eğer ihtiyacımızı karşılıyorsa table storage kullanmayı düşünebiliriz.

Blob Storage (Binary)

Dosya depoladığımız hizmettir. Blob, dosyaları binary (stream, byte[]) olarak aldığından ötürü içerisine herhangi türde dosya/lar (.mp3, .jpeg, .pdf, .xls) kaydedebiliriz. İşlev olarak da blob servisi kendisine gelen byte dizinini blob dediği yapılara eş zamanlı yazıp/okuduğu için çok hızlı şekilde dosya kaydedip, okuyabiliyor.

Queue Storage (Message Broker)

Mesaj kuyruk sistemidir fakat mesaj kuyruk sistemi nedir? Mesaj kuyruk sistemi birden fazla uygulamanın zaman uyumsuz şekilde birbiriyle haberleşmesine olanak sağlayan tekniklerden biridir. Örneğin X ve Y adında iki farklı sistemimiz olduğunu düşünelim. X sistemi oluşturduğu veriyi azure storage’da bulunan queue’ye gönderiyor. Queue ise X sisteminin kendisine göndermiş olduğu veriyi tutuyor. Haliyle kuyruğu dinleyen Y sistemi kuyruğa mesaj geldiği vakitte gelen mesajı ilgili şekilde işliyor. Özünde iki farklı sistemi birbirine bağlayan işleve sahiptir.

Table storage’in alternatifi olduğu gibi Queue’nun da sektörde fazlaca popüler alternatifi bulunuyor. Örneğin RabbitMQ, Kafka, ActiveMQ, Redis, ZeroMQ gibi. Tabii ki sektördeki alternatiflerine göre Azure Queue daha basit yapıdadır. Microservis yapı kullanıyorsak ve azure storage’a sahipsek, servislerimiz arasındaki iletişimde ekstra RabbitMQ kullanmak yerine eğer ihtiyacımızı karşılıyorsa Azure Queue servisini de değerlendirebiliriz.

File Storage (File Sharing)

Bu servisi Yandex Disk, Google Drive, One Drive gibi nitelendirebiliriz. Gerçek hayat senaryosu ile bağdaştıracak olursak örneğin Azure üzerinde 7–8 adet sanal makineye sahip olduğumuzu düşünelim. Her sanal makinede uygulamaların çalıştığını ve tüm uygulamalarımız için ortak dosya paylaşımına ihtiyacımız olduğunu varsayalım. File storage servisini burada devreye alabiliriz. Çünkü sanal makinelere oluşturduğumuz file servisi bağlarız (mount). Bağladıktan sonra sistemde bulunan C, D sürücüleri gibi belirleceğimiz harfde file storage servisiyle ilişkili sürücü oluşturabiliriz. (Bir sonraki içeriklerde örnek oluştur) Bu sürücü tercihe göre SSD (Solid state disk) ya da HDD (Manyetik sürücü) olabilir.

Gün sonuna baktığımızda bir uygulama oluştururken blob servisine ihtiyacımız varsa table veya queue servisine de ihtiyacımız olabilir. Azure, ihtiyaçların tamamını Azure Storage altında tek kalemde birleştirip (Table, Blob, Queue, File) hizmete sunmuş. Maliyet konusunda ise her biri için ayrı şekilde değil de, hangi servisi ne kadar kullanırsak (Pay as you go) ödemeyi o şekilde yapıyoruz.

Peki, Azure Storage Hesabı Nasıl Oluşturulur?

Azure storage hesabı oluşturabilmek için azure hesabı, azure hesabı oluşturmak için microsoft hesabına ihtiyacımız vardır. Azure Portal adresini ziyaret edelim.

Azure Portal
Azure Portal

New to Azure? Start free seçeneğinden ilerleyelim. Bu arada azure portal hesabı açtığınızda azure servislerini keşfetmemiz amacıyla hesabımıza 200 dolar kredi tanımlanıyor. Buradaki fiyat konusundan şüphe duymaya gerek yok. Çünkü dilersek 10–20 TL’yi geçtikten sonra bana e-posta gönder gibi uyarı tanımlayabiliriz. Ayrıca ücretsiz tanımlanan kredi bittiğinde dahi 40 dan fazla servisi ücretsiz şekilde kullabiliriz.

Kayıt işlemleri sıradan işlemler olduğu için hızlıca kayıt olduğunuzu düşünüyorum ve azure portal’a giriş yaptığınızı varsayıyorum. Storage hesabı oluşturup adımları birlikte inceleyelim.

Azure Portal — Storage Accounts
Azure Portal — Storage Accounts
Azure Portal — Create Storage Account
Azure Portal — Create Storage Account
Azure Portal — Storage Account Review + Create
Azure Portal — Storage Account Review + Create

Kayıt esnasında karşımıza çıkan seçenekleri değerlendirelim.

📆 Resource Group (Kaynak Grubu): Servisleri gruplayıp yönetimini rahatlatmak için aranan nimet. Amaç birden fazla servisi tek bir grup altında toplamak.

🌎 Region (Bölge): Türkiye’ye yakın olması amacıyla batı avrupa (West Europe) tercih edilebilir. Seçilen bölgeye göre verinin hangi bölgede ki veri merkezinde (data center) tutulacağına dair lokasyonu belirlemiş oluyoruz.

💥 Performance (Performans): Standart seçimde veriler HDD (Manyetik diskte), Premium da ise SSD (Solid state disk) diske kayıt edilir. Maliyet göz önünde bulundurulmalıdır.

💾 Redundancy (Yedeklilik): Verilerin ne şekilde tutulacağıyla ilgilenir. Birden fazla seçeneği mevcuttur.

  • Locally-redundant storage (LRS): Minimum seviyede kopyalama senaryosudur. Bu seçenekte veriler seçilen bölgenin (region) veri merkezinde 3 kopya şeklinde tutulur. Yani veriler bir veri merkezi içerisinde minimum 3 kopya şeklindedir. Bu kopyalardan birine herhangi bir nedenden dolayı erişilemediğinde azure diğer sürücülerden veriyi temin edip döner. Bu seçeneğin dezavantajı ise veri merkezi işlev dışı kalırsa verilere erişilemez olacağından dolayı erişim garantisi verilmez.
  • Zone-redundant storage (ZRS): Verinin birden fazla veri merkezinde (data center) kaydedilmesini talep ediyorsak tercih edilebilir. Bir üstteki seçenekte tek bir veri merkezinde tutulduğundan güvenliği garanti edilemez durumundaydı. Bu seçenekte ise veriler aynı bölgede fakat birden fazla veri merkezinde 3 kopya olarak tutuluyor. Burası kritik tekrar etmekte fayda var. Birden fazla veri merkezinde tutuluyor fakat aynı bölge içerisinde. Bir üsttekine göre avantajı birden fazla veri merkezinde tutulması, dezavantajı ise bölgesel bir felaket olduğunda örneğin Fransa/Paris’deki tüm veri merkezlerinde problem olduğunda verilere ulaşılamamasıdır.
  • Geo-redundant storage: (GRS): Verilerin birden farklı bölgede, örneğin veriler Fransa/Paris veri merkezinde tutuluyorken aynı zamanda Kore/Seul veri merkezinde de tutulmasıdır. Böylece bölgesel problemlerin önüne geçmiş, ülke genelinde problem olsa dahi diğer bölgelerden verilere erişim sağlayabiliriz.
  • Geo-zone-redundant storage: (GZRS): Bir üsttekine benzer olarak veriler farklı bölgelerde tutulmaktadır. Örneğin veriler Fransa/Paris ve Kore/Seul’da tutulduğunu düşünelim. Kore/Seul da tutulan veri aynı zamanda Kore içerisin de de birden farklı veri merkezinde muhafaza ediliyor. Özetle bir üstteki farklı bölgelerde tek bir veri merkezinde tutuluyorken bu seçenekte farklı bölgelerde ve farklı veri merkezlerinde tutulmaktadır.

Local: Tek bir veri merkezinde 3 kopya muhafaza edilmesi

Zone: Birden fazla veri merkezinde 3 kopya olarak muhafaza edilmesi

Geo: Birden farklı bölgede verilerin muhafaza edilmesi

Geo-zone: Birden farklı bölgede birden farklı veri merkezinde verilerin muhafaza edilmesi

Buradaki kopya sayısı azaltılamaz. En düşük seçeneği dahi seçmiş olsanız bile azure bir veri merkezinde 3 kopyayla beraber tutar. Benim oluşturmuş olduğum storage hesabının görüntüsü aşağıdaki gibidir.

Azure Portal — Created Storage Account
Azure Portal — Created Storage Account

Azure Software Development Kit (SDK) & Azure Storage Explorer

Azure SDK: Sağlamış olduğu hazır şablonlarla, azure servislerine daha efektif ve basit şekilde geliştirme yapmamıza imkân veren araçtır. SDK’yı installer aracılığıyla visual studio ortamında kurulumunu gerçekleştirebiliriz.

Visual Studio Installer — Azure SDK
Visual Studio Installer — Azure SDK

Azure Storage Explorer: En başından beri azure’un kullandıkça öde mantığından bahsetmiştik. Şöyle düşünecek olursak geliştirme esnasında fazlaca test işlemi gerçekleştireceğiz. Eğer ki test işlemleri için cloud storage’ı kullanırsak günün sonunda illa ki bir ücret ödeyecektiriz. Haliyle geliştirme esnasında cloud storage’ı kullanmak yerine local storage oluşturup, tamamen geliştirme esnasında kullanabileceğimiz ortam yaratabiliriz. (Bunu birazdan docker ile sağlayacağız.) Tabii local storage oluşturabilmek için ise kısmi olarak Azure Storage Explorer’a ihtiyacımız var. Sadece bununla kalmıyor dilersek cloud’daki storage hesabımızı da Azure Storage Explorer’a bağlayabilir, azure portal’a uğramadan storage yönetimini sağlayabiliriz. Development işlemleri tamamlandıktan sonra key değiştirerek cloud ortama hızlı şekilde geçiş yapabiliriz.

Azure Storage Explorer
Azure Storage Explorer

Uygulamanın kurulumu çok basit (next, next, next…) olduğu için bu kısma değinmiyorum. Azure Storage Explorer adresinden uygun işletim sistemini seçip, indirebilirsiniz.

Azure storage explorer kurulumunu tamamladık. Şimdi ise local storage oluşturup devam edeceğiz. Bu kısımda Docker bilginiz olduğunuzu varsayıyorum. Eğer bilginiz yoksa sizi 5 bölümden oluşan docker serüvenimin birincisi olan Mavi Balina — Docker #S1B1 başlıklı içeriğime davet ediyorum.

Docker Hub üzerinden Azurite image’ini öncelikle pull docker pull mcr.microsoft.com/azure-storage/azurite ediyoruz. Image’i pull ettikten sonra bir container ayağa kaldırmamız gerekiyor. docker run --name AzureStorageContainer -p 10000:10000 -p 10001:10001 -p 10002:10002 mcr.microsoft.com/azure-storage/azurite komut şeması ile container ayağa kaldırıyor ve işin büyük bir kısmını halletmiş oluyoruz.

  • Image İndirme: docker pull mcr.microsoft.com/azure-storage/azurite
  • Container Ayağa Kaldırma: docker run --name AzureStorageContainer -p 10000:10000 -p 10001:10001 -p 10002:10002 mcr.microsoft.com/azure-storage/azurite
Azurite — Docker
Azurite — Docker

Local ortam için docker üzerinde container oluşturduğumuza göre artık local storage’ımıza azure storage explorer aracılığıyla bağlantı kurmanın vakti geldi demektir. Storage Explorer’ı açıp sol menüden fiş ikonu aracılığıyla “Local storage emulatör” seçeneğini seçiyoruz.

Local Storage Emulator — Azure Storage Explorer
Local Storage Emulator — Azure Storage Explorer
Connect to Azure Storage — Azure Storage Explorer
Connect to Azure Storage — Azure Storage Explorer

Bu kısımda yer alan portlara dikkat etmeliyiz. İçeriğin en başında container ayağa kaldırken belirlemiş olduğumuz portlar ile eş olmalıdır, aksi halde bağlantı kuramayız.

Portların amacı şöyle ki, sahip olunan blob, queue, table, file servisleri birer endpoint’e sahiptir. Günün sonundan herhangi bir yerden bu endpointler aracığıyla işlem sağlayabiliriz. Örneğin table’a CRUD operasyonlarınu bu endpointler üzerinden gerçekleştirebiliriz. Tabii ki biz bu endpointler yerine, endpointlerin sarmallaşmış hali olan ve kurulumunu sağlamış olduğumuz Azure SDK üzerinden iletişime geçeceğiz. Tabii ki SDK’lar sadece azure storage servisi özelinde değil tüm azure servisleri için mevcuttur. Ayrıca bahsi geçen SDK’lar sadece C# diline de özgü değil, Java, Node.js, Pyhton, Go gibi diller içinde mevcuttur. Endpointler üzerinden iletişime geçmek zahmetli ve ekstra geliştirme gerektirdiğinden SDK’lar can yeleği gibidir.

Development — Azure Storage
Development — Azure Storage

İşte karşınızda geliştirme ortamına ait azure storage. Birde Explorer üzerinde canlı cloud storage’ımıza bağlantı sağlayalım. Canlı cloud ortamı için yeniden menü üzerinden fiş ikonuna tıklayıp “Storage account or service” seçeneğine tıklayalım.

Storage account or service — Azure Storage Explorer
Storage account or service — Azure Storage Explorer
Connection string (Key or SAS) — Azure Storage Explorer
Connection string (Key or SAS) — Azure Storage Explorer
Enter Connection Info — Azure Storage Explorer
Enter Connection Info — Azure Storage Explorer
Summary — Azure Storage Explorer
Summary — Azure Storage Explorer

Canlı ortamdaki cloud storage’ını azure storage explorer’a başarılı şekilde dahil ettiysek son durumda şu fotoğrafı yakalamamız gerekmektedir.

Dev & Prod — Azure Storage Explorer
Dev & Prod — Azure Storage Explorer

Özetleyecek olursak cloud’daki storage’larımızı Azure storage explorer’a dahil ettik. Aynı zamanda geliştirme esnasında ücretsiz kullanabilmek adına local storage oluşturduk ve bunun için docker container ayağa kaldırdık. Prod ortama çıkarken sadece connection string’i değiştirmemiz gerektiğine değindik. Dipnot: Cloud ortamdaki connection string’e ulaşabilmek için storage hesabınızın detayına gittikten sonra sol menüde yer alan Access Keys’den temin edebilirsiniz.

#S1B2 bölümünde görüşmek üzere. Wir Sehen Uns 😎

--

--