非構造化データの格納、管理、クエリを Node.js するための Azure Cosmos DB for Apache Cassandra クライアント ライブラリの使用を開始します。 このガイドの手順に従って、新しいアカウントの作成、Node.js クライアント ライブラリのインストール、アカウントへの接続、一般的な操作の実行、最終的なサンプル データのクエリを実行します。
API リファレンスのドキュメント | ライブラリのソース コード | パッケージ (npm)
[前提条件]
Azure サブスクリプション
- Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
Azure Cloud Shell の Azure CLI の最新バージョン。
- CLI 参照コマンドをローカルで実行する場合は、
az login
コマンドを使用して Azure CLI にサインインします。
- CLI 参照コマンドをローカルで実行する場合は、
- Node.js 22 以降
セットアップ中
まず、このガイドのアカウントと開発環境を設定します。 このセクションでは、アカウントの作成、資格情報の取得、開発環境の準備のプロセスについて説明します。
アカウントを作成する
まず、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
プロパティの値を記録します。 このプロパティの値は、このガイドの後半でライブラリを使用してアカウントに接続するために使用する パスワード です。
開発環境の準備
次に、新しいプロジェクトとクライアント ライブラリを使用して開発環境を構成します。 この手順は、このガイドの残りの部分に進む前に必要な最後の前提条件です。
空のフォルダーから開始します。
新しいモジュールを初期化します。
npm init es6 --yes
ノード パッケージ マネージャー (npm) から
cassandra-driver
パッケージをインストールします。npm install --save cassandra-driver
index.js ファイルを作成します。
空のディレクトリから開始します。
新しいモジュールを初期化します。
npm init es6 --yes
ノード パッケージ マネージャー (npm) から
typescript
パッケージをインストールします。npm install --save-dev typescript
npm から
tsx
パッケージをインストールします。npm install --save-dev tsx
npm から
cassandra-driver
パッケージをインストールします。npm install --save cassandra-driver
コンパイラ (
tsc
) を使用して TypeScript プロジェクトを初期化します。npx tsc --init --target es2017 --module es2022 --moduleResolution nodenext
index.ts ファイルを作成します。
オブジェクト モデル
説明 | |
---|---|
Client |
クラスターへの特定の接続を表します |
Mapper |
クエリの実行に使用される Cassandra クエリ言語 (CQL) クライアント |
コード例
クライアントの認証
まず、このガイドで前に収集した資格情報を使用してクライアントを認証します。
統合開発環境 (IDE) で index.js ファイルを開きます。
cassandra-driver
モジュールから次の型をインポートします。cassandra
cassandra.Client
cassandra.mapping.Mapper
cassandra.auth.PlainTextAuthProvider
import cassandra from 'cassandra-driver'; const { Client } = cassandra; const { Mapper } = cassandra.mapping; const { PlainTextAuthProvider } = cassandra.auth;
このガイドで前に収集した資格情報の文字列定数変数を作成します。 変数に
username
、password
、およびcontactPoint
という名前を付けます。const username = '<username>'; const password = '<password>'; const contactPoint = '<contact-point>';
Azure Cosmos DB for Apache Cassandra アカウントを作成したリージョンに別の文字列変数を作成します。 この変数に
region
名前を付けます。const region = '<azure-region>';
前の手順で指定した資格情報を使用して、新しい
PlainTextAuthProvider
オブジェクトを作成します。let authProvider = new PlainTextAuthProvider( username, password );
前の手順で作成した資格情報と構成変数を使用して、
Client
オブジェクトを作成します。let client = new Client({ contactPoints: [`${contactPoint}:10350`], authProvider: authProvider, localDataCenter: region, sslOptions: { secureProtocol: 'TLSv1_2_method' }, });
クラスターに非同期接続します。
await client.connect();
cosmicworks
キースペースとproduct
テーブルをターゲットとする新しいマッパーを作成します。 マッパーProduct
に名前を付けます。const mapper = new Mapper(client, { models: { 'Product': { tables: ['product'], keyspace: 'cosmicworks' } } });
forModel
関数とProduct
マッパー名を使用してマッパー インスタンスを生成します。const productMapper = mapper.forModel('Product');
統合開発環境 (IDE) で index.ts ファイルを開きます。
cassandra-driver
モジュールから次の型をインポートします。cassandra.auth
cassandra.mapping
cassandra.types
cassandra.Client
cassandra.ClientOptions
cassandra.mapping.Mapper
cassandra.auth.PlainTextAuthProvider
import { auth, mapping, types, Client, ClientOptions } from 'cassandra-driver'; const { Mapper } = mapping; const { PlainTextAuthProvider } = auth;
このガイドで前に収集した資格情報の文字列定数変数を作成します。 変数に
username
、password
、およびcontactPoint
という名前を付けます。const username: string = '<username>'; const password: string = '<password>'; const contactPoint: string = '<contact-point>';
Azure Cosmos DB for Apache Cassandra アカウントを作成したリージョンに別の文字列変数を作成します。 この変数に
region
名前を付けます。const region: string = '<azure-region>';
前の手順で指定した資格情報を使用して、新しい
PlainTextAuthProvider
オブジェクトを作成します。let authProvider = new PlainTextAuthProvider( username, password );
トランスポート層セキュリティ (TLS) 1.2 プロトコルを使用していることを確認するオプションを含む匿名オブジェクトを作成します。
let sslOptions = { secureProtocol: 'TLSv1_2_method' };
前の手順で作成した資格情報と構成変数を使用して、
ClientOptions
オブジェクトを作成します。let clientOptions: ClientOptions = { contactPoints: [`${contactPoint}:10350`], authProvider: authProvider, localDataCenter: region, sslOptions: sslOptions };
コンストラクターの
clientOptions
変数を使用して、Client
オブジェクトを作成します。let client = new Client(clientOptions);
クラスターに非同期接続します。
await client.connect();
cosmicworks
キースペースとproduct
テーブルをターゲットとする新しいマッパーを作成します。 マッパーProduct
に名前を付けます。const mapper = new Mapper( client, { models: { 'Product': { tables: ['product'], keyspace: 'cosmicworks' } } });
forModel
関数とProduct
マッパー名を使用してマッパー インスタンスを生成します。const productMapper = mapper.forModel('Product');
Warnung
このガイドでは、認証を簡略化するために、トランスポート層セキュリティ (TLS) の完全な検証が無効になっています。 運用環境のデプロイでは、検証を完全に有効にします。
データをアップサートする
次に、新しいデータをテーブルにアップサートします。 アップサートにより、同じデータがテーブルに既に存在するかどうかに応じて、データが適切に作成または置換されます。
product
という名前の変数に新しいオブジェクトを作成します。const product = { id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', name: 'Yamba Surfboard', category: 'gear-surf-surfboards', quantity: 12, price: 850.00, clearance: false };
前の手順で作成した
product
変数を渡すinsert
関数を非同期で呼び出します。await productMapper.insert(product);
このガイドで前に作成したテーブルに対応するフィールドを使用して、
Product
という名前の新しいインターフェイスを定義します。タイプ Id
string
Name
string
Category
string
Quantity
int
Price
decimal
Clearance
bool
interface Product { id: string; name: string; category: string; quantity: number; price: number; clearance: boolean; }
ヒント
Node.jsでは、この型を別のファイルに作成することも、既存のファイルの末尾に作成することもできます。
Product
型の新しいオブジェクトを作成します。 オブジェクトをproduct
という名前の変数に格納します。const product: Product = { id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', name: 'Yamba Surfboard', category: 'gear-surf-surfboards', quantity: 12, price: 850.00, clearance: false };
前の手順で作成した
product
変数を渡すinsert
関数を非同期で呼び出します。await productMapper.insert(product);
データの読み取り
次に、テーブルにアップサートされたデータを読み取る。
filter
という名前の匿名オブジェクトを作成します。 このオブジェクトには、このガイドで前に作成した製品と同じ値を持つid
という名前のプロパティを含めます。const filter = { id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb' };
filter
変数を渡すマッパーのget
関数を呼び出します。 結果をmatchedProduct
という名前の変数に格納します。let matchedProduct = await productMapper.get(filter);
filter
という名前の匿名オブジェクトを作成します。 このオブジェクトには、このガイドで前に作成した製品と同じ値を持つid
という名前のプロパティを含めます。const filter = { id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb' };
filter
変数を渡すマッパーのget
関数を呼び出します。 結果を、Product
型のmatchedProduct
という名前の変数に格納します。let matchedProduct: Product = await productMapper.get(filter);
データのクエリを実行する
最後に、クエリを使用して、テーブル内の特定のフィルターに一致するすべてのデータを検索します。
同じ
category
フィールドを持つ項目と一致する CQL クエリを使用して、query
という名前の新しい文字列変数を作成します。const query = ` SELECT * FROM cosmicworks.product WHERE category = :category ALLOW FILTERING `;
params
という名前の匿名オブジェクトを作成します。 このオブジェクトには、このガイドで前に作成した製品と同じ値を持つcategory
という名前のプロパティを含めます。const params = { category: 'gear-surf-surfboards' };
query
変数とparams
変数の両方を引数として渡すexecute
関数を非同期的に呼び出します。 結果のrows
プロパティをmatchedProducts
という名前の変数として格納します。let { rows: matchedProducts } = await client.execute(query, params);
製品の配列に対して
foreach
メソッドを呼び出して、クエリ結果を反復処理します。matchedProducts.forEach(product => { // Do something here with each result });
同じ
category
フィールドを持つ項目と一致する CQL クエリを使用して、query
という名前の新しい文字列変数を作成します。const query: string = ` SELECT * FROM cosmicworks.product WHERE category = :category ALLOW FILTERING `;
params
という名前の匿名オブジェクトを作成します。 このオブジェクトには、このガイドで前に作成した製品と同じ値を持つcategory
という名前のプロパティを含めます。const params = { category: 'gear-surf-surfboards' };
query
変数とparams
変数の両方を引数として渡すexecute
関数を非同期的に呼び出します。 結果を、types.ResultSet
型のresult
という名前の変数に格納します。let result: types.ResultSet = await client.execute(query, params);
結果の
rows
プロパティを、Product[]
型のmatchedProducts
という名前の変数として格納します。let matchedProducts: Product[] = result.rows;
製品の配列に対して
foreach
メソッドを呼び出して、クエリ結果を反復処理します。matchedProducts.forEach((product: Product) => { // Do something here with each result });
コードを実行する
アプリケーション ディレクトリのターミナルを使用して、新しく作成したアプリケーションを実行します。
node index.js
npx tsx index.ts
リソースをクリーンアップする
アカウントが不要になったら、リソースを削除して Azure サブスクリプションからアカウント を削除 します。
az cosmosdb delete \
--resource-group "<resource-group-name>" \
--name "<account-name>"