Azurite: Bilgisayarınızdaki Azure Servisi

Azurite Docker Konteyner Ayarları ve Örnek Kod Parçası

Adem Catamak
3 min readJan 20, 2024

You can access the English version via this link.

Yazılım geliştirme sürecinde farklı araçlar ve platformlar kullanmaktayız. Kimi zaman veri saklamak için kimi zaman önbellekleme ihtiyacımızı karşılamak için araçları geliştirme yaptığımız ortama kurmaktayız. Docker gibi bir araç sayesinde de kurulum süreçlerini oldukça kısa sürede ve sorunsuz şekilde tamamlamaktayız.

Bu yazıda dosya işlemleriyle karşılaştığımız zaman en sık kullanılan araçlardan biri olan Microsoft Azure Blob Storage servisini kendi bilgisayarımızda Docker kullanarak nasıl oluşturabileceğimizi göreceğiz.

Not: Bu yöntemi kullanarak Queue Storage ve Table Storage servislerini de yerel bilgisayarınızda çalıştırabilirsiniz. Bu GitHub linki üzerinden örnek projeye ve docker-compose dosyasına ulaşabilirsiniz.

Photo by Ruchindra Gunasekara on Unsplash

Azurite Nedir?

Azurite açık kaynak kodlu olarak geliştirilmiş bir emülatördür. Bu emülatör aracılığıyla Blob Storage, Table Storage ve Queue Storage gibi depolama birimlerini yerel ortamınızda deneme imkanına sahip olmaktasınız.

Azurite Nasıl Kurulur?

Bu link üzerinden Azurite’ın farklı kurulum yöntemlerine erişebilirsiniz. Ben DockerHub üzerinden image indirerek uygulamayı ayaklandırma yöntemini kullandım.

docker run işlemi sırasında port bilgilerini tekrar tekrar vermemek için de docker-compose dosyasını aşağıdaki gibi ayarlayabilirsiniz.

# Username: devstoreaccount1 
# Password: Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==

version: "3.4"

services:

default-azurite:
container_name: default-azurite
image: mcr.microsoft.com/azure-storage/azurite:3.27.0
expose:
- 10000
- 10001
- 10002
ports:
- "10000:10000"
- "10001:10001"
- "10002:10002"
volumes:
- default-azurite-volume:/data mcr.microsoft.com/azure-storage/azurite

volumes:
default-azurite-volume:

Depolama Ortamıma Arayüzle Nasıl Erişebilirim?

Bu linki kullanarak kullandığınız işletim sistemine göre Microsoft Azure Storage Explorer uygulamasını indirebilirsiniz. Bu uygulama aracılığıyla depolama alanlarını görebilir ve yönetebilirsiniz.

Bonus: Örnek Kod Parçası ile Dosya Yükleme İşlemi

dev, stage, prod gibi farklı ortamlarda farklı değerler kullanacağımı göz önüne alarak depolama alanına erişim için kullanacağım bilgileri appsettings.json içerisine aşağıdaki gibi yerleştiriyorum.

"AzureBlobServiceConfig": {
"BaseUrl": "http://localhost:10000/devstoreaccount1/",
"AccountName": "devstoreaccount1",
"Password": "Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw=="
}

Azure.Storage.Files.DataLake ve Microsoft.Extensions.Azure nuget paketlerini projeme ekliyorum.

Bağımlılıkları yönettiğim uygulama başlangıcı kısmında aşağıdaki kod parçasını kullanıyorum. Bu şekilde Azure Blob Service bağlantı ayarlarını tek yerden yönetmiş oluyorum.

AzureBlobServiceConfig azureBlobServiceConfig = configuration.GetSection("AzureBlobServiceConfig").Get<AzureBlobServiceConfig>();
services.AddAzureClients(builder => { builder.AddBlobServiceClient(azureBlobServiceConfig.BaseUrl, new StorageSharedKeyCredential(azureBlobServiceConfig.AccountName, azureBlobServiceConfig.Password)); });

// Custom Class
services.AddScoped<IBinaryStorageService, AzureBlobService>();

AzureBlobService’nin yaratıcı metodu içerisinde verileri saklayacağım konteyneri olusturuyorum.

public AzureBlobService(BlobServiceClient blobServiceClient)
{
_blobContainerClient = blobServiceClient.GetBlobContainerClient(ContainerName);
_blobContainerClient.CreateIfNotExists();
}

Bu noktadan sonra konteyner içerisine istediğim bilgileri yerleştirebilirim. Not defteri (notebook) örnek projesinde görebileceğiniz kod parçasını buraya koyacağım. Bu kod parçası verilen bir dosya yoluna verilen yazıları saklamaktadır.

public async Task<Uri> PutContentAsync(string path, string content, CancellationToken cancellationToken)
{
BlobClient blobClient = _blobContainerClient.GetBlobClient(path);

await using Stream stream = await blobClient.OpenWriteAsync(true, cancellationToken: cancellationToken);
await using var writer = new StreamWriter(stream);
await writer.WriteAsync(content);
await writer.FlushAsync();

return blobClient.Uri;
}

Azurite nedir ve yerel ortamda kolayca nasıl kurulabilir konularına kısaca bir göz atmış olduk. Umarım yararlı bir yazı olmuştur. Diğer yazılarıma göz atmak için bu linke tıklayabilirsiniz.

--

--