.NET を使用して Azure Storage 内でコンテナーを作成または削除するCreate or delete a container in Azure Storage with .NET

Azure Storage 内の BLOB はコンテナーにまとめられます。Blobs in Azure Storage are organized into containers. BLOB をアップロードする前には、まずコンテナーを作成する必要があります。Before you can upload a blob, you must first create a container. この記事では、.NET 用の Azure Storage クライアント ライブラリを使用してコンテナーを作成および削除する方法について説明します。This article shows how to create and delete containers with the Azure Storage client library for .NET.

コンテナーの名前を指定するName a container

コンテナー名は、コンテナーまたはその BLOB をアドレス指定するために使用される一意の URI の一部になるため、有効な DNS 名である必要があります。A container name must be a valid DNS name, as it forms part of the unique URI used to address the container or its blobs. コンテナーに名前を付けるときは、次の規則に従います。Follow these rules when naming a container:

  • コンテナー名の長さは 3 ~ 63 文字にする必要があります。Container names can be between 3 and 63 characters long.
  • コンテナー名は英文字または数字で始まり、英小文字、数字、ダッシュ (-) 文字のみを含めることができます。Container names must start with a letter or number, and can contain only lowercase letters, numbers, and the dash (-) character.
  • 2 つ以上の連続するダッシュ文字は、コンテナー名には使用できません。Two or more consecutive dash characters aren't permitted in container names.

コンテナーの URI の形式は次のとおりです。The URI for a container is in this format:

https://myaccount.blob.core.windows.net/mycontainer

コンテナーを作成するCreate a container

コンテナーを作成するには、次のいずれかのメソッドを呼び出します。To create a container, call one of the following methods:

同じ名前のコンテナーが既に存在する場合、Create および CreateAsync メソッドは例外をスローします。The Create and CreateAsync methods throw an exception if a container with the same name already exists.

CreateIfNotExists および CreateIfNotExistsAsync メソッドは、コンテナーが作成されたかどうかを示すブール値を返します。The CreateIfNotExists and CreateIfNotExistsAsync methods return a Boolean value indicating whether the container was created. 同じ名前のコンテナーが既に存在する場合、新しいコンテナーが作成されなかったことを示すために、これらのメソッドは False を返します。If a container with the same name already exists, these methods return False to indicate a new container wasn't created.

コンテナーは、ストレージ アカウントの直下に作成されます。Containers are created immediately beneath the storage account. コンテナーを別のコンテナーの下に入れ子にすることはできません。It's not possible to nest one container beneath another.

次の例では、コンテナーが非同期的に作成されます。The following example creates a container asynchronously:

//-------------------------------------------------
// Create a container
//-------------------------------------------------
private static async Task<BlobContainerClient> CreateSampleContainerAsync(BlobServiceClient blobServiceClient)
{
    // Name the sample container based on new GUID to ensure uniqueness.
    // The container name must be lowercase.
    string containerName = "container-" + Guid.NewGuid();

    try
    {
        // Create the container
        BlobContainerClient container = await blobServiceClient.CreateBlobContainerAsync(containerName);

        if (await container.ExistsAsync())
        {
            Console.WriteLine("Created container {0}", container.Name);
            return container;
        }
    }
    catch (RequestFailedException e)
    {
        Console.WriteLine("HTTP error code {0}: {1}",
                            e.Status, e.ErrorCode);
        Console.WriteLine(e.Message);
    }

    return null;
}

ルート コンテナーを作成するCreate the root container

ルート コンテナーは、ストレージ アカウントの既定のコンテナーとして機能します。A root container serves as a default container for your storage account. 各ストレージ アカウントには、 $root. という名前のルート コンテナーを 1 つ含めることができます。Each storage account may have one root container, which must be named $root. ルート コンテナーは明示的に作成または削除する必要があります。The root container must be explicitly created or deleted.

ルート コンテナーに格納されている BLOB は、ルート コンテナー名を指定せずに参照できます。You can reference a blob stored in the root container without including the root container name. ルート コンテナーを使用すると、ストレージ アカウント階層の最上位レベルにある BLOB を参照できます。The root container enables you to reference a blob at the top level of the storage account hierarchy. たとえば、ルート コンテナー内に存在する BLOB は、次の方法で参照できます。For example, you can reference a blob that is in the root container in the following manner:

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

次の例では、ルート コンテナーが非同期的に作成されます。The following example creates the root container synchronously:

//-------------------------------------------------
// Create root container
//-------------------------------------------------
private static void CreateRootContainer(BlobServiceClient blobServiceClient)
{
    try
    {
        // Create the root container or handle the exception if it already exists
        BlobContainerClient container =  blobServiceClient.CreateBlobContainer("$root");

        if (container.Exists())
        {
            Console.WriteLine("Created root container.");
        }
    }
    catch (RequestFailedException e)
    {
        Console.WriteLine("HTTP error code {0}: {1}",
                            e.Status, e.ErrorCode);
        Console.WriteLine(e.Message);
    }
}

コンテナーを削除するDelete a container

.NET でコンテナーを削除するには、次のいずれかのメソッドを呼び出します。To delete a container in .NET, use one of the following methods:

Delete および DeleteAsync メソッドは、コンテナーが存在しない場合に例外をスローします。The Delete and DeleteAsync methods throw an exception if the container doesn't exist.

DeleteIfExists および DeleteIfExistsAsync メソッドは、コンテナーが削除されたかどうかを示すブール値を返します。The DeleteIfExists and DeleteIfExistsAsync methods return a Boolean value indicating whether the container was deleted. 指定されたコンテナーが存在しない場合、これらのメソッドは、コンテナーが削除されなかったことを示す False を返します。If the specified container doesn't exist, then these methods return False to indicate that the container wasn't deleted.

コンテナーを削除した後、少なくとも 30 秒間は同じ名前のコンテナーを作成することはできません。After you delete a container, you can't create a container with the same name for at least 30 seconds. 同じ名前のコンテナーを作成しようとすると、HTTP エラー コード 409 (Conflict) が返されて処理が失敗します。Attempting to create a container with the same name will fail with HTTP error code 409 (Conflict). コンテナーまたはそれに含まれる BLOB に対して他の操作を実行しようとすると、HTTP エラー コード 404 (Not Found) が返されて処理が失敗します。Any other operations on the container or the blobs it contains will fail with HTTP error code 404 (Not Found).

次の例では、指定されたコンテナーが削除され、コンテナーが存在しない場合には例外が処理されます。The following example deletes the specified container, and handles the exception if the container doesn't exist:

//-------------------------------------------------
// Delete a container
//-------------------------------------------------
private static async Task DeleteSampleContainerAsync(BlobServiceClient blobServiceClient, string containerName)
{
    BlobContainerClient container = blobServiceClient.GetBlobContainerClient(containerName);

    try
    {
        // Delete the specified container and handle the exception.
        await container.DeleteAsync();
    }
    catch (RequestFailedException e)
    {
        Console.WriteLine("HTTP error code {0}: {1}",
                            e.Status, e.ErrorCode);
        Console.WriteLine(e.Message);
        Console.ReadLine();
    }
}

次の例は、指定したプレフィックスで始まるすべてのコンテナーを削除する方法を示しています。The following example shows how to delete all of the containers that start with a specified prefix.

//-------------------------------------------------
// Delete all containers with the specified prefix
//-------------------------------------------------
private static async Task DeleteContainersWithPrefixAsync(BlobServiceClient blobServiceClient, string prefix)
{
    Console.WriteLine("Delete all containers beginning with the specified prefix");

    try
    {
        foreach (BlobContainerItem container in blobServiceClient.GetBlobContainers())
        {
            if (container.Name.StartsWith(prefix))
            { 
                Console.WriteLine("\tContainer:" + container.Name);
                BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(container.Name);
                await containerClient.DeleteAsync();
            }
        }

        Console.WriteLine();
    }
    catch (RequestFailedException e)
    {
        Console.WriteLine(e.Message);
        Console.ReadLine();
        throw;
    }
}

.NET で開発するためのリソースResources for development with .NET

次のリンクからは、.NET 用の Azure Storage クライアントライブラリを使用する開発者にとって役立つリソースが提供されます。The links below provide useful resources for developers using the Azure Storage client library for .NET.

Azure Storage 共通 APIAzure Storage common APIs

BLOB ストレージ APIBlob storage APIs

.NET ツール.NET tools

関連項目See also