Go を使用してデータを管理および検索するために BLOB インデックス タグを使用する
この記事では、Go 用 Azure Storage クライアント モジュールを使用してデータを管理および検索するために BLOB インデックス タグを使用する方法について説明します。
前提条件
- 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
}
承認
認可メカニズムには、BLOB インデックス タグを操作するために必須のアクセス許可が必要です。 Microsoft Entra ID を使用した認可 (推奨) には、Azure RBAC 組み込みロールの Storage BLOB データ所有者以上が必要です。 詳細については、「Get Blob Tags」、「Set Blob Tags」、または「Find Blobs by Tags」の認可ガイダンスを参照してください。
BLOB インデックス タグについて
キーと値のタグ属性を使用して、BLOB インデックス タグによってストレージ アカウント内のデータが分類されます。 これらのタグには自動的にインデックスが付けられ、検索可能な多次元インデックスとして公開されるため、データを簡単に見つけることができます。 この記事では、BLOB インデックス タグを使用してデータを設定、取得、および検索する方法について説明します。
階層型名前空間が有効になっているストレージ アカウントでは、BLOB インデックス タグはサポートされていません。 BLOB インデックス タグ機能と既知の問題および制限について詳しくは、「BLOB インデックス タグを使用して Azure BLOB データを管理および検索する」を参照してください。
タグを設定する
次のいずれかのメカニズムを使用してコードが BLOB データへのアクセスを認可されている場合は、インデックス タグを設定できます。
- Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/write アクションを含む Azure RBAC ロールが割り当てられているセキュリティ プリンシパル。 ストレージ BLOB データ所有者は、このアクションを含む組み込みロールです。
- BLOB のタグにアクセスするためのアクセス許可 (
t
アクセス許可) を持つ Shared Access Signature (SAS) - アカウント キー
詳細については、BLOB インデックス タグの設定を参照してください。
次のメソッドを使用してタグを設定できます。
このメソッドで指定されたタグによって、既存のタグが置換されます。 既存の値を保持する必要がある場合は、値をダウンロードしてこのメソッドの呼び出しに含める必要があります。 次の例はタグの設定方法を示しています。
func setBlobTags(client *azblob.Client, containerName string, blobName string) {
// Reference the blob as a client object
blobClient := client.ServiceClient().NewContainerClient(containerName).NewBlobClient(blobName)
// Get existing tags for the blob if they need to be preserved
resp, err := blobClient.GetTags(context.TODO(), nil)
handleError(err)
tags := make(map[string]string)
for _, v := range resp.BlobTags.BlobTagSet {
tags[*v.Key] = *v.Value
}
// Add or modify blob tags
var updated_tags = make(map[string]*string)
updated_tags["tag1"] = to.Ptr("value1")
updated_tags["tag2"] = to.Ptr("value2")
// Combine existing tags with new tags
for k, v := range updated_tags {
tags[k] = *v
}
// Set blob tags
_, err = blobClient.SetTags(context.TODO(), tags, nil)
handleError(err)
}
次の例に示すように、タグなしで SetTags
を呼び出すことで、すべてのタグを削除できます。
func clearBlobTags(client *azblob.Client, containerName string, blobName string) {
// Reference the blob as a client object
blobClient := client.ServiceClient().NewContainerClient(containerName).NewBlobClient(blobName)
// Clear blob tags
_, err := blobClient.SetTags(context.TODO(), make(map[string]string), nil)
handleError(err)
}
タグを取得する
次のいずれかのメカニズムを使用してコードが BLOB データへのアクセスを認可されている場合は、インデックス タグを取得できます。
- Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/read アクションを含む Azure RBAC ロールが割り当てられているセキュリティ プリンシパル。 ストレージ BLOB データ所有者は、このアクションを含む組み込みロールです。
- BLOB のタグにアクセスするためのアクセス許可 (
t
アクセス許可) を持つ Shared Access Signature (SAS) - アカウント キー
詳細については、「BLOB インデックス タグの取得と一覧表示」を参照してください。
次のメソッドを使用してタグを取得できます。
次の例は、BLOB のタグを取得して反復処理する方法を示しています。
func getBlobTags(client *azblob.Client, containerName string, blobName string) {
// Reference the blob as a client object
blobClient := client.ServiceClient().NewContainerClient(containerName).NewBlobClient(blobName)
// Get the blob tags
resp, err := blobClient.GetTags(context.TODO(), nil)
handleError(err)
// Print the blob tags
for _, v := range resp.BlobTags.BlobTagSet {
fmt.Printf("Key: %v, Value: %v\n", *v.Key, *v.Value)
}
}
BLOB インデックス タグを使用してデータをフィルター処理および検索する
次のいずれかのメカニズムを使用して、コードが BLOB データへのアクセスを認可されている場合は、インデックス タグを使用してデータを検索し、フィルター処理できます。
- Microsoft.Storage/storageAccounts/blobServices/containers/blobs/filter/action アクションを含む Azure RBAC ロールが割り当てられているセキュリティ プリンシパル。 ストレージ BLOB データ所有者は、このアクションを含む組み込みロールです。
- タグで BLOB をフィルター処理するアクセス許可 (
f
アクセス許可) を持つ Shared Access Signature (SAS) - アカウント キー
詳細については、「BLOB インデックス タグを使用したデータの検索」を参照してください。
Note
インデックス タグを使用して以前のバージョンを取得することはできません。 以前のバージョンのタグは BLOB インデックス エンジンに渡されません。 詳細については、条件と既知の問題に関するページを参照してください。
次の方法を使用すると、インデックス タグに基づいて BLOB データをフィルター処理できます。
次の例では、画像としてタグ付けされたすべての BLOB を検索して一覧表示します。
func findBlobsByTags(client *azblob.Client, containerName string, blobName string) {
// Reference the container as a client object
containerClient := client.ServiceClient().NewContainerClient(containerName)
// Filter blobs by tags
where := "\"Content\"='image'"
opts := container.FilterBlobsOptions{MaxResults: to.Ptr(int32(10))}
resp, err := containerClient.FilterBlobs(context.TODO(), where, &opts)
handleError(err)
// Print the blobs found
for _, blobItem := range resp.FilterBlobSegment.Blobs {
fmt.Printf("Blob name: %v\n", *blobItem.Name)
}
}
Note
このガイドのコード サンプルは、Azure Blob Storage と Go の使用を開始するのに役立つことを目的としています。 エラー処理と Context
の値は、アプリケーションのニーズに合わせて変更する必要があります。
リソース
Go 用 Azure Blob Storage クライアント ライブラリでインデックス タグを使用したデータの管理と検索を行う方法の詳細については、次のリソースを参照してください。
コード サンプル
- この記事のコード サンプルを表示する (GitHub)
REST API の操作
Azure SDK for Go には Azure REST API に基づき構築されたライブラリが含まれるため、使い慣れた Go パラダイムを通じて REST API 操作を実施できます。 BLOB インデックス タグを管理および使用するためのクライアント ライブラリ メソッドは、次の REST API 操作を使用します。
- BloB タグを取得する (REST API)
- BloB タグを設定する (REST API)
- タグごとに BloB を検索する (REST API)
クライアント モジュール リソース
関連項目
関連するコンテンツ
- この記事は、Go の Blob Storage 開発者ガイドの一部です。 詳細については、Go アプリのビルドに関する記事にある開発者ガイドの完全な一覧を参照してください。