Go 用 Azure Cosmos DB for Apache Cassandra クライアント ライブラリを使用して、非構造化データの格納、管理、クエリを実行します。 このガイドの手順に従って、新しいアカウントの作成、Go クライアント ライブラリのインストール、アカウントへの接続、一般的な操作の実行、最終的なサンプル データのクエリを実行します。
API リファレンス ドキュメント | ライブラリのソース コード | パッケージ (Go)
[前提条件]
Azure サブスクリプション
- Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
Azure Cloud Shell の Azure CLI の最新バージョン。
- CLI 参照コマンドをローカルで実行する場合は、
az login
コマンドを使用して Azure CLI にサインインします。
- CLI 参照コマンドをローカルで実行する場合は、
Go
1.24 以降
セットアップ中
まず、このガイドのアカウントと開発環境を設定します。 このセクションでは、アカウントの作成、資格情報の取得、開発環境の準備のプロセスについて説明します。
アカウントを作成する
まず、Apache Cassandra アカウント用の API を作成します。 アカウントが作成されたら、キースペースとテーブル リソースを作成します。
ターゲット リソース グループがまだない場合は、
az group create
コマンドを使用して、サブスクリプションに新しいリソース グループを作成します。az group create \ --name "<resource-group-name>" \ --location "<location>"
az cosmosdb create
コマンドを使用して、既定の設定で新しい Azure Cosmos DB for Apache Cassandra アカウントを作成します。az cosmosdb create \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --locations "regionName=<location>" \ --capabilities "EnableCassandra"
cosmicworks
という名前のaz cosmosdb cassandra keyspace create
を使用して、新しいキースペースを作成します。az cosmosdb cassandra keyspace create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --name "cosmicworks"
複数行の Bash コマンドを使用して、スキーマを表す新しい JSON オブジェクトを作成します。 次に、
az cosmosdb cassandra table create
コマンドを使用して、products
という名前の新しいテーブルを作成します。schemaJson=$(cat <<EOF { "columns": [ { "name": "id", "type": "text" }, { "name": "name", "type": "text" }, { "name": "category", "type": "text" }, { "name": "quantity", "type": "int" }, { "name": "price", "type": "decimal" }, { "name": "clearance", "type": "boolean" } ], "partitionKeys": [ { "name": "id" } ] } EOF )
az cosmosdb cassandra table create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --keyspace-name "cosmicworks" \ --name "product" \ --schema "$schemaJson"
資格情報の取得
ここで、最近作成したアカウントへの接続を作成するために使用するクライアント ライブラリのパスワードを取得します。
az cosmosdb show
を使用して、アカウントの連絡先ポイントとユーザー名を取得します。az cosmosdb show \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --query "{username:name,contactPoint:documentEndpoint}"
前のコマンドの出力の
contactPoint
プロパティとusername
プロパティの値を記録します。 これらのプロパティの値は、このガイドの後半でライブラリを使用してアカウントに接続するために使用する 連絡先ポイント と ユーザー名 です。az cosmosdb keys list
を使用して、アカウントのキーを取得します。az cosmosdb keys list \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --type "keys"
前のコマンドの出力の
primaryMasterKey
プロパティの値を記録します。 このプロパティの値は、このガイドの後半でライブラリを使用してアカウントに接続するために使用する パスワード です。
開発環境の準備
次に、新しいプロジェクトとクライアント ライブラリを使用して開発環境を構成します。 この手順は、このガイドの残りの部分に進む前に必要な最後の前提条件です。
空のディレクトリから開始します。
新しい Go モジュールを作成します。
go mod init quickstart
Go から
github.com/apache/cassandra-gocql-driver/v2
パッケージをインポートします。go get github.com/apache/cassandra-gocql-driver/v2
main.go ファイルを作成します。
Go アプリケーションの定型句を追加します。
package main func main() { }
Von Bedeutung
このガイドの残りの手順では、
main
関数内にコードを追加することを前提としています。
オブジェクト モデル
説明 | |
---|---|
Cluster |
クラスターへの特定の接続を表します |
Session |
クラスターへの特定の接続を保持するエンティティ |
コード例
クライアントの認証
まず、このガイドで前に収集した資格情報を使用してクライアントを認証します。
統合開発環境 (IDE) で main.go ファイルを開きます。
main
関数内で、github.com/apache/cassandra-gocql-driver/v2
パッケージと共に次のパッケージをインポートします。context
crypto/tls
import ( "context" "crypto/tls" "github.com/apache/cassandra-gocql-driver/v2" )
このガイドで前に収集した資格情報の文字列変数を作成します。 変数に
username
、password
、およびcontactPoint
という名前を付けます。username := "<username>" password := "<password>" contactPoint := "<contact-point>"
前の手順で指定した資格情報を使用して、
PasswordAuthenticator
の種類のインスタンスを構成します。 結果をauthentication
という名前の変数に格納します。authentication := gocql.PasswordAuthenticator{ Username: username, Password: password, }
トランスポート層セキュリティ (TLS) 1.2 の最小バージョンとターゲット サーバー名として
contactPoint
変数を使用して、SslOptions
のインスタンスを構成します。 結果をsslOptions
という名前の変数に格納します。sslOptions := &gocql.SslOptions{ Config: &tls.Config{ MinVersion: tls.VersionTLS12, ServerName: contactPoint, }, }
NewCluster
とcontactPoint
変数を使用して、新しいクラスター仕様を作成します。cluster := gocql.NewCluster(contactPoint)
前の手順で作成した資格情報と構成変数を使用して、クラスター仕様オブジェクトを構成します。
cluster.SslOpts = sslOptions cluster.Authenticator = authentication
これらの静的値を使用して、クラスター仕様オブジェクトの残りの部分を構成します。
cluster.Keyspace = "cosmicworks" cluster.Port = 10350 cluster.ProtoVersion = 4
CreateSession
を使用してクラスターに接続する新しいセッションを作成します。session, _ := cluster.CreateSession()
main
関数が戻った後でClose
関数を呼び出すようにセッションを構成します。defer session.Close()
新しい
Background
コンテキスト オブジェクトを作成し、ctx
変数に格納します。ctx := context.Background()
Warnung
このガイドでは、認証を簡略化するために、トランスポート層セキュリティ (TLS) の完全な検証が無効になっています。 運用環境のデプロイでは、検証を完全に有効にします。
データをアップサートする
次に、新しいデータをテーブルにアップサートします。 アップサートにより、同じデータがテーブルに既に存在するかどうかに応じて、データが適切に作成または置換されます。
このガイドで前に作成したテーブルに対応するフィールドを使用して、
Product
という名前の新しい型を定義します。type Product struct { id string name string category string quantity int clearance bool }
ヒント
Go では、この種類を別のファイルに作成することも、既存のファイルの末尾に作成することもできます。
Product
型の新しいオブジェクトを作成します。 オブジェクトをproduct
という名前の変数に格納します。product := Product { id: "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb", name: "Yamba Surfboard", category: "gear-surf-surfboards", quantity: 12, clearance: false, }
新しい行を挿入するための Cassandra クエリ言語 (CQL) クエリを使用して、
insertQuery
という名前の新しい文字列変数を作成します。insertQuery := ` INSERT INTO product (id, name, category, quantity, clearance) VALUES (?, ?, ?, ?, ?) `
クエリを実行するには、
Query
関数とExecContext
関数を使用します。product
変数のさまざまなプロパティをクエリ パラメーターとして渡します。_ = session.Query( insertQuery, product.id, product.name, product.category, product.quantity, product.clearance, ).ExecContext(ctx)
データの読み取り
次に、テーブルにアップサートされたデータを読み取る。
同じ
id
フィールドを持つ項目と一致する CQL クエリを使用して、readQuery
という名前の新しい文字列変数を作成します。readQuery := ` SELECT id, name, category, quantity, clearance FROM product WHERE id = ? LIMIT 1 `
このガイドで前に作成した製品と同じ値を使用して、
id
という名前の文字列変数を作成します。id := "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb"
この操作の結果を格納する
matchedProduct
という名前の別の変数を作成します。var matchedProduct Product
Query
、Consistency
、IterContext
、およびScan
関数を一緒に使用して、クエリに一致する単一の項目を検索し、そのプロパティをmatchedProduct
変数に割り当てます。session.Query( readQuery, &id, ).Consistency(gocql.One).IterContext(ctx).Scan( &matchedProduct.id, &matchedProduct.name, &matchedProduct.category, &matchedProduct.quantity, &matchedProduct.clearance, )
データのクエリを実行する
最後に、クエリを使用して、テーブル内の特定のフィルターに一致するすべてのデータを検索します。
findQuery
およびcategory
という名前の文字列変数を作成し、CQLクエリと必須パラメーターを設定します。findQuery := ` SELECT id, name, category, quantity, clearance FROM product WHERE category = ? ALLOW FILTERING ` category := "gear-surf-surfboards"
Query
、Consistency
、IterContext
、およびScanner
関数を一緒に使用して、クエリに一致する複数の項目を反復処理できるスキャナーを作成します。queriedProducts := session.Query( findQuery, &category, ).Consistency(gocql.All).IterContext(ctx).Scanner()
Next
関数とScan
関数を使用してクエリ結果を反復処理し、各結果のプロパティを内部queriedProduct
変数に割り当てます。for queriedProducts.Next() { var queriedProduct Product queriedProducts.Scan( &queriedProduct.id, &queriedProduct.name, &queriedProduct.category, &queriedProduct.quantity, &queriedProduct.clearance, ) // Do something here with each result }
コードを実行する
アプリケーション ディレクトリのターミナルを使用して、新しく作成したアプリケーションを実行します。
go run .
リソースをクリーンアップする
ここで、最近作成したアカウントへの接続を作成するために使用するクライアント ライブラリのパスワードを取得します。
az cosmosdb show
を使用して、アカウントの連絡先ポイントとユーザー名を取得します。az cosmosdb show \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --query "{username:name,contactPoint:documentEndpoint}"
前のコマンドの出力の
contactPoint
プロパティとusername
プロパティの値を記録します。 これらのプロパティの値は、このガイドの後半でライブラリを使用してアカウントに接続するために使用する 連絡先ポイント と ユーザー名 です。az cosmosdb keys list
を使用して、アカウントのキーを取得します。az cosmosdb keys list \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --type "keys"
前のコマンドの出力の
primaryMasterKey
プロパティの値を記録します。 このプロパティの値は、このガイドの後半でライブラリを使用してアカウントに接続するために使用する パスワード です。