クイックスタート: Azure SDK for Go で Azure Cosmos DB for Table を使用する
このクイックスタートでは、Azure SDK for Go を使って、基本的な Azure Cosmos DB for Table アプリケーションをデプロイします。 Azure Cosmos DB for Table はスキーマレス データ ストアであり、これによりアプリケーションは構造化されたテーブル データをクラウドに保存できます。 Azure SDK for Go を使用して、Azure Cosmos DB リソース内でテーブル、行を作成し、基本的なタスクを実行する方法を学習します。
ライブラリのソース コード | パッケージ (Go) | Azure Developer CLI
前提条件
- Azure Developer CLI
- Docker Desktop
Go
1.21 以降
Azure アカウントをお持ちでない場合は、開始する前に無料アカウントを作成してください。
プロジェクトを初期化する
Azure Developer CLI (azd
) を使用して、Azure Cosmos DB for Table アカウントを作成し、コンテナー化されたサンプル アプリケーションをデプロイします。 サンプル アプリケーションでは、クライアント ライブラリを使って、サンプル データの管理、作成、読み取り、クエリを実行します。
空のディレクトリでターミナルを開きます。
まだ認証されていない場合は、
azd auth login
を使用して Azure Developer CLI に対して認証します。 ツールによって指示された手順に従って、任意の Azure 資格情報を使って CLI に対して認証します。azd auth login
azd init
を使ってプロジェクトを初期化します。azd init --template cosmos-db-table-go-quickstart
初期化中に、一意の環境名を構成します。
azd up
を使って、Azure Cosmos DB アカウントをデプロイします。 Bicep テンプレートは、サンプル Web アプリケーションもデプロイします。azd up
このプロビジョニング プロセス中に、サブスクリプション、目的の場所、ターゲット リソース グループを選択します。 プロビジョニング プロセスが完了するまで待ちます。 このプロセスには 5 分ほどかかる可能性があります。
Azure リソースのプロビジョニングが完了すると、実行中の Web アプリケーションへの URL が出力に含まれます。
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: <https://[container-app-sub-domain].azurecontainerapps.io> SUCCESS: Your application was provisioned and deployed to Azure in 5 minutes 0 seconds.
コンソールで URL を使って、ブラウザーで Web アプリケーションに移動します。 実行中のアプリの出力を確認します。
クライアント ライブラリをインストールする
クライアント ライブラリは、aztables
パッケージとして Go 経由で使用できます。
ターミナルを開き、
/src
フォルダーに移動します。cd ./src
aztables
パッケージがまだインストールされていない場合は、go install
を使ってインストールします。go install github.com/Azure/azure-sdk-for-go/sdk/data/aztables
src/go.mod ファイルを開いて確認し、
github.com/Azure/azure-sdk-for-go/sdk/data/aztables
エントリが存在することを確かめます。
オブジェクト モデル
名前 | 説明 |
---|---|
ServiceClient |
この種類は主要なクライアントの種類であり、アカウント全体のメタデータやデータベースを管理するために使われます。 |
Client |
この種類は、アカウント内のテーブルのクライアントを表します。 |
コード例
テンプレート内のサンプル コードでは、cosmicworks-products
という名前のテーブルを使用します。 cosmicworks-products
テーブルには、各製品の名前、カテゴリ、数量、価格、一意識別子、販売フラグなどの詳細が含まれています。 コンテナーでは、行キーとして "一意識別子"* を使用し、パーティション キーとして "カテゴリ" を使用します。
クライアントを認証する
このサンプルでは、ServiceClient
型の新しいインスタンスを作成します。
credential, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
return err
}
client, err := aztables.NewServiceClient("<azure-cosmos-db-table-account-endpoint>", credential)
if err != nil {
log.Fatal(err)
}
テーブルを取得
このサンプルでは、ServiceClient
型の NewClient
関数を使用して Client
型のインスタンスを作成します。
table, err := client.NewClient("<azure-cosmos-db-table-name>")
if err != nil {
log.Fatal(err)
}
エンティティの作成
テーブルに新しいエンティティを作成する最も簡単な方法は、aztables.EDMEntity
型のインスタンスを作成することです。 aztables.Entity
型を使って RowKey
プロパティと PartitionKey
プロパティを設定し、文字列マップを使って追加のプロパティを設定します。
entity := aztables.EDMEntity{
Entity: aztables.Entity{
RowKey: "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
PartitionKey: "gear-surf-surfboards",
},
Properties: map[string]any{
"Name": "Yamba Surfboard",
"Quantity": 12,
"Price": 850.00,
"Clearance": false,
},
}
json.Marshal
を使ってエンティティをバイト配列に変換してから、UpsertEntity
を使ってテーブルにエンティティを作成します。
bytes, err := json.Marshal(entity)
if err != nil {
panic(err)
}
_, err = table.UpsertEntity(context.TODO(), bytes, nil)
if err != nil {
panic(err)
}
エンティティを取得する
GetEntity
を使って、テーブルから特定のエンティティを取得できます。 その後、json.Unmarshal
を使い、aztables.EDMEntity
型を使って解析できます。
rowKey := "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb"
partitionKey := "gear-surf-surfboards"
response, err := table.GetEntity(context.TODO(), partitionKey, rowKey, nil)
if err != nil {
panic(err)
}
var entity aztables.EDMEntity
err = json.Unmarshal(response.Value, &entity)
if err != nil {
panic(err)
}
エンティティを照会する
エンティティを挿入した後、NewListEntitiesPager
と文字列フィルターを使用して、特定のフィルターに一致するすべてのエンティティを取得するクエリを実行することもできます。
filter := "PartitionKey eq 'gear-surf-surfboards'"
options := &aztables.ListEntitiesOptions{
Filter: &filter,
}
pager := table.NewListEntitiesPager(options)
ページャーの More
関数を使ってクエリのページ分割された結果を解析し、さらにページがあるかどうかを判断してから、NextPage
関数を使って結果の次のページを取得します。
for pager.More() {
response, err := pager.NextPage(context.TODO())
if err != nil {
panic(err)
}
for _, entityBytes := range response.Entities {
var entity aztables.EDMEntity
err := json.Unmarshal(entityBytes, &entity)
if err != nil {
panic(err)
}
writeOutput(fmt.Sprintf("Found entity:\t%s\t%s", entity.Properties["Name"], entity.RowKey))
}
}
リソースをクリーンアップする
サンプル アプリケーションやリソースが不要になったら、対応するデプロイとすべてのリソースを削除します。
azd down