AWS Glue を使用して Apache Cassandra ワークロードを Amazon Keyspaces に移行する - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS Glue を使用して Apache Cassandra ワークロードを Amazon Keyspaces に移行する

Amazon Web Services、Nikolai Kolesnikov、Karthiga Priya Chandran、および Samir Patel

概要

このパターンは、AWS Glue で CQLReplicator を使用して Amazon Keyspaces (Apache Cassandra 向け) に既存の Apache Cassandra ワークロードを移行する方法を示しています。AWS Glue で CQLReplicator を使用して、ワークロードの移行に伴うレプリケーションラグを数分に短縮できます。Amazon Simple Storage Service (Amazon S3) バケットを使用して、Apache Parquet ファイル、設定ファイル、スクリプトなどの移行に必要なデータを保存する方法についても学びます。このパターンでは、Cassandra ワークロードが仮想プライベートクラウド (VPC) 内の Amazon Elastic Compute Cloud (Amazon EC2) インスタンスでホストされていることを前提としています。

前提条件と制限

前提条件

  • ソーステーブルを含む Cassandra クラスター

  • ワークロードをレプリケートするための Amazon Keyspaces ターゲットテーブル

  • データの増分変更を含む中間 Parquet ファイルを保存する S3 バケット

  • ジョブ設定ファイルとスクリプトを保存する S3 バケット

制限

  • AWS Glue で CQLReplicator が Cassandra ワークロードにデータ処理ユニット (DPU) をプロビジョニングするには、ある程度の時間が必要です。Cassandra クラスターと Amazon キースペース内のターゲットキースペースおよびテーブル間のレプリケーションラグは、ほんの数分しか続かない可能性があります。

アーキテクチャ

ソーステクノロジースタック

  • Apache Cassandra

  • DataStax Server

  • ScyllaDB

ターゲットテクノロジースタック

  • Amazon Keyspaces

移行アーキテクチャ

次の図は、Cassandra クラスターが EC2 インスタンスでホストされ、3 つのアベイラビリティーゾーンに分散しているアーキテクチャの例を示しています。Cassandra ノードは、プライベートサブネットでホストされます。

ノードの VPC に接続する AWS Glue に関するカスタムサービスロール、Amazon Keyspaces、Amazon S3。

この図表は、次のワークフローを示しています:

  1. カスタムサービスロールは、Amazon Keyspaces と S3 バケットへのアクセスを提供します。

  2. AWS Glue ジョブは S3 バケット内のジョブ設定とスクリプトを読み取ります。

  3. AWS Glue ジョブはポート 9042 を介して接続し、Cassandra クラスターからデータを読み取ります。

  4. AWS Glue ジョブはポート 9142 を介して接続し、Amazon Keyspaces にデータを書き込みます。

ツール

AWS サービスとツール

  • AWS コマンドラインインターフェイス (AWS CLI)」は、オープンソースのツールであり、コマンドラインシェルのコマンドを使用して AWS サービスとやり取りすることができます。

  • AWS CloudShell」はブラウザベースのシェルで、AWS コマンドラインインターフェイス (AWS CLI) とプリインストールされたさまざまな開発ツールを使用して、AWS のサービスを管理できます。

  • AWS Glue は完全マネージド型の ETL サービスで、データストアとデータストリーム間でデータを確実に分類、クリーニング、強化、移動できます。

  • Amazon Keyspaces (Apache Cassandra に向け) は、AWS クラウドの Cassandra ワークロードの移行、実行、スケーリングを支援するマネージド型データベースサービスです。

Code

このパターンのコードは GitHub 内の CQLReplicator リポジトリで入手可能です。

ベストプラクティス

  • 移行に必要な AWS Glue リソースを特定するには、ソース Cassandra テーブルの行数を推定します。例えば、84 GB のディスクで 0.25 DPU (2 基の vCPU、4 GB のメモリ) あたり 250 K 行になります。

  • CQLReplicator を実行する前に、Amazon Keyspaces テーブルを事前ウォーミングします。例えば、8 つの CQLReplicator タイル (AWS Glue ジョブ) は 1 秒あたり最大 22 K WCU を書き込むことができるため、ターゲットは 1 秒あたり最大 25~30 K WCU まで事前ウォームアップする必要があります。

  • AWS Glue コンポーネント間の通信を有効にするには、セキュリティグループ内のすべての TCP ポートに対して自己参照のインバウンドルールを使用します。

  • 増分トラフィック戦略を使用して、移行ワークロードを時間の経過とともに分散します。

エピック

タスク説明必要なスキル

ターゲットのキースペースとテーブルを作成します。

  1. Amazon Keyspaces でキースペースとテーブルを作成します。

    書き込み容量の詳細については、このパターンの「追加情報」セクションにある「書き込み単位の計算」を参照してください。

    Cassandra Query Language (CQL) を使用してキースペースを作成することもできます。詳細については、このパターンの「追加情報」セクションにある「CQL を使ったキースペースの作成」を参照してください。

    注記

    テーブルを作成したら、不要な請求を避けるためにテーブルをオンデマンドキャパシティモードに切り替えることを検討してください。

  2. スループットモードに更新するには、次のスクリプトを実行します。

    ALTER TABLE target_keyspace.target_table WITH CUSTOM_PROPERTIES = { 'capacity_mode':{ 'throughput_mode':'PAY_PER_REQUEST'} }
アプリ所有者、AWS 管理者、DBA、アプリ開発者

カサンドラに接続するようにカサンドラドライバーを設定します。

次の設定スクリプトを使用します。

Datastax-java-driver { basic.request.consistency = "LOCAL_QUORUM" basic.contact-points = ["127.0.0.1:9042"] advanced.reconnect-on-init = true basic.load-balancing-policy { local-datacenter = "datacenter1" } advanced.auth-provider = { class = PlainTextAuthProvider username = "user-at-sample" password = "S@MPLE=PASSWORD=" } }
注記

前述のスクリプトは Spark Cassandra Connector を使用しています。詳細については、Cassandra の参照設定を参照してください。

DBA

Amazon Keyspaces に接続するように Cassandra ドライバーを設定します。

次の設定スクリプトを使用します。

datastax-java-driver { basic { load-balancing-policy { local-datacenter = us-west-2 } contact-points = [ "cassandra.us-west-2.amazonaws.com:9142" ] request { page-size = 2500 timeout = 360 seconds consistency = LOCAL_QUORUM } } advanced { control-connection { timeout = 360 seconds } session-leak.threshold = 6 connection { connect-timeout = 360 seconds init-query-timeout = 360 seconds warn-on-init-error = false } auth-provider = { class = software.aws.mcs.auth.SigV4AuthProvider aws-region = us-west-2 } ssl-engine-factory { class = DefaultSslEngineFactory } } }
注記

前述のスクリプトは Spark Cassandra Connector を使用しています。詳細については、Cassandra の参照設定を参照してください。

DBA

AWS Glue ジョブ用に IAM ロールを作成します。

信頼できるエンティティとして AWS Glue 用の glue-cassandra-migration という名前の新しい AWS サービスロールを作成します。

注記

glue-cassandra-migration は、S3 バケットと Amazon Keyspaces への読み取りおよび書き込みアクセスを提供する必要があります。S3 バケットには、.jar ファイル、Amazon Keyspaces と Cassandra の設定ファイル、および中間 Parquet ファイルが含まれています。例えば、AWSGlueServiceRoleAmazonS3FullAccessAmazonKeyspacesFullAccess マネージドポリシーが含まれます。

AWS DevOps

AWS CloudShell で CQLReplicator をダウンロードします。

次のコマンドを実行して、プロジェクトをホームフォルダにダウンロードします。

git clone https://github.com/aws-samples/cql-replicator.git cd cql-replicator/glue # Only for AWS CloudShell, the bc package includes bc and dc. Bc is an arbitrary precision numeric processing arithmetic language sudo yum install bc -y

参照設定ファイルを変更します。

プロジェクトフォルダの ../glue/conf ディレクトリに CassandraConnector.confKeyspacesConnector.conf をコピーします。

AWS DevOps

移行プロセスを開始します。

次のコマンドは、CQLReplicator 環境を初期化します。初期化には、.jar アーティファクトのコピーと、AWS Glue コネクタ、S3 バケット、AWS Glue ジョブ、migration キースペース、ledger テーブルの作成が含まれます。

cd cql-replicator/glue/bin ./cqlreplicator --state init --sg '"sg-1","sg-2"' \ --subnet "subnet-XXXXXXXXXXXX" \ --az us-west-2a --region us-west-2 \ --glue-iam-role glue-cassandra-migration \ --landing-zone s3://cql-replicator-1234567890-us-west-2

このスクリプトには次のパラメータが含まれます。

  • --sg - AWS Glue から Cassandra クラスターへのアクセスを許可し、すべてのトラフィックに自己参照のインバウンドルールを含むセキュリティグループ

  • --subnet - Cassandra クラスターが属するサブネット

  • --az - サブネットのアベイラビリティーゾーン

  • --region - Cassandra クラスターがデプロイされている AWS リージョン

  • --glue-iam-role - AWS Glue がユーザーに代わって Amazon Keyspaces と Amazon S3 を呼び出すときに引き受けることができる IAM ロールのアクセス許可

  • --landing zone - S3 バケットを再利用するためのオプションのパラメータ (--landing zone パラメータの値を指定しない場合、init プロセスは設定ファイル、.jar アーティファクト、および中間ファイルを保存する新しいバケットを作成しようとします)

AWS DevOps

デプロイを検証する。

上記のコマンドを実行した後、AWS アカウントには以下が含まれている必要があります。

  • AWS Glue 内に、CQLReplicator AWS Glue ジョブと AWS Glue コネクタ

  • アーティファクトを格納する S3 バケット

  • Amazon Keyspaces 内に、ターゲットであるキースペース migration と、ledger テーブル

AWS DevOps
タスク説明必要なスキル

移行プロセスを開始します。

AWS Glue で CQLReplicator を操作するには、--state run コマンドに続けて一連のパラメータを使用する必要があります。これらのパラメータの正確な設定は、主に、固有の移行要件によって決まります。例えば、有効期限 (TTL) の値と更新をレプリケートすることを選択した場合や、1 MB を超えるオブジェクトを Amazon S3 にオフロードする場合、これらの設定は異なる場合があります。

Cassandra クラスターから Amazon Keyspaces にワークロードをレプリケートするには、次のコマンドを実行します。

./cqlreplicator --state run --tiles 8 \ --landing-zone s3://cql-replicator-1234567890-us-west-2 \ --region us-west-2 \ --src-keyspace source_keyspace \ --src-table source_table \ --trg-keyspace taget_keyspace \ --writetime-column column_name \ --trg-table target_table --inc-traffic

ソースキースペースとテーブルは、Cassandra クラスターの source_keyspace.source_table です。ターゲットキースペースとテーブルは、Amazon Keyspaces の target_keyspace.target_table です。パラメータ --inc-traffic は、多数のリクエストによる増分トラフィックで Cassandra クラスターと Amazon Keyspaces が過負荷になるのを防ぐのに役立ちます。

更新をレプリケートするには、コマンドラインに --writetime-column regular_column_name を追加します。通常の列は、書き込みタイムスタンプのソースとして使用されます。

AWS DevOps
タスク説明必要なスキル

過去の移行フェーズ中に移行された Cassandra 行を検証します。

バックフィルフェーズ中にレプリケートされた行数を取得するには、次のコマンドを実行します。

./cqlreplicator --state stats \ --landing-zone s3://cql-replicator-1234567890-us-west-2 \ --src-keyspace source_keyspace --src-table source_table --region us-west-2
AWS DevOps
タスク説明必要なスキル

cqlreplicator コマンドまたは AWS Glue コンソールを使用します。

移行プロセスを適切に停止するには、次のコマンドを実行します。

./cqlreplicator --state request-stop --tiles 8 \ --landing-zone s3://cql-replicator-1234567890-us-west-2 \ --region us-west-2 \ --src-keyspace source_keyspace --src-table source_table

移行プロセスをすぐに停止するには、AWS Glue コンソールを使用します。

AWS DevOps
タスク説明必要なスキル

デプロイされたリソースを削除します。

次のコマンドは、AWS Glue ジョブ、コネクタ、S3 バケット、および Keyspaces テーブル ledger を削除します。

./cqlreplicator --state cleanup --landing-zone s3://cql-replicator-1234567890-us-west-2
AWS DevOps

トラブルシューティング

問題ソリューション

AWS Glue ジョブが失敗し、メモリ不足 (OOM) エラーが返されました。

  1. ワーカータイプを変更します (スケールアップ)。例えば、G0.25XG.1X に、または G.1XG.2X に変更します。または、CQLReplicator で AWS Glue ジョブあたりの DPU の数を増やします (スケールアウト)。

  2. 中断された時点から移行プロセスを開始します。失敗した CQLReplicator ジョブを再開するには、同じパラメータを使用して --state run コマンドを再実行します。

関連リソース

追加情報

移行に関する考慮事項

AWS Glue を使用して Cassandra ワークロードを Amazon Keyspaces に移行できます。移行プロセス中も Cassandra ソースデータベースは完全に機能したままです。レプリケーションが完了したら、Cassandra クラスターと Amazon Keyspaces 間のレプリケーション遅延を最小限 (数分未満) に抑えて、アプリケーションを Amazon Keyspaces に切り替えることができます。データ整合性を維持するために、同様のパイプラインを使用して Amazon Keyspaces から Cassandra クラスターにデータを複製して戻すこともできます。

単位計算の書き込み

例として、1 時間の間に行サイズ 1 KiB で 500,000,000 を書き込むつもりだとします。必要な Amazon Keyspaces 書き込みユニット (WCU) の総数は、次の計算に基づいています。

(number of rows/60 mins 60s) 1 WCU per row = (500,000,000/(60*60s) * 1 WCU) = 69,444 WCUs required

1 秒あたり 69,444 WCU は 1 時間のレートですが、オーバーヘッドをいくらか抑えることもできます。 例えば、69,444 * 1.10 = 76,388 WCUs は10% のオーバーヘッドがあります。

CQL を使ったキースペースの作成

CQL を使用してキースペースを作成するには、次のコマンドを実行します。

CREATE KEYSPACE target_keyspace WITH replication = {'class': 'SingleRegionStrategy'} CREATE TABLE target_keyspace.target_table ( userid uuid, level text, gameid int, description text, nickname text, zip text, email text, updatetime text, PRIMARY KEY (userid, level, gameid) ) WITH default_time_to_live = 0 AND CUSTOM_PROPERTIES = {'capacity_mode':{ 'throughput_mode':'PROVISIONED', 'write_capacity_units':76388, 'read_capacity_units':3612 }} AND CLUSTERING ORDER BY (level ASC, gameid ASC)