Cassandra プロキシを使用して Spanner Omni に接続する

Apache Cassandra プロキシを Spanner Omni に接続して、既存の Cassandra アプリケーションが Cassandra クエリ言語(CQL)を使用して Spanner Omni とやり取りできるようにします。この統合により、Cassandra クライアント アプリケーションとの互換性を維持しながら、Spanner Omni の機能を使用できます。

プロキシを接続する手順の概要は次のとおりです。

  1. Cassandra-to-Spanner プロキシ リポジトリのクローンを作成します。

  2. 提供されているスキーマ変換スクリプトを使用して、Cassandra スキーマ定義を Spanner Omni スキーマに変換します。このスクリプトは、プレーン テキスト、TLS、mTLS のセキュリティ モードをサポートしています。

  3. Spanner Omni エンドポイントとセキュリティ設定で構成ファイルを更新して、プロキシ アダプタを構成します。

  4. プロキシをビルドして実行します。次に、cqlsh を使用して接続し、オペレーションを開始します。

詳細については、Spanner ドキュメントの Cassandra インターフェースをご覧ください。

始める前に

開始する前に、次の要件を満たしてください。

  • Spanner Omni デプロイを構成し、データベースを作成します。

  • 必要な環境変数を設定して、環境内で多重化されたセッションを有効にします。

  • ローカルマシンに Go がインストールされていることを確認します。

  • 使用上の考慮事項については、Cassandra-to-Spanner プロキシの制限事項をご覧ください。

  • プロキシと Spanner Omni 間の通信に使用するセキュリティ モード(平文、TLS、mTLS)を確立します。

環境変数を設定する

Cassandra プロキシを使用するには、必要な環境変数を設定して多重化されたセッションを有効にする必要があります。多重化されたセッションは Spanner Omni 接続に必要ですが、Spanner クライアント ライブラリとドライバではデフォルトで無効になっています。

次の環境変数を設定します。

GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS_FOR_RW=true
GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS_PARTITIONED_OPS=true
GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS=true

リポジトリのクローンを作成する

プロキシをサポートするリポジトリのクローンを作成し、マシンに Go がインストールされていることを確認します。

git clone https://github.com/cloudspannerecosystem/cassandra-to-spanner-proxy.git

// Ensure all Go modules are installed
go mod tidy

Cassandra スキーマを変換する

すべての Cassandra テーブルを事前に作成します。schema_converter/cql_to_spanner_schema_converter.go スクリプトは、CQL ファイルの Cassandra CREATE TABLE クエリを Spanner CREATE TABLE クエリに変換します。

  • --database DATABASE_ID: Spanner Omni でターゲット データベース名を指定します。DATABASE_ID は、データベースの名前に置き換えます。

  • --cql PATH_TO_CQL_FILE: Cassandra スキーマ定義を含む CQL ファイルのパスを指定します。

  • --endpoint ENDPOINT: Spanner Omni エンドポイント アドレスを指定します。ENDPOINT は、Spanner Omni エンドポイントに置き換えます。

    go run schema_converter/cql_to_spanner_schema_converter.go --database DATABASE_ID --cql PATH_TO_CQL_FILE --endpoint ENDPOINT
    

    スキーマ コンバータは、書式なしテキスト、TLS、mTLS の 3 つの Spanner Omni セキュリティ モードすべてをサポートしています。各セキュリティ モードには、追加のパラメータが必要です。

  • プレーン テキスト モードの場合は、--usePlainText フラグを使用します。

    go run schema_converter/cql_to_spanner_schema_converter.go --database DATABASE_ID --cql PATH_TO_CQL_FILE --endpoint ENDPOINT --usePlainText
    
  • TLS モードの場合は、CA 証明書ファイルのパスを指定して --caCertificate フラグを使用します。

    go run schema_converter/cql_to_spanner_schema_converter.go --database DATABASE_ID --cql PATH_TO_CQL_FILE --endpoint ENDPOINT --caCertificate PATH_TO_CA_CRT
    
  • mTLS モードの場合は、対応するパスを指定して --caCertificate--clientCertificate--clientKey フラグを使用します。

    go run schema_converter/cql_to_spanner_schema_converter.go --database DATABASE_ID --cql PATH_TO_CQL_FILE --endpoint ENDPOINT --caCertificate PATH_TO_CA_CRT --clientCertificate PATH_TO_CLIENT_CERT --clientKey PATH_TO_CLIENT_KEY
    

    スクリプトは、TableConfigurations テーブルが存在しない場合は、そのテーブルも作成します。このテーブルは、Cassandra テーブルと列のスキーマ メタデータを追跡します。

    CREATE TABLE IF NOT EXISTS TableConfigurations (
        `KeySpaceName` STRING(MAX),
        `TableName` STRING(MAX),
        `ColumnName` STRING(MAX),
        `ColumnType` STRING(MAX),
        `IsPrimaryKey` BOOL,
        `PK_Precedence` INT64,
    ) PRIMARY KEY (TableName, ColumnName, KeySpaceName);
    

プロキシ アダプタを構成する

スキーマ変換スクリプトを使用して Cassandra テーブルを作成したら、テーブルに対してオペレーションを実行するようにアダプタを構成します。アダプタを設定する手順は次のとおりです。

リポジトリのルート ディレクトリにある config.yaml ファイルを、使用可能な構成オプションで更新します。アダプタ構成ファイルでは、関連するセキュリティ モード オプションとともに Spanner Omni エンドポイントを定義する必要があります。

# [Optional] endpoint configuration for spanner
endpoint: ENDPOINT

# [Optional] If set to True, will connect to endpoint over plain text
usePlainText: False

# [Optional] CA certificate path for TLS and mTLS configuration
caCertificate: PATH_TO_CA_CRT

# [Optional] client certificate path for mTLS configuration
clientCertificate: PATH_TO_CLIENT_CERT

# [Optional] client key path for mTLS configuration
clientKey: PATH_TO_CLIENT_KEY

次の構成設定は、アダプタを実行するための最小構成を示しています。

cassandra_to_spanner_configs:
  # [Optional] endpoint configuration for spanner
  endpoint: ENDPOINT

  # Uncomment the options as required by the security mode of the Spanner Omni deployment
  # [Optional] If set to True, will connect to endpoint over plain text
  # usePlainText: False
  # [Optional] CA certificate path for TLS and mTLS configuration
  # caCertificate: /tmp/ca.crt
  # [Optional] client certificate path for mTLS configuration
  # clientCertificate: /tmp/client.crt
  # [Optional] client key path for mTLS configuration
  # clientKey: /tmp/client.key

listeners:
  - name: CLUSTER_NAME
    port: 9042
    spanner:
      databaseId: DATABASE_ID

プロキシをビルドして実行する

プロキシ アダプタを構成したら、次のコマンドを使用してプロキシをビルドして実行します。

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o cassandra-to-spanner-proxy .
./cassandra-to-spanner-proxy

次のコマンドを使用して、シェルでプロキシに接続します。

./cqlsh localhost 9042