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

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

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

前提条件

  • この記事では、Python 用の Azure Blob Storage クライアント ライブラリを操作するための設定が済んだプロジェクトが、既にあることを前提としています。 パッケージのインストール、import ステートメントの追加、認可されたクライアント オブジェクトの作成を含むプロジェクトの設定については、「Azure Blob Storage と Python で作業を開始する」を参照してください。
  • 認可メカニズム には、BLOB のアクセス層を設定するためのアクセス許可が必要です。 詳細については、次の REST API 操作の認可ガイダンスを参照してください。

ブロック 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)

関連項目