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

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

非同期 API を使った BLOB コンテナーの一覧表示について詳しくは、「コンテナーの一覧を非同期で表示する」をご覧ください。

前提条件

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

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

コードからコンテナーを一覧表示する際に、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 クライアント ライブラリを使用したコンテナーの一覧表示について詳しくは、次のリソースを参照してください。

REST API の操作

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

コード サンプル

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

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

こちらもご覧ください