.NET ile blob anlık görüntüsü oluşturma ve yönetme
Anlık görüntü, bir blobun belirli bir noktada alınan salt okunur bir sürümüdür. Bu makalede,.NET için Azure Depolama istemci kitaplığını kullanarak blob anlık görüntülerinin nasıl oluşturulacağı ve yönetileceğini gösterilmektedir.
Azure Depolama'daki blob anlık görüntüleri hakkında daha fazla bilgi için bkz . Blob anlık görüntüleri.
Önkoşullar
- Azure aboneliği - ücretsiz bir abonelik oluşturun
- Azure depolama hesabı - depolama hesabı oluşturma
- İşletim sisteminiz için en son .NET SDK'sı . Çalışma zamanını değil SDK'yi aldığınızdan emin olun.
Ortamınızı ayarlama
Var olan bir projeniz yoksa, bu bölümde bir projenin .NET için Azure Blob Depolama istemci kitaplığıyla çalışacak şekilde nasıl ayarlanacağı gösterilir. Adımlar arasında paket yükleme, yönergeler ekleme using
ve yetkili istemci nesnesi oluşturma yer alır. Ayrıntılar için bkz. Azure Blob Depolama ve .NET'i kullanmaya başlama.
Paketleri yükleme
Proje dizininizden komutunu kullanarak dotnet add package
Azure Blob Depolama ve Azure Identity istemci kitaplıkları için paketleri yükleyin. Azure hizmetlerine parolasız bağlantılar için Azure.Identity paketi gereklidir.
dotnet add package Azure.Storage.Blobs
dotnet add package Azure.Identity
Yönerge ekleme using
Kod dosyanızın en üstüne şu using
yönergeleri ekleyin:
using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Azure.Storage.Blobs.Specialized;
Bu makaledeki bazı kod örnekleri için ek using
yönergeler gerekebilir.
İstemci nesnesi oluşturma
Bir uygulamayı Blob Depolama'ya bağlamak için bir BlobServiceClient örneği oluşturun. Aşağıdaki örnekte yetkilendirme için kullanarak DefaultAzureCredential
bir istemci nesnesinin nasıl oluşturulacağı gösterilmektedir:
public BlobServiceClient GetBlobServiceClient(string accountName)
{
BlobServiceClient client = new(
new Uri($"https://{accountName}.blob.core.windows.net"),
new DefaultAzureCredential());
return client;
}
Bir .NET uygulamasına bağımlılık ekleme için bir hizmet istemcisi kaydedebilirsiniz.
Ayrıca, belirli kapsayıcılar veya bloblar için istemci nesneleri de oluşturabilirsiniz. İstemci nesneleri oluşturma ve yönetme hakkında daha fazla bilgi edinmek için bkz . Veri kaynaklarıyla etkileşim kuran istemci nesneleri oluşturma ve yönetme.
Yetkilendirme
Yetkilendirme mekanizması, blob anlık görüntüleriyle çalışmak için gerekli izinlere sahip olmalıdır. Microsoft Entra Id ile yetkilendirme için (önerilir), Azure RBAC yerleşik rolü Depolama Blob Verileri Katkıda Bulunanı veya üzeri gerekir. Daha fazla bilgi edinmek için Anlık Görüntü Blobu yetkilendirme kılavuzuna bakın.
Anlık görüntü oluşturma
Blok blobunun anlık görüntüsünü oluşturmak için aşağıdaki yöntemlerden birini kullanın:
Aşağıdaki kod örneğinde anlık görüntü oluşturma gösterilmektedir. Hizmete yönelik istekleri yetkilendirmek için Microsoft Entra kimlik bilgilerinizi kullanmak için Azure.Identity kitaplığına bir başvuru ekleyin. Yönetilen kimliği Azure Depolama'ya erişim yetkisi vermek için DefaultAzureCredential sınıfını kullanma hakkında daha fazla bilgi için bkz. .NET için Azure Identity istemci kitaplığı.
private static async Task CreateBlockBlobSnapshot(
string accountName,
string containerName,
string blobName,
Stream data)
{
const string blobServiceEndpointSuffix = ".blob.core.windows.net";
Uri containerUri =
new Uri("https://" + accountName + blobServiceEndpointSuffix + "/" + containerName);
// Get a container client object and create the container.
BlobContainerClient containerClient = new BlobContainerClient(containerUri,
new DefaultAzureCredential());
await containerClient.CreateIfNotExistsAsync();
// Get a blob client object.
BlobClient blobClient = containerClient.GetBlobClient(blobName);
try
{
// Upload text to create a block blob.
await blobClient.UploadAsync(data);
// Add blob metadata.
IDictionary<string, string> metadata = new Dictionary<string, string>
{
{ "ApproxBlobCreatedDate", DateTime.UtcNow.ToString() },
{ "FileType", "text" }
};
await blobClient.SetMetadataAsync(metadata);
// Sleep 5 seconds.
System.Threading.Thread.Sleep(5000);
// Create a snapshot of the base blob.
// You can specify metadata at the time that the snapshot is created.
// If no metadata is specified, then the blob's metadata is copied to the snapshot.
await blobClient.CreateSnapshotAsync();
}
catch (RequestFailedException e)
{
Console.WriteLine(e.Message);
Console.ReadLine();
throw;
}
}
Anlık görüntüleri silme
Bir blobu silmek için önce bu blobun anlık görüntülerini silmeniz gerekir. Anlık görüntüyü tek tek silebilir veya kaynak blob silindiğinde tüm anlık görüntülerin silineceğini belirtebilirsiniz. Hala anlık görüntüleri olan bir blobu silmeye çalışırsanız, bir hata oluşur.
Blobu ve anlık görüntülerini silmek için aşağıdaki yöntemlerden birini kullanın ve DeleteSnapshotsOption sabit listesi ekleyin:
Aşağıdaki kod örneğinde BlobClient türünde bir nesne olan blobClient
.NET'te bir blobun ve anlık görüntülerinin nasıl silineceği gösterilmektedir:
await blobClient.DeleteIfExistsAsync(DeleteSnapshotsOption.IncludeSnapshots, null, default);
Blob anlık görüntüsünü temel blob üzerinden kopyalama
Temel blob çevrimiçi katmanda (sık erişimli veya seyrek erişimli) olduğu sürece bir anlık görüntüyü temel blobu üzerinden yükseltmek için kopyalama işlemi gerçekleştirebilirsiniz. Anlık görüntü kalır, ancak hedefinin üzerine okunabilir ve yazılabilir bir kopya yazılır.
Aşağıdaki kod örneğinde blob anlık görüntüsünün temel blob üzerinden nasıl kopyalanması gösterilmektedir:
public static async Task<BlockBlobClient> CopySnapshotOverBaseBlobAsync(
BlockBlobClient client,
string snapshotTimestamp)
{
// Instantiate BlockBlobClient with identical URI and add snapshot timestamp
BlockBlobClient snapshotClient = client.WithSnapshot(snapshotTimestamp);
// Restore the specified snapshot by copying it over the base blob
await client.SyncUploadFromUriAsync(snapshotClient.Uri, overwrite: true);
// Return the client object after the copy operation
return client;
}
Kaynaklar
.NET için Azure Blob Depolama istemci kitaplığını kullanarak blob anlık görüntülerini yönetme hakkında daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın.
Kullanım dışı bırakılan .NET sürüm 11.x SDK'larını kullanan ilgili kod örnekleri için bkz . .NET sürüm 11.x kullanan kod örnekleri.