クイックスタート: C++ 用 Azure Blob Storage クライアント ライブラリ v12

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

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

  • コンテナーを作成する
  • Azure Storage へ BLOB をアップロードする
  • コンテナー内のすべての BLOB を一覧表示する
  • ローカル コンピューターに BLOB をダウンロードする
  • コンテナーを削除する

リソース:

前提条件

設定

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

パッケージのインストール

vcpkg install コマンドにより、C++ 用の Azure Storage Blob SDK と必要な依存関係がインストールされます。

vcpkg.exe install azure-storage-blobs-cpp:x64-windows

詳細については、GitHub にアクセスして、C++ 用 Azure SDK を入手し、ビルドします。

プロジェクトを作成する

Visual Studio で、BlobQuickstartV12 という、Windows 向けの新しい C++ コンソール アプリケーションを作成します。

新しい C++ Windows コンソール アプリを構成するための Visual Studio ダイアログ

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

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

  1. Azure portal にサインインします。

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

  3. ストレージ アカウント メニュー ウィンドウの [セキュリティとネットワーク] で、 [アクセス キー] を選択します。 ここで、アカウント アクセス キーと各キーの完全な接続文字列が確認できます。

    Azure portal 内のアクセス キー設定の場所を示すスクリーンショット

  4. [アクセス キー] ペインで、 [キーの表示] を選択します。

  5. [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 のアーキテクチャ図

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

  • BlobServiceClient:BlobServiceClient クラスを使用して、Azure Storage リソースと BLOB コンテナーを操作できます。
  • BlobContainerClient:BlobContainerClient クラスを使用して、Azure Storage コンテナーとその BLOB を操作できます。
  • BlobClient:BlobClient クラスを使用して、Azure Storage BLOB を操作できます。 これは、特殊化されたすべての BLOB クラスの基底クラスです。
  • BlockBlobClient: BlockBlobClient クラスを使用して、Azure Storage のブロック BLOB を操作できます。

コード例

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

インクルード ファイルを追加する

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

  1. Visual Studio で BlobQuickstartV12.sln ソリューション ファイルを開きます。
  2. Visual Studio 内で、BlobQuickstartV12.cpp ソース ファイルを開きます。
  3. main 内の自動生成されたコードをすべて削除します。
  4. #include ステートメントを追加します
#include <stdlib.h>
#include <iostream>
#include <azure/storage/blobs.hpp>

接続文字列を取得する

以下のコードでは、「ストレージ接続文字列の構成」で作成した環境変数から、ストレージ アカウントに対する接続文字列を取得します。

このコードを main() 内に追加します。

        // 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.
        // Note that _MSC_VER is set when using MSVC compiler.
        static const char* AZURE_STORAGE_CONNECTION_STRING = "AZURE_STORAGE_CONNECTION_STRING";
#if !defined(_MSC_VER)
        const char* connectionString = std::getenv(AZURE_STORAGE_CONNECTION_STRING);
#else
        // Use getenv_s for MSVC
        size_t requiredSize;
        getenv_s(&requiredSize, NULL, NULL, AZURE_STORAGE_CONNECTION_STRING);
        if (requiredSize == 0) {
            throw std::runtime_error("missing connection string from env.");
        }
        std::vector<char> value(requiredSize);
        getenv_s(&requiredSize, value.data(), value.size(), AZURE_STORAGE_CONNECTION_STRING);
        std::string connectionStringStr = std::string(value.begin(), value.end());
        const char* connectionString = connectionStringStr.c_str();
#endif

コンテナーを作成する

CreateFromConnectionString 関数を呼び出して、BlobContainerClient クラスのインスタンスを作成します。 次に、CreateIfNotExists を呼び出して、ストレージ アカウントに実際のコンテナーを作成します。

重要

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

main() の末尾に次のコードを追加します。

using namespace Azure::Storage::Blobs;

std::string containerName = "myblobcontainer";

// Initialize a new instance of BlobContainerClient
BlobContainerClient containerClient
    = BlobContainerClient::CreateFromConnectionString(connectionString, containerName);

// Create the container. This will do nothing if the container already exists.
std::cout << "Creating container: " << containerName << std::endl;
containerClient.CreateIfNotExists();

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

次のコード スニペット:

  1. "Hello Azure!" を含む文字列を宣言します。
  2. コンテナーを作成する」セクションでのコンテナー上で GetBlockBlobClient を呼び出すことで、BlockBlobClient オブジェクトへの参照を取得します。
  3. UploadFrom 関数を呼び出して、文字列を BLOB にアップロードします。 この関数では、BLOB がまだ存在しない場合は作成し、既に存在する場合は更新します。

main() の末尾に次のコードを追加します。

std::string blobName = "blob.txt";
uint8_t blobContent[] = "Hello Azure!";
// Create the block blob client
BlockBlobClient blobClient = containerClient.GetBlockBlobClient(blobName);

// Upload the blob
std::cout << "Uploading blob: " << blobName << std::endl;
blobClient.UploadFrom(blobContent, sizeof(blobContent));

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

ListBlobs 関数を呼び出して、コンテナー内の BLOB を一覧表示します。 コンテナーに追加されている BLOB は 1 つだけなので、この操作から返されるのは、その BLOB だけです。

main() の末尾に次のコードを追加します。

std::cout << "Listing blobs..." << std::endl;
auto listBlobsResponse = containerClient.ListBlobs();
for (auto blobItem : listBlobsResponse.Blobs)
{
    std::cout << "Blob name: " << blobItem.Name << std::endl;
}

BLOB をダウンロードする

アップロードされた BLOB のプロパティを取得します。 次に、新しい std::vector<uint8_t> オブジェクトを宣言し、アップロードした BLOB のプロパティを使用してサイズを変更します。 BlobClient 基底クラスの DownloadTo 関数を呼び出して、先ほど作成した BLOB を新しい std::vector<uint8_t> オブジェクトにダウンロードします。 最後に、ダウンロードされた BLOB データを表示します。

main() の末尾に次のコードを追加します。

auto properties = blobClient.GetProperties().Value;
std::vector<uint8_t> downloadedBlob(properties.BlobSize);

blobClient.DownloadTo(downloadedBlob.data(), downloadedBlob.size());
std::cout << "Downloaded blob contents: " << std::string(downloadedBlob.begin(), downloadedBlob.end()) << std::endl;

BLOB を削除する

次のコードは、BlobClient.Delete 関数を呼び出して、Azure Blob Storage コンテナーから BLOB を削除します。

std::cout << "Deleting blob: " << blobName << std::endl;
blobClient.Delete();

コンテナーを削除する

次のコードでは、BlobContainerClient.Delete を使用してコンテナー全体を削除することで、アプリによって作成されたリソースをクリーンアップします。

main() の末尾に次のコードを追加します。

std::cout << "Deleting container: " << containerName << std::endl;
containerClient.Delete();

コードの実行

このアプリは、コンテナーを作成し、テキスト ファイルを Azure Blob Storage にアップロードします。 さらに、この例では、コンテナー内の BLOB を一覧表示し、ファイルをダウンロードして、ファイルの内容を表示します。 最後に、BLOB とコンテナーを削除します。

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

Azure Blob Storage v12 - C++ quickstart sample
Creating container: myblobcontainer
Uploading blob: blob.txt
Listing blobs...
Blob name: blob.txt
Downloaded blob contents: Hello Azure!
Deleting blob: blob.txt
Deleting container: myblobcontainer

次のステップ

このクイックスタートでは、C++ を使用して BLOB をアップロード、ダウンロード、および一覧表示する方法について説明しました。 また、Azure Blob Storage コンテナーの作成方法と削除方法についても説明しました。

C++ Blob Storage サンプルを確認するには、次の記事に進んでください。