Go を使用して BLOB プロパティとメタデータを管理する
BLOB コンテナーは、そこに含まれているデータに加えて、システム プロパティとユーザー定義メタデータをサポートしています。 この記事では、Go 用 Azure Storage クライアント モジュールを使用して、システム プロパティとユーザー定義メタデータを管理する方法について説明します。
前提条件
- Azure サブスクリプション - 無料アカウントを作成する
- Azure Storage アカウント - ストレージ アカウントの作成
- Go 1.18+
環境を設定する
既存のプロジェクトがない場合、Go 用 Azure Blob Storage クライアント モジュールを操作するためのプロジェクトを設定する方法についてこのセクションで説明します。 この手順には、モジュールのインストール、import
パスの追加、認可されているクライアント オブジェクトの作成が含まれます。 詳細については、Azure Blob Storage および Go の概要に関するページを参照してください。
モジュールのインストール
次のコマンドを使用して、azblob モジュールをインストールします。
go get github.com/Azure/azure-sdk-for-go/sdk/storage/azblob
Microsoft Entra ID で認証するには (推奨)、次のコマンドを使用して azidentity
モジュールをインストールします。
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
インポート パスの追加
コード ファイルに、次のインポートを追加します。
import (
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)
これらのインポート パスは、作業を始めるために最低限必要なものを表します。 この記事の一部のコード例では、追加のインポート パスが必要な場合があります。 具体的な詳細と使用例についてはコード サンプルに関するページを参照してください。
クライアント オブジェクトの作成
アプリを Blob Storage に接続するには、azblob.NewClient を使用してクライアント オブジェクトを作成します。 次の例では、認可のために DefaultAzureCredential
を使用してクライアント オブジェクトを作成する方法を示します。
func getServiceClientTokenCredential(accountURL string) *azblob.Client {
// Create a new service client with token credential
credential, err := azidentity.NewDefaultAzureCredential(nil)
handleError(err)
client, err := azblob.NewClient(accountURL, credential, nil)
handleError(err)
return client
}
承認
認可メカニズムには、コンテナーのプロパティまたはメタデータを操作するための権限が必要です。 Microsoft Entra ID による認可 (推奨) の場合、get 操作にはストレージ BLOB データ閲覧者以上、set 操作にはストレージ BLOB データ共同作成者以上の Azure RBAC 組み込みロールが必要です。 詳細については、BLOB プロパティの設定 (REST API)、BLOB プロパティの取得 (REST API)、BLOB メタデータの設定 (REST API)、BLOB メタデータの取得 (REST API) に関する認可ガイダンスを参照してください。
プロパティとメタデータについて
システムのプロパティ:システム プロパティは、各 BLOB ストレージ リソース上に存在します。 このようなプロパティには、読み取りまたは設定可能なものもありますが、読み取り専用のものもあります。 実際には、システムのプロパティの一部は、特定の標準 HTTP ヘッダーに対応しています。 Go 用 Azure Storage クライアント ライブラリは、これらのプロパティをユーザーに代わって保持します。
ユーザー定義のメタデータ: ユーザー定義メタデータは、BLOB ストレージ リソースに対して指定された 1 つ以上の名前と値のペアで構成されます。 メタデータを使用すると、リソースに関する追加の値を格納できます。 メタデータ値は独自の目的にのみ使用され、リソースの動作には影響しません。
メタデータ名/値ペアは有効な HTTP ヘッダーであり、HTTP ヘッダーに適用されるすべての制約に準拠する必要があります。 メタデータの名前付けの要件について詳しくは、「メタデータ名」をご覧ください。
注意
また、BLOB インデックス タグを使用して、ユーザー定義の任意のキーまたは値の属性を Azure Blob Storage リソースと共に格納することもできます。 メタデータに似ていますが、BLOB インデックス タグにのみ自動的にインデックスが付けられて、ネイティブの BLOB サービスによって検索可能になります。 Azure Search などの別のサービスを使用する場合を除き、メタデータにインデックスを付けてクエリを実行することはできません。
この機能の詳細については、「BLOB インデックスを使用して Azure Blob Storage でデータを管理および検索する (プレビュー)」を参照してください。
プロパティを設定および取得する
BLOB のプロパティを設定するには、BLOB クライアント オブジェクトから次のメソッドを呼び出します。
明示的に設定されていないプロパティは消去されます。 既存のプロパティを保持するには、まず BLOB のプロパティを取得し、その後それらを使用して更新されていないヘッダーを設定します。
次のコード例では、既存のプロパティを保持しながら、BlobContentType
と BlobContentLanguage
のシステム プロパティを BLOB に設定します。
func setBlobProperties(client *azblob.Client, containerName string, blobName string) {
// Reference the blob as a client object
blobClient := client.ServiceClient().NewContainerClient(containerName).NewBlobClient(blobName)
// Get the existing blob properties
resp, err := blobClient.GetProperties(context.TODO(), nil)
handleError(err)
// Set the new blob properties and include existing properties
_, err = blobClient.SetHTTPHeaders(context.TODO(), blob.HTTPHeaders{
BlobContentType: to.Ptr("text/plain"),
BlobContentLanguage: to.Ptr("en-us"),
BlobContentEncoding: resp.ContentEncoding,
BlobContentDisposition: resp.ContentDisposition,
BlobCacheControl: resp.CacheControl,
}, nil)
handleError(err)
}
BLOB のプロパティを取得するには、BLOB クライアント オブジェクトから次のメソッドを呼び出します。
次のコード例では、BLOB のシステム プロパティを取得し、値の一部を表示します。
func getBlobProperties(client *azblob.Client, containerName string, blobName string) {
// Reference the blob as a client object
blobClient := client.ServiceClient().NewContainerClient(containerName).NewBlobClient(blobName)
// Get the blob properties
resp, err := blobClient.GetProperties(context.TODO(), nil)
handleError(err)
// Print the blob properties
fmt.Printf("Content type: %v\n", *resp.ContentType)
fmt.Printf("Content language: %v\n", *resp.ContentLanguage)
}
メタデータを設定および取得する
メタデータは、BLOB またはコンテナーのリソースで 1 つ以上の名前と値のペアとして指定できます。 メタデータを設定するには、次のメソッドを使用して、名前と値のペアを含むマップを BLOB クライアント オブジェクトから送信します。
次のコード例では、BLOB のメタデータを設定します。
func setBlobMetadata(client *azblob.Client, containerName string, blobName string) {
// Reference the blob as a client object
blobClient := client.ServiceClient().NewContainerClient(containerName).NewBlobClient(blobName)
// Set the blob metadata
var metadata = make(map[string]*string)
metadata["key1"] = to.Ptr("value1")
metadata["key2"] = to.Ptr("value2")
_, err := blobClient.SetMetadata(context.TODO(), metadata, nil)
handleError(err)
}
メタデータを取得するには、BLOB クライアント オブジェクトから GetProperties メソッドを呼び出し、応答の Metadata
フィールドにアクセスします。 GetProperties
メソッドは、Get Blob Properties 操作と Get Blob Metadata 操作の両方を呼び出すことによって、BLOB のプロパティとメタデータを取得します。
次のコード例では、BLOB のメタデータを読み取り、キーと値の各ペアを出力します。
func getBlobMetadata(client *azblob.Client, containerName string, blobName string) {
// Reference the blob as a client object
blobClient := client.ServiceClient().NewContainerClient(containerName).NewBlobClient(blobName)
// Get the blob properties, which includes metadata
resp, err := blobClient.GetProperties(context.TODO(), nil)
handleError(err)
// Print the blob metadata
for k, v := range resp.Metadata {
fmt.Printf("%v: %v\n", k, *v)
}
}
Note
このガイドのコード サンプルは、Azure Blob Storage と Go の使用を開始するのに役立つことを目的としています。 エラー処理と Context
の値は、アプリケーションのニーズに合わせて変更する必要があります。
リソース
Go 用 Azure Blob Storage クライアント モジュールを使用して、システム プロパティとユーザー定義メタデータを管理する方法の詳細については、次のリソースを参照してください。
コード サンプル
- この記事のコード サンプルを表示する (GitHub)
REST API の操作
Azure SDK for Go には Azure REST API に基づき構築されたライブラリが含まれるため、使い慣れた Go パラダイムを通じて REST API 操作を実施できます。 システム プロパティとユーザー定義メタデータを管理するためのクライアント ライブラリ メソッドでは、次の REST API 操作を使用します。
- Set Blob Properties (REST API)
- Get Blob Properties (REST API)
- Set Blob Metadata (REST API)
- Get Blob Metadata (REST API)
クライアント モジュール リソース
関連するコンテンツ
- この記事は、Go の Blob Storage 開発者ガイドの一部です。 詳細については、「Go アプリのビルド」にある開発者ガイドの記事の完全な一覧を参照してください。