クイックスタート: C++ 用 Azure Blob Storage クライアント ライブラリ
C++ 用 Azure Blob Storage クライアント ライブラリを使用してみましょう。 Azure Blob Storage は、Microsoft のクラウド用オブジェクト ストレージ ソリューションです。 以下の手順に従って、パッケージをインストールし、基本タスクのコード例を試してみましょう。
| API リファレンス ドキュメント | ライブラリのソース コード | サンプル |
前提条件
- Azure サブスクリプション - 無料アカウントを作成する
- Azure Storage アカウント - ストレージ アカウントの作成
- C++ コンパイラ
- CMake
- vcpkg - C および C++ パッケージ マネージャー
設定
このセクションでは、C++ 用 Azure Blob Storage クライアント ライブラリを操作するためのプロジェクトの準備について説明します。 Azure SDK for C++ を入手する最も簡単な方法は、vcpkg
パッケージ マネージャーを使用することです。
パッケージのインストール
vcpkg install
コマンドを使用し、C++ 用の Azure Blob Storage ライブラリと必要な依存関係をインストールします。
vcpkg.exe install azure-storage-blobs-cpp
Azure サービスにパスワードなしで接続するには、Azure ID ライブラリが必要です。
vcpkg.exe install azure-identity-cpp
プロジェクトのセットアップと Azure SDK for C++ の操作の詳細については、Azure SDK for C++ readme を参照してください。
プロジェクトを作成する
Visual Studio で、BlobQuickstart という、Windows 向けの新しい C++ コンソール アプリケーションを作成します。
オブジェクト モデル
Azure Blob Storage は、大量の非構造化データを格納するために最適化されています。 非構造化データとは、特定のデータ モデルや定義に従っていないデータであり、テキスト データやバイナリ データなどがあります。 Blob Storage には、3 種類のリソースがあります。
- ストレージ アカウント
- ストレージ アカウント内のコンテナー
- コンテナー内の BLOB
次の図に、これらのリソースの関係を示します。
これらのリソースとやり取りするには、これら 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 クライアント ライブラリを使用して以下のタスクを実行する方法を示します。
- インクルード ファイルを追加する
- Azure に対する認証と BLOB データへのアクセスの承認
- コンテナーの作成
- コンテナーに BLOB をアップロードする
- コンテナー内の BLOB を一覧表示する
- BLOB をダウンロードする
- コンテナーの削除
インクルード ファイルを追加する
プロジェクト ディレクトリで次の操作を行います。
- Visual Studio で BlobQuickstart.sln ソリューション ファイルを開きます
- Visual Studio 内で、BlobQuickstart.cpp ソース ファイルを開きます
main
内の自動生成されたコードをすべて削除します。#include
とusing namespace
ステートメントを追加します
#include <iostream>
#include <azure/core.hpp>
#include <azure/identity/default_azure_credential.hpp>
#include <azure/storage/blobs.hpp>
using namespace Azure::Identity;
using namespace Azure::Storage::Blobs;
Azure に対する認証と BLOB データへのアクセスの認可
Azure Blob Storage に対するアプリケーション要求は、認可されている必要があります。 Azure Identity クライアント ライブラリによって提供される DefaultAzureCredential
クラスを使用することは、Blob Storage などのコード内の Azure サービスへのパスワードレス接続を実装するための推奨される方法です。
アカウント アクセス キーを使用して、Azure Blob Storage への要求を認可することもできます。 ただし、この方法は慎重に使用する必要があります。 開発者は、セキュリティで保護されていない場所にアクセス・キーを公開しないように注意する必要があります。 アクセス キーを持つすべてのユーザーは、ストレージ アカウントに対する要求を承認でき、実質的にすべてのデータにアクセスできます。 DefaultAzureCredential
はアカウント・キーよりも管理しやすく、セキュリティが優れており、パスワードレス認証が可能になります。 両方のオプションの例を次に示します。
Azure ID ライブラリでは、Azure SDK で Microsoft Entra トークン認証のサポートが提供されます。 Microsoft Entra トークン認証をサポートする Azure SDK クライアントを構築するために使用できる一連の TokenCredential
実装を提供します。 DefaultAzureCredential
は複数の認証方法をサポートしており、実行時に使用する方法が決定されます。
Microsoft Entra ユーザー アカウントにロールを割り当てる
ローカルで開発する場合は、BLOB データにアクセスするユーザー アカウントに正しいアクセス許可があることを確認します。 BLOB データの読み取りと書き込みを行うには、ストレージ BLOB データ共同作成者が必要です。 このロールを自分に割り当てるには、ユーザー アクセス管理者ロール、または Microsoft.Authorization/roleAssignments/write アクションを含む別のロールに割り当てられている必要があります。 Azure portal、Azure CLI、または Azure PowerShell を使用して、ユーザーに Azure RBAC ロールを割り当てることができます。 ロールの割り当てに使用できるスコープの詳細は、スコープの概要ページでご覧いただけます。
このシナリオでは、最小限の特権の原則に従って、ストレージ アカウントに限定したアクセス許可をユーザー アカウントに割り当てます。 この方法を使って、ユーザーに必要最小限のアクセス許可のみを与え、より安全な運用環境を作成します。
次の例では、ストレージ BLOB データ共同作成者ロールを自分のユーザー アカウントに割り当てます。これにより、そのストレージ アカウント内の BLOB データに対する読み取りと書き込みの両方のアクセス権が付与されます。
重要
ほとんどの場合、ロールの割り当てが Azure に反映されるまでの時間は 1 分から 2 分ですが、まれに 8 分程度までかかる場合があります。 初めてコードを実行したときに認証エラーを受け取る場合は、しばらく待ってから再試行してください。
Azure portal で、メインの検索バーまたは左側のナビゲーションを使ってストレージ アカウントを見つけます。
ストレージ アカウントの概要ページで、左側のメニューから [アクセス制御 (IAM)] を選びます。
[アクセス制御 (IAM)] ページで、[ロールの割り当て] タブを選びます。
上部のメニューから [+ 追加] を選択し、次に結果のドロップダウン メニューから [ロールの割り当ての追加] を選択します。
検索ボックスを使って、結果を目的のロールに絞り込みます。 この例では、ストレージ BLOB データ共同作成者を検索し、一致する結果を選び、[次へ] を選びます。
[アクセスの割り当て先] で、[ユーザー、グループ、またはサービス プリンシパル] を選び、[+ メンバーの選択] を選びます。
ダイアログで、自分の Microsoft Entra ユーザー名 (通常は user@domain メール アドレス) を検索し、ダイアログの下部にある [選択] を選びます。
[レビューと割り当て] を選んで最終ページに移動し、もう一度 [レビューと割り当て] を行ってプロセスを完了します。
DefaultAzureCredential を使用して Azure にサインインしてアプリ コードを接続する
次の手順を使用して、ストレージ アカウント内のデータへのアクセスを認可できます。
必ず、ストレージ アカウントにロールを割り当てたときと同じ Microsoft Entra アカウントを使って認証を受けてください。 Azure CLI から認証できます。 Azure CLI で次のコマンドを使用して Azure にサインインします。
az login
DefaultAzureCredential
を使用するには、azure-identity-cpp パッケージがインストールされており、次の#include
が追加されていることを確認します。#include <azure/identity/default_azure_credential.hpp>
main()
の末尾にこのコードを追加します。 ローカルのワークステーションでこのコードが実行されると、DefaultAzureCredential
では開発者の Azure CLI 資格情報を利用して Azure に認証します。// Initialize an instance of DefaultAzureCredential auto defaultAzureCredential = std::make_shared<DefaultAzureCredential>(); auto accountURL = "https://<storage-account-name>.blob.core.windows.net"; BlobServiceClient blobServiceClient(accountURL, defaultAzureCredential);
必ず、
BlobServiceClient
オブジェクトの URI のストレージ アカウント名を更新してください。 ストレージ アカウント名は、Azure portal の概要ページで確認できます。Note
運用環境で C++ SDK を使用しているとき、アプリケーションで使用されることがわかっている資格情報だけを有効にすることをお勧めします。
DefaultAzureCredential
を使用する代わりに、特定の種類の資格情報を使用するか、サポートされている資格情報と共にChainedTokenCredential
を利用して認可してください。
コンテナーを作成する
新しいコンテナーの名前を決定します。 次に、BlobContainerClient
のインスタンスを作成し、コンテナーを作成します。
重要
コンテナーの名前は小文字にする必要があります。 コンテナーと BLOB の名前付けの詳細については、「Naming and Referencing Containers, Blobs, and Metadata (コンテナー、BLOB、メタデータの名前付けと参照)」を参照してください。
main()
の末尾に次のコードを追加します。
std::string containerName = "myblobcontainer";
auto containerClient = blobServiceClient.GetBlobContainerClient("myblobcontainer");
// Create the container if it does not exist
std::cout << "Creating container: " << containerName << std::endl;
containerClient.CreateIfNotExists();
コンテナーに BLOB をアップロードする
次のコード スニペット:
- "Hello Azure!" を含む文字列を宣言します
- 「コンテナーを作成する」セクションでのコンテナー上で GetBlockBlobClient を呼び出すことで、BlockBlobClient オブジェクトへの参照を取得します。
- 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 - 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 サンプルを確認するには、次の記事に進んでください。