次の方法で共有


Python を使用して BLOB コンテナーを一覧表示する

Azure Storage アカウント内のコンテナーをコードから一覧表示する際には、Azure Storage からの結果の取得方法を管理するためのオプションをいくつか指定できます。 この記事では、Python 用 Azure Storage クライアント ライブラリを使用してコンテナーを一覧表示する方法について説明します。

非同期 API を使った 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

承認

認可メカニズムには、BLOB コンテナーを一覧表示するために必要なアクセス許可が必要です。 Microsoft Entra ID を使用した認可 (推奨) には、Azure RBAC 組み込みロールのストレージ BLOB データ共同作成者以上が必要です。 詳細については、「List Containers (REST API)」の認可ガイダンスを参照してください。

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

アプリを 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 オブジェクトから作成することもできます。 クライアント オブジェクトの作成と管理の詳細については、「データ リソースを操作するクライアント オブジェクトを作成および管理する」を参照してください。

コンテナーの一覧表示のオプションについて

コードからコンテナーを一覧表示する際に、Azure Storage から結果を返す方法を管理するためのオプションを指定できます。 各結果セットで返す結果の数を指定し、後続のセットを取得できます。 プレフィックスで結果をフィルター処理したり、結果を含むコンテナー メタデータを返したりすることもできます。 以降のセクションでは、これらのオプションについて説明します。

ストレージ アカウント内のコンテナーを一覧表示するには、次のメソッドを呼び出します。

このメソッドは、ContainerProperties 型のイテラブルを返します。 コンテナーは、名前によって辞書の順序で並べ替えられます。

返される結果の数を管理する

既定では、一覧表示操作では一度に最大 5000 の結果が返されます。 返される結果セットが小さくなるようにするには、results_per_page キーワード引数に 0 以外の値を指定します。

プレフィックスを使用して結果をフィルター処理する

コンテナーの一覧をフィルター処理するには、name_starts_with キーワード引数に文字列または文字を指定します。 プレフィックス文字列には、1 つ以上の文字を含めることができます。 Azure Storage は、名前がそのプレフィックスで始まるコンテナーだけを返します。

コンテナー メタデータを含める

結果と共にコンテナー メタデータを含めるには、include_metadata キーワード引数を True に設定します。 Azure Storage では、返される各コンテナーにメタデータが含まれているため、コンテナーのメタデータを個別にフェッチする必要はありません。

削除されたコンテナーを含める

論理削除されたコンテナーを結果と共に含めるには、include_deleted キーワード引数を True に設定します。

コード例

次の例では、すべてのコンテナーとメタデータが一覧表示されます。 コンテナー メタデータを含めるには、include_metadataTrue に設定します。

def list_containers(self, blob_service_client: BlobServiceClient):
    containers = blob_service_client.list_containers(include_metadata=True)
    for container in containers:
        print(container['name'], container['metadata'])

次の例では、name_starts_with パラメーターに指定したプレフィックスで始まるコンテナーのみが一覧表示されます。

def list_containers_prefix(self, blob_service_client: BlobServiceClient):
    containers = blob_service_client.list_containers(name_starts_with='test-')
    for container in containers:
        print(container['name'])

1 ページあたりの結果数の制限を指定することもできます。 次の例では、results_per_page が渡され、結果がページ分割されます。

def list_containers_pages(self, blob_service_client: BlobServiceClient):
    i=0
    all_pages = blob_service_client.list_containers(results_per_page=5).by_page()
    for container_page in all_pages:
        i += 1
        print(f"Page {i}")
        for container in container_page:
            print(container['name'])

コンテナーの一覧を非同期で表示する

Python 用 Azure Blob Storage クライアント ライブラリでは、コンテナーの非同期での一覧表示がサポートされています。 プロジェクトのセットアップ要件の詳細については、「非同期プログラミング」を参照してください。

非同期 API を使ってコンテナーの一覧を表示するには、次の手順のようにします。

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

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient
    
  2. asyncio.run を使ってプログラムを実行するコードを追加します。 この関数では、この例で渡されたコルーチン main() を実行し、asyncio イベント ループを管理します。 コルーチンは、async/await 構文で宣言されます。 この例の main() コルーチンは、最初に async with を使って最上位の BlobServiceClient を作成した後、コンテナーを一覧表示するメソッドを呼び出します。 最上位のクライアントのみで async with を使う必要があることに注意してください。ここから作成された他のクライアントでは同じ接続プールを共有するためです。

    async def main():
        sample = ContainerSamples()
    
        # TODO: Replace <storage-account-name> with your 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:
            await sample.list_containers(blob_service_client)
    
    if __name__ == '__main__':
        asyncio.run(main())
    
  3. コンテナーの一覧を表示するコードを追加します。 このコードは同期の例と同じですが、メソッドが async キーワードを使って宣言されていることと、list_containers メソッドを呼び出すときに async for が使われていることが異なります。

    async def list_containers(self, blob_service_client: BlobServiceClient):
        async for container in blob_service_client.list_containers(include_metadata=True):
            print(container['name'], container['metadata'])
    

この基本的なセットアップが整っている場合、async/await 構文を使って、この記事の他の例をコルーチンとして実装できます。

リソース

Python 用 Azure Blob Storage クライアント ライブラリを使用したコンテナーの一覧表示について詳しくは、次のリソースを参照してください。

コード サンプル

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

REST API の操作

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

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

こちらもご覧ください

  • この記事は、Python の Blob Storage 開発者ガイドの一部です。 詳細については、「Python アプリの構築」にある開発者ガイドの記事の完全な一覧を参照してください。