藉由 .NET 建立和管理 Blob 快照集
快照集是在某個點時間取得的唯讀 Blob 版本。 本文說明如何使用適用於 .NET 的 Azure 儲存體用戶端程式庫來建立和管理 Blob 快照集。
如需與 Azure 儲存體中的 Blob 快照集有關的詳細資訊,請參閱 Blob 快照集。
必要條件
設定您的環境
如果您沒有現有的專案,本節將說明如何設定專案以使用適用於 .NET 的 Azure Blob 儲存體 客戶端連結庫。 這些步驟包括套件安裝、新增 using
指示詞,以及建立授權的客戶端物件。 如需詳細資訊,請參閱開始使用 Azure Blob 儲存體 和 .NET。
安裝套件
從您的專案目錄中,使用 dotnet add package
命令安裝 Azure Blob 儲存體和 Azure 身分識別客戶端程式庫的套件。 需要 Azure.Identity 套件才能對 Azure 服務進行無密碼連線。
dotnet add package Azure.Storage.Blobs
dotnet add package Azure.Identity
新增 using
指示詞
using
將這些指示字新增至程式碼檔案頂端:
using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Azure.Storage.Blobs.Specialized;
本文中的某些程式代碼範例可能需要其他 using
指示詞。
建立用戶端物件
若要將應用程式連線到 Blob 記憶體,請建立 BlobServiceClient 的實例。 下列範例示範如何使用 來建立客戶端物件 DefaultAzureCredential
以進行授權:
public BlobServiceClient GetBlobServiceClient(string accountName)
{
BlobServiceClient client = new(
new Uri($"https://{accountName}.blob.core.windows.net"),
new DefaultAzureCredential());
return client;
}
您也可以在 .NET 應用程式中註冊服務用戶端以進行 相依性插入 。 若要深入了解如何建立及管理用戶端物件,請參閱建立和管理與資料資源互動的用戶端端物件 (部分機器翻譯)。
授權
授權機制必須具有使用 Blob 快照集的必要許可權。 如需具有 Microsoft Entra ID 的授權(建議),您需要 Azure RBAC 內建角色 記憶體 Blob 數據參與者 或更高版本。 若要深入瞭解,請參閱快照集 Blob 的授權指引。
建立快照集
若要建立區塊 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 及其快照集,其中,blobClient
是 BlobClient 類型的物件:
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 版的程式碼範例。