使用 .NET 設定或變更區塊 Blob 的存取層
本文說明如何使用適用於 .NET 的 Azure 儲存體用戶端程式庫來設定或變更區塊 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 建立客戶端物件。 若要深入了解如何建立及管理用戶端物件,請參閱建立和管理與資料資源互動的用戶端端物件 (部分機器翻譯)。
授權
授權機制必須具有設定 Blob 存取層所需的權限。 如需使用 Microsoft Entra ID 授權 (建議使用),您需要 Azure RBAC 內建角色儲存體 Blob 資料參與者或更高權限。 若要深入了解,請參閱設定 Blob 階層的授權指導。
關於區塊 Blob 存取層
為了管理儲存體需求的成本,根據資料的存取頻率和資料需要保留的時間長度來組織資料會很有幫助。 Azure 儲存體提供不同的存取層,讓您可以根據 Blob 資料的使用方式,以最符合成本效益的方式來儲存 Blob 資料。
blob 資料的存取層
Azure 儲存體存取層包括:
- 經常性存取層:已針對儲存經常存取或修改的資料最佳化的線上層。 經常性存取層的儲存體成本最高,但存取成本最低。
- 非經常性儲存層:已針對儲存不常存取或修改的資料最佳化的線上層。 非經常性存取層中的資料至少應儲存 30 天。 相較於經常性存取層,非經常性儲存層的儲存體成本較低且存取成本較高。
- 非經常性儲存層 - 已針對儲存不常存取或修改的資料最佳化的線上層。 極非經常性存取層中的資料至少應儲存 90 天。 相較於非經常性存取層,極非經常性存取層的儲存體成本較低但存取成本較高。
- 封存層:已針對儲存極少存取且具有彈性延遲需求的資料最佳化 (以小時為單位) 的離線層。 封存層中的資料至少應儲存 180 天。
若要深入了解存取層,請參閱 Blob 資料的存取層。
位於封存存取層的 Blob 會被視為離線,而且無法讀取或修改。 若要讀取或修改封存 Blob 中的資料,您必須先將 Blob 解除凍結至線上層。 如需有關將 Blob 從封存層解除凍結至線上層的詳細資訊,請參閱將 Blob 自封存層解除凍結。
限制
只有區塊 Blob 才能設定存取層。 若要深入了解設定區塊 Blob 存取層的限制,請參閱設定 Blob 層 (REST API)。
注意
若要使用 .NET 將存取層設定為 Cold
,您必須至少使用用戶端程式庫版本 12.15.0。
在 Blob 上傳期間設定存取層
您可以使用 BlobUploadOptions 類別在 Blob 上傳時設定存取層。 下列程式碼範例顯示如何在上傳 Blob 時設定存取層:
public static async Task UploadWithAccessTierAsync(
BlobContainerClient containerClient,
string localFilePath)
{
string fileName = Path.GetFileName(localFilePath);
BlockBlobClient blockBlobClient = containerClient.GetBlockBlobClient(fileName);
var uploadOptions = new BlobUploadOptions()
{
AccessTier = AccessTier.Cool
};
FileStream fileStream = File.OpenRead(localFilePath);
await blockBlobClient.UploadAsync(fileStream, uploadOptions);
fileStream.Close();
}
若要深入了解使用 .NET 上傳 Blob,請參閱使用 .NET 上傳 Blob。
為現有的區塊 Blob 變更存取層
您可以使用下列其中一項函式來變更現有區塊 Blob 的存取層:
下列程式碼範例顯示如何將現有 Blob 的存取層變更為 Cool
:
public static async Task ChangeBlobAccessTierAsync(
BlobClient blobClient)
{
// Change the access tier of the blob to cool
await blobClient.SetAccessTierAsync(AccessTier.Cool);
}
如果您要重新凍結封存的 Blob,您可以選擇性地將 rehydratePriority
參數設定為 High
或 Standard
。
將 Blob 複製到不同的存取層
您可以將存取層指定為複製作業的一部分,以變更現有區塊 Blob 的存取層。 若要在複製作業期間變更存取層,請使用 BlobCopyFromUriOptions 類別,並指定 AccessTier 属性。 如果您使用複製作業從封存層重新凍結 Blob,您可以選擇性地將 RehydratePriority 屬性設定為 High
或 Standard
。
下列程式碼範例顯示如何使用複製作業,將封存的 Blob 解除凍結為 Hot
層:
public static async Task RehydrateBlobUsingCopyAsync(
BlobClient sourceArchiveBlob,
BlobClient destinationRehydratedBlob)
{
// Note: the destination blob must have a different name than the archived source blob
// Configure copy options to specify hot tier and standard priority
BlobCopyFromUriOptions copyOptions = new()
{
AccessTier = AccessTier.Hot,
RehydratePriority = RehydratePriority.Standard
};
// Copy source blob from archive tier to destination blob in hot tier
CopyFromUriOperation copyOperation = await destinationRehydratedBlob
.StartCopyFromUriAsync(sourceArchiveBlob.Uri, copyOptions);
await copyOperation.WaitForCompletionAsync();
}
若要深入了解使用 .NET 複製 Blob,請參閱使用 .NET 複製 Blob (部分機器翻譯)。
資源
若要深入了解使用適用於 .NET 的 Azure Blob 儲存體用戶端程式庫來設定存取層,請參閱下列資源。
程式碼範例
- 檢視本文中的程式碼範例 (GitHub) (英文)
REST API 操作
適用於 .NET 的 Azure SDK 包含建置在 Azure REST API 之上的程式庫,可讓您透過熟悉的 .NET 範例與 REST API 作業進行互動。 用來設定存取層的用戶端程式庫方法會使用下列 REST API 作業:
- 設定 Blob 層 (REST API)
用戶端程式庫資源
另請參閱
相關內容
- 本文是適用於 .NET 的 Blob 儲存體開發人員指南的一部分。 若要深入了解,請參閱位於建置 .NET 應用程式的開發人員指南文章完整清單。