Azurite: Bilgisayarınızdaki Azure Servisi
Azurite Docker Konteyner Ayarları ve Örnek Kod Parçası
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.
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.