藉由 .NET 建立和管理 Blob 快照集

快照集是在某個點時間取得的唯讀 Blob 版本。 本文說明如何使用適用於 .NET 的 Azure 儲存體用戶端程式庫來建立和管理 Blob 快照集。

如需與 Azure 儲存體中的 Blob 快照集有關的詳細資訊,請參閱 Blob 快照集

必要條件

  • 本文假設您已設定專案,與適用於 .NET 的 Azure Blob 儲存體用戶端程式庫搭配使用。 若要了解如何設定專案,包括安裝套件、新增 using 指示詞,以及建立授權的用戶端物件,請參閱開始使用 Azure Blob 儲存體和 .NET
  • 授權機制必須具有使用 Blob 快照集的權限。 若要深入了解,請參閱下列 REST API 作業的授權指導:

建立快照集

若要建立區塊 Blob 的快照集,請使用以下方法之一:

下列程式碼範例顯示如何建立快照集。 納入對 Azure.Identity 程式庫的參考,以使用您的 Microsoft Entra 認證授權對服務的要求。 如需使用 DefaultAzureCredential 類別授權受控識別存取 Azure 儲存體的詳細資訊,請參閱適用於 .NET 的 Azure 身分識別用戶端程式庫

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;
    }
}

刪除快照集

若要刪除 Blob,您必須先刪除該 Blob 的任何快照集。 您可以個別刪除快照集,或指定在刪除來源 Blob 時刪除所有的快照集。 如果您嘗試刪除仍具有快照集的 Blob,則會發生錯誤。

若要刪除 Blob 及其快照集,請使用下列其中一種方法,並納入 DeleteSnapshotsOption 列舉:

下列程式碼範例說明如何在 .NET 中刪除 Blob 及其快照集,其中,blobClientBlobClient 類型的物件:

await blobClient.DeleteIfExistsAsync(DeleteSnapshotsOption.IncludeSnapshots, null, default);

將 Blob 快照集複製至基底 Blob 上

您可以執行複製作業,透過其基底 Blob 升級快照集,只要基底 Blob 位於線上層 (經常性存取層或非經常性存取層)。 快照集保留,但其目的地會被一個可讀取和寫入的複本覆寫。

下列程式碼範例說明如何透過基底 Blob 複製 Blob 快照集:

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;
}

資源

若要深入了解如何使用適用於 .NET 的 Azure Blob 儲存體用戶端程式庫管理 Blob 快照集,請參閱下列資源。

如需使用已淘汰 .NET 11.x 版 SDK 的相關程式碼範例,請參閱使用 .NET 11.x 版的程式碼範例

用戶端程式庫資源

另請參閱