使用 Python 設定或變更區塊 Blob 的存取層
本文說明如何使用適用於 Python 的 Azure 儲存體用戶端程式庫來設定或變更區塊 Blob 的存取層。
若要了解有關使用非同步 API 變更 Blob 的存取層,請參閱非同步地變更 Blob 的存取層 (部分機器翻譯)。
必要條件
- Azure 訂用帳戶 - 建立免費帳戶
- Azure 儲存體帳戶 - 建立儲存體帳戶
- Python 3.8+
設定您的環境
如果沒有現有的專案,本章節會說明如何設定專案以使用適用於 Python 的 Azure Blob 儲存體用戶端程式庫。 如需詳細資訊,請參閱開始使用 Azure Blob 儲存體和 Python。
若要使用本文中的程式碼範例,請遵循下列步驟來設定您的專案。
安裝套件
使用 pip install
安裝下列套件:
pip install azure-storage-blob azure-identity
新增 import 陳述式
加入下列 import
陳述式:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import (
BlobServiceClient,
BlobClient,
StandardBlobTier,
RehydratePriority
)
授權
授權機制必須具有設定 Blob 存取層所需的權限。 如需使用 Microsoft Entra ID 授權 (建議使用),您需要 Azure RBAC 內建角色儲存體 Blob 資料參與者或更高權限。 若要深入了解,請參閱設定 Blob 階層的授權指導。
建立用戶端物件
若要將應用程式連線至 Blob 儲存體,請建立 BlobServiceClient類別的執行個體。 下列範例示範如何使用 DefaultAzureCredential
來建立用戶端物件以進行授權:
# TODO: Replace <storage-account-name> with your actual storage account name
account_url = "https://<storage-account-name>.blob.core.windows.net"
credential = DefaultAzureCredential()
# Create the BlobServiceClient object
blob_service_client = BlobServiceClient(account_url, credential=credential)
您也可以直接或從 BlobServiceClient
物件建立特定容器或 Blob 的用戶端物件。 若要深入了解如何建立及管理用戶端物件,請參閱建立和管理與資料資源互動的用戶端端物件 (部分機器翻譯)。
關於區塊 Blob 存取層
為了管理儲存體需求的成本,根據資料的存取頻率和資料需要保留的時間長度來組織資料會很有幫助。 Azure 儲存體提供不同的存取層,讓您可以根據 Blob 資料的使用方式,以最符合成本效益的方式來儲存 Blob 資料。
blob 資料的存取層
Azure 儲存體存取層包括:
- 經常性存取層:已針對儲存經常存取或修改的資料最佳化的線上層。 經常性存取層的儲存體成本最高,但存取成本最低。
- 非經常性儲存層:已針對儲存不常存取或修改的資料最佳化的線上層。 非經常性存取層中的資料至少應儲存 30 天。 相較於經常性存取層,非經常性儲存層的儲存體成本較低且存取成本較高。
- 非經常性儲存層 - 已針對儲存不常存取或修改的資料最佳化的線上層。 極非經常性存取層中的資料至少應儲存 90 天。 相較於非經常性存取層,極非經常性存取層的儲存體成本較低但存取成本較高。
- 封存層:已針對儲存極少存取且具有彈性延遲需求的資料最佳化 (以小時為單位) 的離線層。 封存層中的資料至少應儲存 180 天。
若要深入了解存取層,請參閱 Blob 資料的存取層。
位於封存存取層的 Blob 會被視為離線,而且無法讀取或修改。 若要讀取或修改封存 Blob 中的資料,您必須先將 Blob 解除凍結至線上層。 如需有關將 Blob 從封存層解除凍結至線上層的詳細資訊,請參閱將 Blob 自封存層解除凍結。
限制
只有區塊 Blob 才能設定存取層。 若要深入了解設定區塊 Blob 存取層的限制,請參閱設定 Blob 層 (REST API)。
注意
若要使用 Python 將存取層設定為 Cold
,您必須使用最低的用戶端程式庫版本 12.15.0。
在 Blob 上傳期間設定存取層
您可以將 standard_blob_tier
關鍵字引數傳遞至 upload_blob 或 upload_blob_from_url,以在 Blob 上傳時設定存取層。
下列程式碼範例顯示如何在上傳 Blob 時設定存取層:
def upload_blob_access_tier(self, blob_service_client: BlobServiceClient, container_name: str, blob_name: str):
blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name)
#Upload blob to the cool tier
with open(file=os.path.join(r'file_path', blob_name), mode="rb") as data:
blob_client = blob_client.upload_blob(data=data, overwrite=True, standard_blob_tier=StandardBlobTier.COOL)
若要深入了解使用 Python 上傳 Blob,請參閱使用 Python 上傳 Blob (部分機器翻譯)。
為現有的區塊 Blob 變更存取層
您可以使用下列函式來變更現有區塊 Blob 的存取層:
下列程式碼範例顯示如何將現有 Blob 的存取層變更為 Cool
:
def change_blob_access_tier(self, blob_client: BlobClient):
# Change the blob access tier to cool
blob_client.set_standard_blob_tier(StandardBlobTier.COOL)
如果您要解除凍結封存的 Blob,可以選擇性地將 rehydrate_priority
關鍵字引數傳遞至 HIGH
或 STANDARD
。
將 Blob 複製到不同的存取層
您可以將存取層指定為複製作業的一部分,以變更現有區塊 Blob 的存取層。 若要在複製作業期間變更存取層,請將 standard_blob_tier
關鍵字引數傳遞至 start_copy_from_url。 如果您要使用複製作業將 Blob 自封存層解除凍結,可以選擇性地將 rehydrate_priority
關鍵字引數傳遞至 HIGH
或 STANDARD
。
下列程式碼範例顯示如何使用複製作業,將封存的 Blob 解除凍結為 Hot
層:
def rehydrate_blob_using_copy(self, source_archive_blob: BlobClient, destination_rehydrated_blob: BlobClient):
# Note: the destination blob must have a different name than the source blob
# Start the copy operation - specify the rehydrate priority and blob access tier
copy_operation = dict()
copy_operation = destination_rehydrated_blob.start_copy_from_url(
source_url=source_archive_blob.url,
standard_blob_tier=StandardBlobTier.HOT,
rehydrate_priority=RehydratePriority.STANDARD,
requires_sync=False)
若要深入了解使用 Python 複製 Blob,請參閱使用 Python 複製 Blob (部分機器翻譯)。
非同步地變更 Blob 的存取層
適用於 Python 的 Azure Blob 儲存體用戶端程式庫支援非同步地變更 Blob 的存取層。 若要深入了解專案設定需求,請參閱非同步程式設計 (部分機器翻譯)。
請遵循下列步驟,使用非同步 API 來變更 Blob 的存取層:
新增下列匯入陳述式:
import asyncio from azure.storage.blob import ( StandardBlobTier ) from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import ( BlobServiceClient, BlobClient )
新增程式碼以使用
asyncio.run
執行程式。 此函式會執行傳遞的協同程式 (在我們的範例中為main()
),並管理asyncio
事件迴圈。 協同程式會以 async/await 語法宣告。 在此範例中,main()
協同程式會先使用async with
建立最上層BlobServiceClient
,然後呼叫可變更 Blob 存取層的方法。 請注意,只有最上層用戶端需要使用async with
,因為從中建立的其他用戶端會共用相同的連線集區。async def main(): sample = BlobAccessTierSamples() # TODO: Replace <storage-account-name> with an actual storage account name account_url = "https://<storage-account-name>.blob.core.windows.net" credential = DefaultAzureCredential() async with BlobServiceClient(account_url, credential=credential) as blob_service_client: # Change the blob access tier to cool blob_client = blob_service_client.get_blob_client(container="sample-container", blob="sample-blob.txt") await sample.change_blob_access_tier(blob_client=blob_client) if __name__ == '__main__': asyncio.run(main())
新增程式碼以變更 Blob 的存取層。 程式碼與同步範例相同,不同之處在於方法是以
async
關鍵字宣告,而且await
關鍵字是在呼叫set_standard_blob_tier
方法時才會使用。async def change_blob_access_tier(self, blob_client: BlobClient): # Change the blob access tier to cool await blob_client.set_standard_blob_tier(StandardBlobTier.COOL)
完成這個基本設定後,您可以使用 async/await 語法,將本文中的其他範例實作為協同程式。
資源
若要深入了解使用適用於 Python 的 Azure Blob 儲存體用戶端程式庫來設定存取層,請參閱下列資源。
REST API 操作
適用於 Python 的 Azure SDK 包含建置在 Azure REST API 之上的程式庫,可讓您透過熟悉的 Python 範例與 REST API 作業進行互動。 用來設定存取層的用戶端程式庫方法會使用下列 REST API 作業:
- 設定 Blob 層 (REST API)