Aracılığıyla paylaş


.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

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.

İstemci kitaplığı kaynakları

Ayrıca bkz.