Go を使用してコンテナーのプロパティとメタデータを管理する

BLOB コンテナーは、そこに含まれているデータに加えて、システム プロパティとユーザー定義メタデータをサポートしています。 この記事では、Go 用 Azure Storage クライアント モジュールを使用して、システム プロパティとユーザー定義メタデータを管理する方法について説明します。

前提条件

環境を設定する

既存のプロジェクトがない場合、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 組み込みロールが必要です。 詳細については、「Get Container Properties (REST API)」、「Set Container Metadata (REST API)」、または「Get Container Metadata (REST API)」の認可のガイダンスを参照してください。

プロパティとメタデータについて

  • システム プロパティ: システム プロパティは BLOB ストレージ リソースごとに存在します。 このようなプロパティには、読み取りまたは設定可能なものもありますが、読み取り専用のものもあります。 実際には、システムのプロパティの一部は、特定の標準 HTTP ヘッダーに対応しています。 Go 用 Azure Storage クライアント ライブラリは、これらのプロパティをユーザーに代わって保持します。

  • ユーザー定義のメタデータ: ユーザー定義メタデータは、BLOB ストレージ リソースに対して指定された 1 つ以上の名前と値のペアで構成されます。 メタデータを使用すると、リソースに関する追加の値を格納できます。 メタデータ値は独自の目的にのみ使用され、リソースの動作には影響しません。

    メタデータ名/値ペアは有効な HTTP ヘッダーであり、HTTP ヘッダーに適用されるすべての制約に準拠する必要があります。 メタデータの名前付けの要件について詳しくは、「メタデータ名」をご覧ください。

コンテナーのプロパティを取得する

コンテナーのプロパティを取得するには、コンテナー クライアント オブジェクトから次のメソッドを呼び出します。

次のコード例では、コンテナーのシステム プロパティをフェッチし、一部のプロパティ値をコンソール ウィンドウに書き込みます。

func getContainerProperties(client *azblob.Client, containerName string) {
    // Reference the container as a client object
    containerClient := client.ServiceClient().NewContainerClient(containerName)

    // Get the container properties
    resp, err := containerClient.GetProperties(context.TODO(), nil)
    handleError(err)

    // Print the container properties
    fmt.Printf("Blob public access: %v\n", *resp.BlobPublicAccess)
    fmt.Printf("Lease status: %v\n", *resp.LeaseStatus)
    fmt.Printf("Lease state: %v\n", *resp.LeaseState)
    fmt.Printf("Has immutability policy: %v\n", *resp.HasImmutabilityPolicy)
}

メタデータを設定および取得する

メタデータは、BLOB またはコンテナーのリソースで 1 つ以上の名前と値のペアとして指定できます。 メタデータを設定するには、コンテナー クライアント オブジェクトから次のメソッドを呼び出します。

コンテナー メタデータを設定すると、コンテナーに関連付けられている既存のすべてのメタデータが上書きされます。 名前と値の個々のペアを変更することはできません。

次のコード例では、コンテナーにメタデータを設定します。

func setContainerMetadata(client *azblob.Client, containerName string) {
    // Reference the container as a client object
    containerClient := client.ServiceClient().NewContainerClient(containerName)

    // Set the container metadata
    var metadata = make(map[string]*string)
    metadata["key1"] = to.Ptr("value1")
    metadata["key2"] = to.Ptr("value2")

    _, err := containerClient.SetMetadata(context.TODO(), nil)
    handleError(err)
}

メタデータを取得するには、コンテナー クライアント オブジェクトから次のメソッドを呼び出します。

メタデータは GetProperties からの応答に含まれます。 次の例では、メタデータ値を読み取り、コンソール ウィンドウに書き込みます。

func getContainerMetadata(client *azblob.Client, containerName string) {
    // Reference the container as a client object
    containerClient := client.ServiceClient().NewContainerClient(containerName)

    // Get the container properties, which includes metadata
    resp, err := containerClient.GetProperties(context.TODO(), nil)
    handleError(err)

    // Print the container metadata
    for k, v := range resp.Metadata {
        fmt.Printf("%v: %v\n", k, *v)
    }
}

Note

このガイドのコード サンプルは、Azure Blob Storage と Go の使用を開始するのに役立つことを目的としています。 エラー処理と Context の値は、アプリケーションのニーズに合わせて変更する必要があります。

リソース

Go 用 Azure Blob Storage クライアント モジュールを使用してコンテナーのプロパティとメタデータを設定および取得する方法の詳細については、次のリソースを参照してください。

コード サンプル

REST API の操作

Azure SDK for Go には Azure REST API に基づき構築されたライブラリが含まれるため、使い慣れた Go パラダイムを通じて REST API 操作を実施できます。 プロパティとメタデータを設定および取得するためのクライアント ライブラリ メソッドでは、次の REST API 操作が使用されます。

get_container_properties メソッドでは、Get Container Properties 操作と Get Container Metadata 操作の両方を呼び出して、コンテナーのプロパティとメタデータを取得します。

クライアント モジュール リソース

  • この記事は、Go の Blob Storage 開発者ガイドの一部です。 詳細については、「Go アプリのビルド」にある開発者ガイドの記事の完全な一覧を参照してください。