はじめに
cqlsh は対話的な操作には便利ですが、本番環境のアプリケーションでは、より堅牢な接続戦略が必要です。コミュニティが提供する SDK (DataStax ドライバー) は、複数ノードへの接続、各 Cassandra ノード間でのリクエストの分散、接続プールの管理などの複雑なタスクを処理します。このトピックでは、これらの SDK を使用してアプリケーションを ApsaraDB for Cassandra クラスターに接続する方法を説明します。
前提条件
- 接続エンドポイントの取得
-
ApsaraDB for Cassandra コンソールにログインし、左側のナビゲーションウィンドウで [Database Connection] をクリックします。
- セキュリティ上の理由から、デフォルトではパブリックネットワークからのアクセスは無効になっています。パブリックエンドポイントを取得するには、[Apply for Public Endpoint] をクリックします。[Connection Information] ページには、
.cassandra.rds.aliyuncs.comで終わる内部エンドポイントと、デフォルトで9042である [CQL Port] が表示されます。説明 利用可能なエンドポイントの数は、クラスターのサイズによって異なります。複数のエンドポイントが提供されている場合は、ノードに障害が発生した場合に備えて高可用性を確保するために、すべてのエンドポイントを使用してください。パブリックネットワークと内部ネットワークの接続方法は同じで、エンドポイントのみが異なります。
-
- ホワイトリストの設定
接続する前に、クライアントの IP アドレスをホワイトリストに追加する必要があります。詳細については、「ホワイトリストの設定」をご参照ください。
多言語のコード例
Java
- Maven 依存関係の追加
<dependency> <groupId>com.datastax.cassandra</groupId> <artifactId>cassandra-driver-core</artifactId> <version>3.7.2</version> </dependency>重要 この依存関係には、いくつかの共通ライブラリが含まれています。潜在的な依存関係の競合を回避するため、まず新しいプロジェクトでテストすることを推奨します。 - Java 接続コードの記述
import com.datastax.driver.core.Cluster; import com.datastax.driver.core.PlainTextAuthProvider; import com.datastax.driver.core.ResultSet; import com.datastax.driver.core.Session; public class Demo { public static void main(String[] args) { // パブリックまたは内部エンドポイントを指定します。コンソールに表示されているすべてのエンドポイントを指定してください。 // SDK は、リスト内で最初に使用可能なエンドポイントとのコントロール接続を確立します。複数のエンドポイントを指定することで、単一ノードの障害による接続失敗を防ぎます。 // エンドポイントの順序を気にする必要はありません。SDK はリストをシャッフルして、異なるクライアントからのコントロール接続を分散させます。 // 同じリストにパブリックエンドポイントと内部エンドポイントを混在させないでください。 String[] contactPoints = new String[]{ "cds-xxxxxxxx-core-003.cassandra.rds.aliyuncs.com", "cds-xxxxxxxx-core-002.cassandra.rds.aliyuncs.com" }; Cluster cluster = Cluster.builder() .addContactPoints(contactPoints) // ユーザー名とパスワードを指定します。パスワードを忘れた場合は、 [Account Management] ページでリセットできます。 .withAuthProvider(new PlainTextAuthProvider("cassandra", "123456")) // パブリックネットワーク経由で接続する場合は、ユーザー名に @public サフィックスを追加して、パブリックネットワーク接続を使用します。 // そうしないと、すべての内部ノードに接続できなくなったり、例外やパフォーマンス低下が発生したりして、ローカルでの開発やデバッグに影響が出る可能性があります。 // 将来的に、SDK はネットワークの自動検出をサポートする予定です。手動で @public を追加する必要はなくなります。更新情報については、公式のチェンジログをご確認ください。 //.withAuthProvider(new PlainTextAuthProvider("cassandra@public", "123456")) .build(); // クラスターを初期化し、コントロール接続を確立します。セッション作成時に自動的に呼び出されるため、このステップは省略できます。 cluster.init(); // クラスターに接続し、各 Cassandra ノードに対して永続的な接続プールを確立します。 // これはリソースを大量に消費する操作です。リクエストごとに新しいセッションを作成しないでください。ベストプラクティスとして、プロセスごとに 1 つ以上のセッションを作成して再利用します。 // 通常、1 つのセッションで十分です。読み取り操作と書き込み操作で個別のセッションを管理するなど、アプリケーションのニーズに応じて調整できます。 Session session = cluster.connect(); // クエリを実行します。この例では、system_auth.roles テーブルをクエリして、作成されたすべてのロールを一覧表示します。 // これはシステムテーブルです。デフォルトでは、'cassandra' スーパーユーザーのみが SELECT 権限を持ちます。 // テストに別のアカウントを使用する場合は、別のテーブルをクエリするか、アカウントに必要な権限を付与してください。 ResultSet res = session.execute("SELECT * FROM system_auth.roles"); // ResultSet オブジェクトは Iterable インターフェイスを実装しているため、各行を直接コンソールに出力できます。 res.forEach(System.out::println); // セッションを閉じます。 session.close(); // クラスターを閉じます。 cluster.close(); } }
Python
- SDK のインストール
# 特定のバージョンをインストールします (バージョン 3.x を推奨)。 pip install cassandra-driver==3.19.0 # 最新バージョンをインストールします。 pip install cassandra-driver # https://pypi.org/project/cassandra-driver/#history - Python 接続コードの記述
#!/usr/bin/env python # -*- coding: UTF-8 -*- import logging import sys from cassandra.cluster import Cluster from cassandra.auth import PlainTextAuthProvider logging.basicConfig(stream=sys.stdout, level=logging.INFO) cluster = Cluster( # パブリックまたは内部エンドポイントを指定します。コンソールに表示されているすべてのエンドポイントを指定してください。 # SDK は、リスト内で最初に使用可能なエンドポイントとのコントロール接続を確立します。複数のエンドポイントを指定することで、単一ノードの障害による接続失敗を防ぎます。 # エンドポイントの順序を気にする必要はありません。SDK はリストをシャッフルして、異なるクライアントからのコントロール接続を分散させます。 # 同じリストにパブリックエンドポイントと内部エンドポイントを混在させないでください。 contact_points=["cds-xxxxxxxx-core-003.cassandra.rds.aliyuncs.com", "cds-xxxxxxxx-core-002.cassandra.rds.aliyuncs.com"], # ユーザー名とパスワードを指定します。パスワードを忘れた場合は、 [Account Management] ページでリセットできます。 auth_provider=PlainTextAuthProvider("cassandra", "123456")) # パブリックネットワーク経由で接続する場合は、ユーザー名に @public サフィックスを追加して、パブリックネットワーク接続を使用します。 # そうしないと、すべての内部ノードに接続できなくなったり、例外やパフォーマンス低下が発生したりして、ローカルでの開発やデバッグに影響が出る可能性があります。 # 将来的に、SDK はネットワークの自動検出をサポートする予定です。手動で @public を追加する必要はなくなります。更新情報については、公式のチェンジログをご確認ください。 # auth_provider=PlainTextAuthProvider("cassandra@public", "123456")) # クラスターに接続し、各 Cassandra ノードに対して永続的な接続プールを確立します。 # これはリソースを大量に消費する操作です。リクエストごとに新しいセッションを作成しないでください。ベストプラクティスとして、プロセスごとに 1 つ以上のセッションを作成して再利用します。 # 通常、1 つのセッションで十分です。読み取り操作と書き込み操作で個別のセッションを管理するなど、アプリケーションのニーズに応じて調整できます。 session = cluster.connect() # クエリを実行します。この例では、system_auth.roles テーブルをクエリして、作成されたすべてのロールを一覧表示します。 # これはシステムテーブルです。デフォルトでは、'cassandra' スーパーユーザーのみが SELECT 権限を持ちます。 # テストに別のアカウントを使用する場合は、別のテーブルをクエリするか、アカウントに必要な権限を付与してください。 rows = session.execute('SELECT * FROM system_auth.roles') # 各行をコンソールに出力します。 for row in rows: print("# row: {}".format(row)) # セッションをシャットダウンします。 session.shutdown() # クラスターをシャットダウンします。 cluster.shutdown() - その他の言語
その他の言語の接続プロセスは、Java や Python の場合と同様です。詳細については、GitHub の公式 DataStax ドライバーのドキュメントをご参照ください: