クイック スタート:.NET 用 Azure Blob Storage クライアント ライブラリ v11

.NET 用 Azure Blob Storage クライアント ライブラリ v11 を使用してみましょう。 Azure Blob Storage は、Microsoft のクラウド用オブジェクト ストレージ ソリューションです。 手順に従ってパッケージをインストールし、基本タスクのコード例を試してみましょう。 Blob Storage は、テキスト データやバイナリ データなどの大量の非構造化データを格納するために最適化されています。

注意

このクイックスタートでは、Azure Blob Storage クライアント ライブラリのレガシー バージョンを使用します。 最新バージョンで始めるには、「クイックスタート: .NET 用 Azure Blob Storage クライアント ライブラリ v12」を参照してください。

.NET 用 Azure Blob Storage クライアント ライブラリを使用すると、以下のことができます。

  • コンテナーを作成する
  • コンテナーに対するアクセス許可を設定する
  • Azure Storage 内に BLOB を作成する
  • ローカル コンピューターに BLOB をダウンロードする
  • コンテナー内のすべての BLOB を一覧表示する
  • コンテナーを削除する

その他のリソース:

前提条件

設定

このセクションでは、.NET 用 Azure Blob Storage クライアント ライブラリを操作するためのプロジェクトの準備について説明します。

プロジェクトを作成する

まず、blob-quickstart という名前の .NET Core アプリケーションを作成します。

  1. コンソール ウィンドウ (cmd、PowerShell、Bash など) で、dotnet new コマンドを使用し、blob-quickstart という名前で新しいコンソール アプリを作成します。 このコマンドにより、1 つのソース ファイルを使用する単純な "Hello World" C# プロジェクトが作成されます。Program.cs

    dotnet new console -n blob-quickstart
    
  2. 新しく作成された blob-quickstart フォルダーに切り替え、アプリをビルドし、すべて問題なく動作していることを確認します。

    cd blob-quickstart
    
    dotnet build
    

ビルドからの予想される出力は、次のようになります。

C:\QuickStarts\blob-quickstart> dotnet build
Microsoft (R) Build Engine version 16.0.450+ga8dc7f1d34 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

  Restore completed in 44.31 ms for C:\QuickStarts\blob-quickstart\blob-quickstart.csproj.
  blob-quickstart -> C:\QuickStarts\blob-quickstart\bin\Debug\netcoreapp2.1\blob-quickstart.dll

Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:00:03.08

パッケージをインストールする

まだアプリケーション ディレクトリにいる間に、dotnet add package コマンドを使用して、.NET 用の Azure Blob Storage クライアント ライブラリ パッケージをインストールします。

dotnet add package Microsoft.Azure.Storage.Blob

アプリのフレームワークを設定する

プロジェクト ディレクトリで次の操作を行います。

  1. ご使用のエディターで Program.cs ファイルを開きます
  2. Console.WriteLine ステートメントを削除します
  3. using ディレクティブを追加します
  4. 例のメイン コードが配置される ProcessAsync メソッドを作成します
  5. Main から ProcessAsync メソッドを非同期的に呼び出します

コードは次のとおりです。

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.Azure.Storage;
using Microsoft.Azure.Storage.Blob;

namespace blob_quickstart
{
    class Program
    {
        public static async Task Main()
        {
            Console.WriteLine("Azure Blob Storage - .NET quickstart sample\n");

            await ProcessAsync();

            Console.WriteLine("Press any key to exit the sample application.");
            Console.ReadLine();
        }

        private static async Task ProcessAsync()
        {
        }
    }
}

Azure Portal で資格情報をコピーする

サンプル アプリケーションから Azure Storage に対して要求を実行するときは、承認されている必要があります。 要求を承認するには、ストレージ アカウントの資格情報を接続文字列としてアプリケーションに追加します。 次の手順に従って、ストレージ アカウントの資格情報を表示します。

  1. Azure Portal に移動します。

  2. 自分のストレージ アカウントを探します。

  3. ストレージ アカウントの概要の [設定] セクションで、 [アクセス キー] を選択します。 ここでは、アカウント アクセス キーと各キーの完全な接続文字列を表示できます。

  4. [Key1][接続文字列] の値を見つけ、 [コピー] ボタンを選択して接続文字列をコピーします。 すぐ後の手順で、接続文字列の値を環境変数に追加します。

    Azure portal から接続文字列をコピーする方法を示すスクリーンショット

ストレージ接続文字列の構成

接続文字列をコピーした後、アプリケーションを実行しているローカル マシンの新しい環境変数にそれを書き込みます。 環境変数を設定するには、コンソール ウィンドウを開いて、お使いのオペレーティング システムの手順に従います。 <yourconnectionstring> は、実際の接続文字列に置き換えてください。

Windows

setx AZURE_STORAGE_CONNECTION_STRING "<yourconnectionstring>"

Windows で環境変数を追加した後、コマンド ウィンドウの新しいインスタンスを開始する必要があります。

Linux

export AZURE_STORAGE_CONNECTION_STRING="<yourconnectionstring>"

MacOS

export AZURE_STORAGE_CONNECTION_STRING="<yourconnectionstring>"

環境変数を追加した後、環境変数の読み取りを必要とする実行中のプログラムをすべて再起動します。 たとえば、続行する前に、ご使用の開発環境またはエディターを再起動します。

オブジェクト モデル

Azure Blob Storage は、大量の非構造化データを格納するために最適化されています。 非構造化データとは、特定のデータ モデルや定義に従っていないデータであり、テキスト データやバイナリ データなどがあります。 Blob Storage には、3 種類のリソースがあります。

  • ストレージ アカウント。
  • ストレージ アカウント内のコンテナー
  • コンテナー内の BLOB

次の図に、これらのリソースの関係を示します。

Blob Storage のアーキテクチャ図

これらのリソースとやり取りするには、以下の .NET クラスを使用します。

  • CloudStorageAccount: CloudStorageAccount クラスは、Azure Storage アカウントを表します。 アカウント アクセス キーを使用して BLOB ストレージへのアクセスを承認するには、このクラスを使用します。
  • CloudBlobClient: CloudBlobClient クラスは、実際のコード内の Blob service へのアクセス ポイントを提供します。
  • CloudBlobContainer: CloudBlobContainer クラスは、実際のコード内の BLOB コンテナーを表します。
  • CloudBlockBlob: CloudBlockBlob オブジェクトは、実際のコード内のブロック BLOB を表します。 ブロック BLOB は、個別に管理できるデータ ブロックで構成されます。

コード例

以下のサンプル コード スニペットは、.NET 用 Azure Blob Storage クライアント ライブラリを使用して以下を実行する方法を示します。

クライアントを認証する

次のコードでは、ストレージ アカウントを指す CloudStorageAccount オブジェクトを作成するために解析できる接続文字列が環境変数に含まれていることを確認します。 接続文字列が有効であることを確認するには、TryParse メソッドを使用します。 TryParse が成功すると、storageAccount 変数が初期化され、true が返されます。

このコードを ProcessAsync メソッド内に追加します。

// Retrieve the connection string for use with the application. The storage 
// connection string is stored in an environment variable on the machine 
// running the application called AZURE_STORAGE_CONNECTION_STRING. If the 
// environment variable is created after the application is launched in a 
// console or with Visual Studio, the shell or application needs to be closed
// and reloaded to take the environment variable into account.
string storageConnectionString = Environment.GetEnvironmentVariable("AZURE_STORAGE_CONNECTION_STRING");

// Check whether the connection string can be parsed.
CloudStorageAccount storageAccount;
if (CloudStorageAccount.TryParse(storageConnectionString, out storageAccount))
{
    // If the connection string is valid, proceed with operations against Blob
    // storage here.
    // ADD OTHER OPERATIONS HERE
}
else
{
    // Otherwise, let the user know that they need to define the environment variable.
    Console.WriteLine(
        "A connection string has not been defined in the system environment variables. " +
        "Add an environment variable named 'AZURE_STORAGE_CONNECTION_STRING' with your storage " +
        "connection string as a value.");
    Console.WriteLine("Press any key to exit the application.");
    Console.ReadLine();
}

注意

この記事の残りの操作を実行するには、上のコードの // ADD OTHER OPERATIONS HERE を以降のセクションのコード スニペットに置き換えてください。

コンテナーを作成する

コンテナーを作成するには、まず、ストレージ アカウント内の BLOB ストレージを指す CloudBlobClient オブジェクトのインスタンスを作成します。 次に、CloudBlobContainer オブジェクトのインスタンスを作成し、コンテナーを作成します。

この場合、コードはコンテナーを作成するために CreateAsync メソッドを呼び出します。 コンテナー名には、一意になるように、GUID 値が追加されます。 運用環境では、コンテナーがまだ存在していない場合にだけ作成するために、CreateIfNotExistsAsync メソッドの使用が望ましいことがよくあります。

重要

コンテナーの名前は小文字にする必要があります。 コンテナーと BLOB の名前付けの詳細については、「Naming and Referencing Containers, Blobs, and Metadata (コンテナー、BLOB、メタデータの名前付けと参照)」を参照してください。

// Create the CloudBlobClient that represents the 
// Blob storage endpoint for the storage account.
CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();

// Create a container called 'quickstartblobs' and 
// append a GUID value to it to make the name unique.
CloudBlobContainer cloudBlobContainer = 
    cloudBlobClient.GetContainerReference("quickstartblobs" + 
        Guid.NewGuid().ToString());
await cloudBlobContainer.CreateAsync();

コンテナーに対するアクセス許可を設定する

コンテナー内のすべての BLOB がパブリックになるように、コンテナーにアクセス権を設定します。 BLOB がパブリックの場合は、すべてのクライアントが匿名でアクセスすることができます。

// Set the permissions so the blobs are public.
BlobContainerPermissions permissions = new BlobContainerPermissions
{
    PublicAccess = BlobContainerPublicAccessType.Blob
};
await cloudBlobContainer.SetPermissionsAsync(permissions);

コンテナーに BLOB をアップロードする

次のコード スニペットでは、前のセクションで作成したコンテナーで GetBlockBlobReference メソッドを呼び出して、CloudBlockBlob オブジェクトへの参照を取得します。 次に、UploadFromFileAsync メソッドを呼び出して、選択されたローカル ファイルを BLOB にアップロードします。 このメソッドは、BLOB がまだ存在しない場合は作成し、既に存在する場合は上書きします。

// Create a file in your local MyDocuments folder to upload to a blob.
string localPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
string localFileName = "QuickStart_" + Guid.NewGuid().ToString() + ".txt";
string sourceFile = Path.Combine(localPath, localFileName);
// Write text to the file.
File.WriteAllText(sourceFile, "Hello, World!");

Console.WriteLine("Temp file = {0}", sourceFile);
Console.WriteLine("Uploading to Blob storage as blob '{0}'", localFileName);

// Get a reference to the blob address, then upload the file to the blob.
// Use the value of localFileName for the blob name.
CloudBlockBlob cloudBlockBlob = cloudBlobContainer.GetBlockBlobReference(localFileName);
await cloudBlockBlob.UploadFromFileAsync(sourceFile);

コンテナー内の BLOB を一覧表示する

ListBlobsSegmentedAsync メソッドを使用して、コンテナー内の BLOB を一覧表示します。 この場合、コンテナーに BLOB が 1 つだけ追加されているので、一覧表示操作ではその 1 つの BLOB だけが返されます。

1 回の呼び出しで返す BLOB が多すぎる場合 (既定では 5,000 を超える場合)、ListBlobsSegmentedAsync メソッドは結果セット全体のうちの一部のセグメントと継続トークンを返します。 BLOB の次のセグメントを取得するには、前の呼び出しから返された継続トークンを指定します。この操作を、継続トークンが null になるまで繰り返します。 null の継続トークンは、すべての BLOB を取得し終わったことを示します。 コードは、ベスト プラクティスのために継続トークンを使用する方法を示しています。

// List the blobs in the container.
Console.WriteLine("List blobs in container.");
BlobContinuationToken blobContinuationToken = null;
do
{
    var results = await cloudBlobContainer.ListBlobsSegmentedAsync(null, blobContinuationToken);
    // Get the value of the continuation token returned by the listing call.
    blobContinuationToken = results.ContinuationToken;
    foreach (IListBlobItem item in results.Results)
    {
        Console.WriteLine(item.Uri);
    }
} while (blobContinuationToken != null); // Loop while the continuation token is not null.

BLOB をダウンロードする

DownloadToFileAsync メソッドを使用して、以前に作成した BLOB をローカル ファイル システムにダウンロードします。 サンプル コードは、ローカル ファイル システムで両方のファイルを見ることができるように、BLOB の名前に "_DOWNLOADED" というサフィックスを追加します。

// Download the blob to a local file, using the reference created earlier.
// Append the string "_DOWNLOADED" before the .txt extension so that you 
// can see both files in MyDocuments.
string destinationFile = sourceFile.Replace(".txt", "_DOWNLOADED.txt");
Console.WriteLine("Downloading blob to {0}", destinationFile);
await cloudBlockBlob.DownloadToFileAsync(destinationFile, FileMode.Create);

コンテナーを削除する

次のコードは、CloudBlobContainer.DeleteAsync を使用してコンテナー全体を削除することによって、アプリが作成したリソースをクリーンアップします。 また、必要に応じてローカル ファイルを削除することもできます。

Console.WriteLine("Press the 'Enter' key to delete the example files, " +
    "example container, and exit the application.");
Console.ReadLine();
// Clean up resources. This includes the container and the two temp files.
Console.WriteLine("Deleting the container");
if (cloudBlobContainer != null)
{
    await cloudBlobContainer.DeleteIfExistsAsync();
}
Console.WriteLine("Deleting the source, and downloaded files");
File.Delete(sourceFile);
File.Delete(destinationFile);

コードの実行

このアプリは、ローカルの [マイ ドキュメント] フォルダーにテスト ファイルを作成し、BLOB ストレージにアップロードします。 次に、コンテナー内の BLOB を一覧表示し、ファイルを新しい名前でダウンロードして、古いファイルと新しいファイルを比較できるようにします。

お使いのアプリケーションのディレクトリに移動し、アプリケーションをビルドして実行します。

dotnet build
dotnet run

アプリの出力は、次の例のようになります。

Azure Blob storage - .NET Quickstart example

Created container 'quickstartblobs33c90d2a-eabd-4236-958b-5cc5949e731f'

Temp file = C:\Users\myusername\Documents\QuickStart_c5e7f24f-a7f8-4926-a9da-96
97c748f4db.txt
Uploading to Blob storage as blob 'QuickStart_c5e7f24f-a7f8-4926-a9da-9697c748f
4db.txt'

Listing blobs in container.
https://storagesamples.blob.core.windows.net/quickstartblobs33c90d2a-eabd-4236-
958b-5cc5949e731f/QuickStart_c5e7f24f-a7f8-4926-a9da-9697c748f4db.txt

Downloading blob to C:\Users\myusername\Documents\QuickStart_c5e7f24f-a7f8-4926
-a9da-9697c748f4db_DOWNLOADED.txt

Press any key to delete the example files and example container.

Enter キーを押すと、ストレージ コンテナーとファイルが削除されます。 削除する前に、 [マイ ドキュメント] フォルダーで 2 つのファイルをチェックします。 それらを開いて、同じであるかどうかを確認します。 コンソール ウィンドウから BLOB の URL をコピーしてブラウザーに貼り付け、BLOB の内容を表示します。

ファイルを確認した後、任意のキーを押してデモを終了し、テスト ファイルを削除します。

次のステップ

このクイック スタートでは、.NET を使用して BLOB をアップロード、ダウンロード、および一覧表示する方法について説明しました。

BLOB ストレージに画像をアップロードする Web アプリの作成方法を学習するには、続けて次の記事をご覧ください: