

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Migrez les charges de travail Apache Cassandra vers Amazon Keyspaces à l'aide d'AWS Glue
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue"></a>

*Nikolai Kolesnikov, Karthiga Priya Chandran et Samir Patel, Amazon Web Services*

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

Ce modèle vous montre comment migrer vos charges de travail Apache Cassandra existantes vers Amazon Keyspaces (pour Apache Cassandra) à l'aide d'AWS Glue. CQLReplicator Vous pouvez utiliser CQLReplicator AWS Glue pour réduire à quelques minutes le délai de réplication lié à la migration de vos charges de travail. Vous apprendrez également à utiliser un bucket Amazon Simple Storage Service (Amazon S3) pour stocker les données nécessaires à la migration, [notamment les fichiers Apache](https://parquet.apache.org/) Parquet, les fichiers de configuration et les scripts. Ce modèle suppose que vos charges de travail Cassandra sont hébergées sur des instances Amazon Elastic Compute Cloud EC2 (Amazon) dans un cloud privé virtuel (VPC).

## Conditions préalables et limitations
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-prereqs"></a>

**Conditions préalables**
+ Cluster Cassandra avec table source
+ Table cible dans Amazon Keyspaces pour répliquer la charge de travail
+ Compartiment S3 pour stocker les fichiers Parquet intermédiaires contenant des modifications de données incrémentielles
+ Compartiment S3 pour stocker les fichiers de configuration des tâches et les scripts

**Limites**
+ CQLReplicator sur AWS Glue nécessite un certain temps pour fournir des unités de traitement des données (DPUs) pour les charges de travail de Cassandra. Le délai de réplication entre le cluster Cassandra et l'espace de touches et la table cibles dans Amazon Keyspaces ne durera probablement que quelques minutes.

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

**Pile technologique source**
+ Apache Cassandra
+ DataStax serveur
+ ScyllaDB

**Pile technologique cible**
+ Amazon Keyspaces

**Architecture de migration**

Le schéma suivant montre un exemple d'architecture dans lequel un cluster Cassandra est hébergé sur des EC2 instances et réparti sur trois zones de disponibilité. Les nœuds Cassandra sont hébergés dans des sous-réseaux privés.

![\[Rôle de service personnalisé, Amazon Keyspaces et Amazon S3, avec AWS Glue se connectant au VPC des nœuds.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/e08048da-8996-4f2c-b8ed-da49fe9e693b/images/76256ab3-a1e6-4c9e-9c40-dc78f51edf0f.png)


Le schéma suivant illustre le flux de travail suivant :

1. Un rôle de service personnalisé permet d'accéder à Amazon Keyspaces et au compartiment S3.

1. Une tâche AWS Glue lit la configuration de la tâche et les scripts contenus dans le compartiment S3.

1. La tâche AWS Glue se connecte via le port 9042 pour lire les données du cluster Cassandra.

1. La tâche AWS Glue se connecte via le port 9142 pour écrire des données sur Amazon Keyspaces.

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

**Services et outils AWS**
+ [L'interface de ligne de commande AWS (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) est un outil open source qui vous permet d'interagir avec les services AWS par le biais de commandes dans votre shell de ligne de commande.
+ [AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html) est un shell basé sur un navigateur que vous pouvez utiliser pour gérer les services AWS à l'aide de l'AWS Command Line Interface (AWS CLI) et d'une gamme d'outils de développement préinstallés.
+ [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html) est un service ETL entièrement géré qui vous aide à classer, nettoyer, enrichir et déplacer les données de manière fiable entre les magasins de données et les flux de données.
+ [Amazon Keyspaces (pour Apache Cassandra)](https://docs.aws.amazon.com/keyspaces/latest/devguide/what-is-keyspaces.html) est un service de base de données géré qui vous aide à migrer, exécuter et dimensionner vos charges de travail Cassandra dans le cloud AWS.

**Code**

Le code de ce modèle est disponible dans le GitHub [CQLReplicator](https://github.com/aws-samples/cql-replicator/tree/main/glue)référentiel.

## Bonnes pratiques
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-best-practices"></a>
+ Pour déterminer les ressources AWS Glue nécessaires à la migration, estimez le nombre de lignes de la table source Cassandra. Par exemple, 250 000 lignes par 0,25 DPU (2 VCPUs, 4 Go de mémoire) avec un disque de 84 Go.
+ Préchauffez les tables Amazon Keyspaces avant de les lancer. CQLReplicator Par exemple, huit CQLReplicator tuiles (tâches AWS Glue) peuvent écrire jusqu'à 22 K WCUs par seconde. La cible doit donc être préchauffée à 25-30 K WCUs par seconde.
+ Pour activer la communication entre les composants AWS Glue, utilisez une règle d'autoréférencement entrant pour tous les ports TCP de votre groupe de sécurité.
+ Utilisez la stratégie de trafic incrémentiel pour répartir la charge de travail de migration dans le temps.

## Épopées
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-epics"></a>

### Déployer CQLReplicator
<a name="deploy-cqlreplicator"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un espace de touches et un tableau cibles.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue.html) | Propriétaire de l'application, administrateur AWS, DBA, développeur d'applications | 
| Configurez le pilote Cassandra pour vous connecter à Cassandra. | Utilisez le script de configuration suivant :<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>Le script précédent utilise le connecteur Spark Cassandra. Pour plus d'informations, consultez la configuration de référence pour [Cassandra](https://docs.datastax.com/en/developer/java-driver/4.17/manual/core/configuration/reference/). | DBA | 
| Configurez le pilote Cassandra pour vous connecter à Amazon Keyspaces. | Utilisez le script de configuration suivant :<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>Le script précédent utilise le connecteur Spark Cassandra. Pour plus d'informations, consultez la configuration de référence pour [Cassandra](https://docs.datastax.com/en/developer/java-driver/4.17/manual/core/configuration/reference/). | DBA | 
| Créez un rôle IAM pour la tâche AWS Glue. | Créez un nouveau rôle de service AWS nommé `glue-cassandra-migration` avec AWS Glue en tant qu'entité de confiance.Ils `glue-cassandra-migration` devraient fournir un accès en lecture et en écriture au compartiment S3 et à Amazon Keyspaces. Le compartiment S3 contient les fichiers .jar, les fichiers de configuration pour Amazon Keyspaces et Cassandra, ainsi que les fichiers Parquet intermédiaires. Par exemple, il contient le `AWSGlueServiceRole``AmazonS3FullAccess`, et les politiques `AmazonKeyspacesFullAccess` gérées. | AWS DevOps | 
| Téléchargez CQLReplicator dans AWS CloudShell. | Téléchargez le projet dans votre dossier personnel en exécutant la commande suivante :<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> |  | 
| Modifiez les fichiers de configuration de référence. | Copiez `CassandraConnector.conf` et `KeyspacesConnector.conf` dans le `../glue/conf` répertoire du dossier du projet. | AWS DevOps | 
| Lancez le processus de migration. | La commande suivante initialise l' CQLReplicator environnement. L'initialisation implique de copier des artefacts .jar et de créer un connecteur AWS Glue, un compartiment S3, une tâche AWS Glue, le `migration` keyspace et la table : `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>Le script comprend les paramètres suivants :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue.html) | AWS DevOps | 
| Validez le déploiement. | Après avoir exécuté la commande précédente, le compte AWS doit contenir les éléments suivants :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue.html) | AWS DevOps | 

### Courir CQLReplicator
<a name="run-cqlreplicator"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Lancez le processus de migration. | Pour utiliser CQLReplicator AWS Glue, vous devez utiliser la `--state run` commande, suivie d'une série de paramètres. La configuration précise de ces paramètres est principalement déterminée par vos exigences uniques en matière de migration. Par exemple, ces paramètres peuvent varier si vous choisissez de répliquer les valeurs de durée de vie (TTL) et les mises à jour, ou si vous déchargez des objets de plus de 1 Mo vers Amazon S3.Pour répliquer la charge de travail du cluster Cassandra vers Amazon Keyspaces, exécutez la commande suivante : <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>Votre keyspace source et votre table se trouvent `source_keyspace.source_table` dans le cluster Cassandra. Votre espace de touches et votre table cibles se trouvent `target_keyspace.target_table` dans Amazon Keyspaces. Ce paramètre `--inc-traffic` permet d'éviter que le trafic incrémentiel ne surcharge le cluster Cassandra et Amazon Keyspaces avec un nombre élevé de demandes.Pour répliquer les mises à jour, ajoutez-les `--writetime-column regular_column_name` à votre ligne de commande. La colonne normale va être utilisée comme source de l'horodatage d'écriture. | AWS DevOps | 

### Surveiller le processus de migration
<a name="monitor-the-migration-process"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Validez les lignes Cassandra migrées pendant la phase de migration historique. | Pour obtenir le nombre de lignes répliquées pendant la phase de remblayage, exécutez la commande suivante :<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 | 

### Arrêtez le processus de migration
<a name="stop-the-migration-process"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Utilisez la `cqlreplicator` commande ou la console AWS Glue. | Pour arrêter le processus de migration correctement, exécutez la commande suivante :<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>Pour arrêter immédiatement le processus de migration, utilisez la console AWS Glue. | AWS DevOps | 

### Nettoyage
<a name="clean-up"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Supprimez les ressources déployées. | La commande suivante supprimera la tâche AWS Glue, le connecteur, le compartiment S3 et la table Keyspaces : `ledger`<pre>./cqlreplicator --state cleanup --landing-zone s3://cql-replicator-1234567890-us-west-2</pre> | AWS DevOps | 

## Résolution des problèmes
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Les tâches AWS Glue ont échoué et ont renvoyé une erreur OOM (Out of Memory). | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue.html) | 

## Ressources connexes
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-resources"></a>
+ [CQLReplicator avec AWS Glue README.MD](https://github.com/aws-samples/cql-replicator/blob/main/glue/README.MD)
+ [Documentation d'AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html)
+ [Documentation Amazon Keyspaces](https://docs.aws.amazon.com/keyspaces/latest/devguide/what-is-keyspaces.html)
+ [Apache Cassandre](https://cassandra.apache.org/_/index.html)

## Informations supplémentaires
<a name="migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue-additional"></a>

**Considérations concernant la migration**

Vous pouvez utiliser AWS Glue pour migrer votre charge de travail Cassandra vers Amazon Keyspaces, tout en préservant le bon fonctionnement de vos bases de données sources Cassandra pendant le processus de migration. Une fois la réplication terminée, vous pouvez choisir de transférer vos applications vers Amazon Keyspaces avec un délai de réplication minimal (moins de quelques minutes) entre le cluster Cassandra et Amazon Keyspaces. Pour garantir la cohérence des données, vous pouvez également utiliser un pipeline similaire pour répliquer les données vers le cluster Cassandra depuis Amazon Keyspaces.

**Écrire des calculs unitaires**

Par exemple, imaginez que vous avez l'intention d'écrire 500 000 000 avec une taille de ligne de 1 KiB pendant une heure. Le nombre total d'unités d'écriture Amazon Keyspaces (WCUs) dont vous avez besoin est basé sur ce calcul :

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

69 444 dollars WCUs par seconde, c'est le tarif pour une heure, mais vous pouvez ajouter une certaine marge de manœuvre pour couvrir les frais généraux.  Par exemple, `69,444 * 1.10 = 76,388 WCUs` a des frais généraux de 10 %.

**Création d'un espace de touches à l'aide de CQL**

Pour créer un espace de touches à l'aide de CQL, exécutez les commandes suivantes :

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