

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

# AWS Glue を使用して Apache Cassandra ワークロードを Amazon Keyspaces に移行する
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue"></a>

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

## 概要
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-summary"></a>

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

## 前提条件と制限
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-prereqs"></a>

**前提条件**
+ ソーステーブルを含む Cassandra クラスター
+ ワークロードをレプリケートするための Amazon Keyspaces ターゲットテーブル
+ データの増分変更を含む中間 Parquet ファイルを保存する S3 バケット
+ ジョブ設定ファイルとスクリプトを保存する S3 バケット

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

## アーキテクチャ
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-architecture"></a>

**ソーステクノロジースタック**
+ Apache Cassandra
+ DataStax Server
+ ScyllaDB

**ターゲットテクノロジースタック**
+ Amazon Keyspaces

**移行アーキテクチャ**

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

![\[ノードの VPC に接続する AWS Glue に関するカスタムサービスロール、Amazon Keyspaces、Amazon S3。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/e08048da-8996-4f2c-b8ed-da49fe9e693b/images/76256ab3-a1e6-4c9e-9c40-dc78f51edf0f.png)


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

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

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

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

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

## ツール
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-tools"></a>

**AWS サービスとツール**
+ 「[AWS コマンドラインインターフェイス (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)」は、オープンソースのツールであり、コマンドラインシェルのコマンドを使用して AWS サービスとやり取りすることができます。
+ 「[AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html)」はブラウザベースのシェルで、AWS コマンドラインインターフェイス (AWS CLI) とプリインストールされたさまざまな開発ツールを使用して、AWS のサービスを管理できます。
+ [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html) は完全マネージド型の ETL サービスで、データストアとデータストリーム間でデータを確実に分類、クリーニング、強化、移動できます。
+ [Amazon Keyspaces (Apache Cassandra に向け)](https://docs.aws.amazon.com/keyspaces/latest/devguide/what-is-keyspaces.html) は、AWS クラウドの Cassandra ワークロードの移行、実行、スケーリングを支援するマネージド型データベースサービスです。

**Code**

このパターンのコードは GitHub 内の [CQLReplicator](https://github.com/aws-samples/cql-replicator/tree/main/glue) リポジトリで入手可能です。

## ベストプラクティス
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-best-practices"></a>
+ 移行に必要な 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 ポートに対して自己参照のインバウンドルールを使用します。
+ 増分トラフィック戦略を使用して、移行ワークロードを時間の経過とともに分散します。

## エピック
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-epics"></a>

### CQLReplicator をデプロイする
<a name="deploy-cqlreplicator"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ターゲットのキースペースとテーブルを作成します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue.html) | アプリ所有者、AWS 管理者、DBA、アプリ開発者 | 
| カサンドラに接続するようにカサンドラドライバーを設定します。 | 次の設定スクリプトを使用します。<pre>Datastax-java-driver {<br />  basic.request.consistency = "LOCAL_QUORUM"<br />  basic.contact-points = ["127.0.0.1:9042"]<br />   advanced.reconnect-on-init = true<br />   basic.load-balancing-policy {<br />        local-datacenter = "datacenter1"<br />}<br />advanced.auth-provider = {<br />       class = PlainTextAuthProvider<br />       username = "user-at-sample"<br />       password = "S@MPLE=PASSWORD="<br />}<br />}</pre>前述のスクリプトは Spark Cassandra Connector を使用しています。詳細については、[Cassandra](https://docs.datastax.com/en/developer/java-driver/4.17/manual/core/configuration/reference/) の参照設定を参照してください。 | DBA | 
| Amazon Keyspaces に接続するように Cassandra ドライバーを設定します。 | 次の設定スクリプトを使用します。<pre>datastax-java-driver {<br />basic {<br />  load-balancing-policy {<br />    local-datacenter = us-west-2<br />        }<br />  contact-points = [<br />            "cassandra.us-west-2.amazonaws.com:9142"<br />        ]<br />  request {<br />  page-size = 2500<br />  timeout = 360 seconds<br />  consistency = LOCAL_QUORUM<br />        }<br />    }<br />advanced {<br /> control-connection {<br />  timeout = 360 seconds<br />        }<br /> session-leak.threshold = 6<br /> connection {<br /> connect-timeout = 360 seconds<br /> init-query-timeout = 360 seconds<br /> warn-on-init-error = false<br />        }<br /> auth-provider = {<br />  class = software.aws.mcs.auth.SigV4AuthProvider<br />  aws-region = us-west-2<br /> }<br /><br /> ssl-engine-factory {<br />  class = DefaultSslEngineFactory<br />        }<br />    }<br />}</pre>前述のスクリプトは Spark Cassandra Connector を使用しています。詳細については、[Cassandra](https://docs.datastax.com/en/developer/java-driver/4.17/manual/core/configuration/reference/) の参照設定を参照してください。 | DBA | 
| AWS Glue ジョブ用に IAM ロールを作成します。 | 信頼できるエンティティとして AWS Glue 用の `glue-cassandra-migration` という名前の新しい AWS サービスロールを作成します。`glue-cassandra-migration` は、S3 バケットと Amazon Keyspaces への読み取りおよび書き込みアクセスを提供する必要があります。S3 バケットには、.jar ファイル、Amazon Keyspaces と Cassandra の設定ファイル、および中間 Parquet ファイルが含まれています。例えば、`AWSGlueServiceRole`、`AmazonS3FullAccess`、`AmazonKeyspacesFullAccess` マネージドポリシーが含まれます。 | AWS DevOps | 
| AWS CloudShell で CQLReplicator をダウンロードします。 | 次のコマンドを実行して、プロジェクトをホームフォルダにダウンロードします。<pre>git clone https://github.com/aws-samples/cql-replicator.git<br />cd cql-replicator/glue<br /># Only for AWS CloudShell, the bc package includes bc and dc. Bc is an arbitrary precision numeric processing arithmetic language<br />sudo yum install bc -y</pre> |  | 
| 参照設定ファイルを変更します。 | プロジェクトフォルダの `../glue/conf` ディレクトリに `CassandraConnector.conf` と `KeyspacesConnector.conf` をコピーします。 | AWS DevOps | 
| 移行プロセスを開始します。 | 次のコマンドは、CQLReplicator 環境を初期化します。初期化には、.jar アーティファクトのコピーと、AWS Glue コネクタ、S3 バケット、AWS Glue ジョブ、`migration` キースペース、`ledger` テーブルの作成が含まれます。<pre>cd cql-replicator/glue/bin<br />./cqlreplicator --state init --sg '"sg-1","sg-2"' \ <br />                --subnet "subnet-XXXXXXXXXXXX" \ <br />                --az us-west-2a --region us-west-2 \ <br />                --glue-iam-role glue-cassandra-migration \ <br />                --landing-zone s3://cql-replicator-1234567890-us-west-2<br /></pre>このスクリプトには次のパラメータが含まれます。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue.html) | AWS DevOps | 
| デプロイを検証する。 | 上記のコマンドを実行した後、AWS アカウントには以下が含まれている必要があります。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue.html) | AWS DevOps | 

### CQLReplicator を実行する
<a name="run-cqlreplicator"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 移行プロセスを開始します。 | AWS Glue で CQLReplicator を操作するには、`--state run` コマンドに続けて一連のパラメータを使用する必要があります。これらのパラメータの正確な設定は、主に、固有の移行要件によって決まります。例えば、有効期限 (TTL) の値と更新をレプリケートすることを選択した場合や、1 MB を超えるオブジェクトを Amazon S3 にオフロードする場合、これらの設定は異なる場合があります。Cassandra クラスターから Amazon Keyspaces にワークロードをレプリケートするには、次のコマンドを実行します。<pre>./cqlreplicator --state run --tiles 8  \<br />                --landing-zone s3://cql-replicator-1234567890-us-west-2 \ <br />                --region us-west-2 \                              <br />                --src-keyspace source_keyspace \ <br />                --src-table source_table \  <br />                --trg-keyspace taget_keyspace \<br />                --writetime-column column_name \<br />                --trg-table target_table --inc-traffic</pre>ソースキースペースとテーブルは、Cassandra クラスターの `source_keyspace.source_table` です。ターゲットキースペースとテーブルは、Amazon Keyspaces の `target_keyspace.target_table` です。パラメータ `--inc-traffic` は、多数のリクエストによる増分トラフィックで Cassandra クラスターと Amazon Keyspaces が過負荷になるのを防ぐのに役立ちます。更新をレプリケートするには、コマンドラインに `--writetime-column regular_column_name` を追加します。通常の列は、書き込みタイムスタンプのソースとして使用されます。 | AWS DevOps | 

### 移行プロセスをモニタリングする
<a name="monitor-the-migration-process"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 過去の移行フェーズ中に移行された Cassandra 行を検証します。 | バックフィルフェーズ中にレプリケートされた行数を取得するには、次のコマンドを実行します。<pre>./cqlreplicator --state stats \<br />                --landing-zone s3://cql-replicator-1234567890-us-west-2 \  <br />                --src-keyspace source_keyspace --src-table source_table --region us-west-2</pre> | AWS DevOps | 

### 移行プロセスを停止する
<a name="stop-the-migration-process"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| `cqlreplicator` コマンドまたは AWS Glue コンソールを使用します。 | 移行プロセスを適切に停止するには、次のコマンドを実行します。<pre>./cqlreplicator --state request-stop --tiles 8 \                         <br />                --landing-zone s3://cql-replicator-1234567890-us-west-2 \     <br />                --region us-west-2 \                     <br />                --src-keyspace source_keyspace --src-table source_table</pre>移行プロセスをすぐに停止するには、AWS Glue コンソールを使用します。 | AWS DevOps | 

### クリーンアップ
<a name="clean-up"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| デプロイされたリソースを削除します。 | 次のコマンドは、AWS Glue ジョブ、コネクタ、S3 バケット、および Keyspaces テーブル `ledger` を削除します。<pre>./cqlreplicator --state cleanup --landing-zone s3://cql-replicator-1234567890-us-west-2</pre> | AWS DevOps | 

## トラブルシューティング
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-troubleshooting"></a>


| 問題 | ソリューション | 
| --- | --- | 
| AWS Glue ジョブが失敗し、メモリ不足 (OOM) エラーが返されました。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue.html) | 

## 関連リソース
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-resources"></a>
+ [CQLReplicator with AWS Glue README.MD](https://github.com/aws-samples/cql-replicator/blob/main/glue/README.MD)
+ [AWS Glue ドキュメント](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html)
+ [Amazon Keyspaces ドキュメント](https://docs.aws.amazon.com/keyspaces/latest/devguide/what-is-keyspaces.html)
+ [Apache Cassandra](https://cassandra.apache.org/_/index.html)

## 追加情報
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-additional"></a>

**移行に関する考慮事項**

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)
```