次の方法で共有


Python を使用してブロック BLOB のアクセス層を設定または変更する

この記事では、Python 用の Azure Storage クライアント ライブラリを使用して、ブロック BLOB のアクセス層を設定または変更する方法について説明します。

非同期 API を使用して BLOB のアクセス層を変更する方法については、「BLOB のアクセス層を非同期的に変更する」を参照してください。

前提条件

環境を設定する

既存のプロジェクトがない場合、Python 用 Azure Blob Storage クライアント ライブラリを操作するためのプロジェクトをセットアップする方法についてこのセクションで説明します。 詳細については、「Azure Blob Storage と 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 データ共同作成者以上が必要です。 詳細については、「Set Blob Tier」の認可のガイダンスを参照してください。

クライアント オブジェクトの作成

アプリを Blob Storage に接続するには、 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)

また、特定のコンテナーまたは BLOB 用のクライアント オブジェクトを、直接または BlobServiceClient オブジェクトから作成することもできます。 クライアント オブジェクトの作成と管理の詳細については、「データ リソースを操作するクライアント オブジェクトを作成および管理する」を参照してください。

ブロック BLOB アクセス層について

ストレージ ニーズのコストを管理するには、アクセス頻度と必要な保持期間に基づいてデータを整理するのが有効です。 Azure ストレージには、使用方法に応じて最もコスト効率の高い方法で BLOB データを保存できるように複数のアクセス層が用意されています。

BLOB データのアクセス層

Azure Storage アクセス層には次のものがあります。

  • ホット アクセス層 - 頻繁にアクセスまたは変更するデータの保存に最適なオンライン層。 ホット アクセス層はストレージ コストが最も高く、アクセス コストは最も安いです。
  • クール アクセス層 - アクセスおよび変更の頻度が低いデータの保存に最適なオンライン層。 クール アクセス層のデータは、最低 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 Storage クライアント ライブラリでは、BLOB のアクセス層の非同期変更がサポートされています。 プロジェクトのセットアップ要件の詳細については、「非同期プログラミング」を参照してください。

非同期 API を使用して BLOB のアクセス層を変更するには、次の手順に従います。

  1. 次の import ステートメントを追加します。

    import asyncio
    
    from azure.storage.blob import (
    StandardBlobTier
    )
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import (
    BlobServiceClient,
    BlobClient
    )
    
  2. 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())
    
  3. BLOB のアクセス層を変更するコードを追加します。 このコードは同期の例と同じですが、async キーワードを使用してメソッドが宣言され、set_standard_blob_tier メソッドを呼び出すときに await キーワードが使用される点が異なります。

    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 Storage クライアント ライブラリを使用したアクセス層の設定の詳細については、次のリソースをご覧ください。

REST API の操作

Azure SDK for Python には Azure REST API に基づき構築されたライブラリが含まれるため、使い慣れた Python パラダイムを通じて REST API 操作を実施できます。 アクセス層を設定するためのクライアント ライブラリ メソッドでは、次の REST API 操作が使用されます。

クライアント ライブラリのリソース

コード サンプル

  • この記事の同期または非同期のサンプル コードを表示する (GitHub)

関連項目