次の方法で共有


Python を使用して BLOB コンテナーを作成する

Azure Storage 内の BLOB はコンテナーにまとめられます。 BLOB をアップロードする前には、まずコンテナーを作成する必要があります。 この記事では、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.core.exceptions import ResourceExistsError
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient

承認

認可メカニズムには、コンテナーを作成するために必要なアクセス許可が必要です。 Microsoft Entra ID を使用した認可 (推奨) には、Azure RBAC 組み込みロールのストレージ BLOB データ共同作成者以上が必要です。 詳細については、「コンテナーの作成 (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 オブジェクトから作成することもできます。 クライアント オブジェクトの作成と管理の詳細については、「データ リソースを操作するクライアント オブジェクトを作成および管理する」を参照してください。

コンテナーの名前付けについて

コンテナー名は、コンテナーまたはその BLOB をアドレス指定するために使用される一意の URI の一部になるため、有効な DNS 名である必要があります。 コンテナーに名前を付けるときは、次の規則に従います。

  • コンテナー名の長さは 3 ~ 63 文字にする必要があります。
  • コンテナー名は英文字または数字で始まり、英小文字、数字、ダッシュ (-) 文字のみを含めることができます。
  • 連続するダッシュ文字は、コンテナー名には使用できません。

コンテナー リソースの URI は、次のように書式設定されます。

https://my-account-name.blob.core.windows.net/my-container-name

コンテナーを作成する

コンテナーを作成するには、BlobServiceClient クラスから次のメソッドを呼び出します。

また、ContainerClient クラスの次のメソッドを使用してコンテナーを作成することもできます。

コンテナーは、ストレージ アカウントの直下に作成されます。 コンテナーを別のコンテナーの下に入れ子にすることはできません。 同じ名前のコンテナーが既に存在する場合、例外がスローされます。

次の例では、BlobServiceClient オブジェクトからコンテナーを作成します。

def create_blob_container(self, blob_service_client: BlobServiceClient, container_name):
    try:
        container_client = blob_service_client.create_container(name=container_name)
    except ResourceExistsError:
        print('A container with this name already exists')

ルート コンテナーを作成する

ルート コンテナーは、ストレージ アカウントの既定のコンテナーとして機能します。 各ストレージ アカウントには、 $root. という名前のルート コンテナーを 1 つ含めることができます。 ルート コンテナーは明示的に作成または削除する必要があります。

ルート コンテナーに格納されている BLOB は、ルート コンテナー名を指定せずに参照できます。 ルート コンテナーを使用すると、ストレージ アカウント階層の最上位レベルにある BLOB を参照できます。 たとえば、ルート コンテナー内の BLOB は、次の方法で参照できます。

https://accountname.blob.core.windows.net/default.html

次の例では、コンテナー名 $root を持つ新しい ContainerClient オブジェクトを作成し、ストレージ アカウントにまだ存在しない場合はコンテナーを作成します。

def create_blob_root_container(self, blob_service_client: BlobServiceClient):
    container_client = blob_service_client.get_container_client(container="$root")

    # Create the root container if it doesn't already exist
    if not container_client.exists():
        container_client.create_container()

コンテナーを非同期的に作成する

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

非同期 API を使用してコンテナーを作成するには、これらの手順に従います。

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

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient
    from azure.core.exceptions import ResourceExistsError
    
  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.create_blob_container(blob_service_client, "sample-container")
    
    if __name__ == '__main__':
        asyncio.run(main())
    
  3. コンテナーを作成するコードを追加します。 このコードは同期の例と同じですが、async キーワードを使用してメソッドが宣言され、create_container メソッドを呼び出すときに await キーワードが使用される点が異なります。

    async def create_blob_container(self, blob_service_client: BlobServiceClient, container_name):
        try:
            container_client = await blob_service_client.create_container(name=container_name)
        except ResourceExistsError:
            print('A container with this name already exists')
    

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

リソース

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

コード サンプル

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

REST API の操作

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

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

次のステップ

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