Amazon Keyspacesのキースペースを作成してみました
Amazon Keyspaces(Apache Cassandra互換のマネージドデータベースサービス)開発者ガイドのチュートリアルをやってみました。
目次
キースペースの作成
マネジメントコンソールのAmazon Keyspacesにアクセスして、[キースペースの作成]ボタンをクリックしました。
キースペースの名前をcatalogにしました。
単一リージョンとして作成しました。
リージョン内の複数AZ(アベイラビリティゾーン)で自動レプリケートされます。
デフォルトで高可用性が実装されていますね。
マルチリージョンにすると最大5つのリージョンへのレプリケーションもできます。
タグをつけて、下にスクロールすると、設定した値込みでCQL(Cassandra クエリ言語)で作成する場合が出力されていました。
キースペースを作成しました。
テーブルの作成
作成したキースペースを選択して[テーブルを作成]をクリックしました。
テーブル名、列名、列タイプを設定しました。
プライマリキーとしてパーティションキーと、ソート可能なクラスタリング列を設定しました。
こちらもCQLが生成されていて、テーブルを作成しました。
マネジメントコンソールで設定してCQLを生成して実行しているイメージですね。
CRUD操作
データを操作するCRUD操作はCQLで実行します。
CloudShellから実行します。
cqlshのインストール
CloudShellにCQlを実行するためのcalshをインストールします。
1 2 |
python3 -m pip install --user cqlsh-expansion |
出力例
Collecting cqlsh-expansion
Downloading cqlsh_expansion-0.9.6-py3-none-any.whl (153 kB)
|████████████████████████████████| 153 kB 1.2 MB/s
Requirement already satisfied: boto3 in /usr/local/lib/python3.9/site-packages (from cqlsh-expansion) (1.35.45)
Collecting cassandra-driver
Downloading cassandra_driver-3.29.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.1 MB)
|████████████████████████████████| 4.1 MB 6.1 MB/s
Requirement already satisfied: six>=1.12.0 in /usr/local/lib/python3.9/site-packages (from cqlsh-expansion) (1.16.0)
Collecting cassandra-sigv4>=4.0.2
Downloading cassandra_sigv4-4.0.2-py2.py3-none-any.whl (9.8 kB)
Requirement already satisfied: botocore<1.36.0,>=1.35.45 in /usr/local/lib/python3.9/site-packages (from boto3->cqlsh-expansion) (1.35.45)
Requirement already satisfied: jmespath<2.0.0,>=0.7.1 in /usr/local/lib/python3.9/site-packages (from boto3->cqlsh-expansion) (1.0.1)
Requirement already satisfied: s3transfer<0.11.0,>=0.10.0 in /usr/local/lib/python3.9/site-packages (from boto3->cqlsh-expansion) (0.10.3)
Collecting geomet<0.3,>=0.1
Downloading geomet-0.2.1.post1-py3-none-any.whl (18 kB)
Requirement already satisfied: urllib3<1.27,>=1.25.4 in /usr/local/lib/python3.9/site-packages (from botocore<1.36.0,>=1.35.45->boto3->cqlsh-expansion) (1.26.20)
Requirement already satisfied: python-dateutil<3.0.0,>=2.1 in /usr/local/lib/python3.9/site-packages (from botocore<1.36.0,>=1.35.45->boto3->cqlsh-expansion) (2.9.0.post0)
Requirement already satisfied: click in /usr/local/lib/python3.9/site-packages (from geomet<0.3,>=0.1->cassandra-driver->cqlsh-expansion) (8.1.7)
Installing collected packages: geomet, cassandra-driver, cassandra-sigv4, cqlsh-expansion
Successfully installed cassandra-driver-3.29.2 cassandra-sigv4-4.0.2 cqlsh-expansion-0.9.6 geomet-0.2.1.post1
1 2 |
cqlsh-expansion --version |
バージョン確認しました。
出力
cqlsh 6.1.0
1 2 |
cqlsh-expansion.init |
設定完了のスクリプトを実行しました。
出力例
Initializing .cassandra directory with SSL cert and cqlshrc file in user directory
Directory already exists /home/cloudshell-user/.cassandra
Copying cert from /home/cloudshell-user/.local/lib/python3.9/site-packages/cqlsh_expansion/sf-class2-root.crt to /home/cloudshell-user/.cassandra/sf-class2-root.crt
Copying cqlshrc from /home/cloudshell-user/.local/lib/python3.9/site-packages/cqlsh_expansion/cqlshrc_template to /home/cloudshell-user/.cassandra/cqlshrc
Post installation configuration for expansion utility completed
1 2 |
cqlsh-expansion cassandra.us-east-1.amazonaws.com 9142 --ssl |
接続しました。
出力例
Connected to Amazon Keyspaces at cassandra.us-east-1.amazonaws.com:9142
[cqlsh 6.1.0 | Cassandra 3.11.2 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
cqlsh current consistency level is ONE.
cqlsh>
整合性の指定
1 2 |
CONSISTENCY LOCAL_QUORUM; |
出力例
Consistency level set to LOCAL_QUORUM.
作成
1つのレコード挿入
1 2 3 |
INSERT INTO catalog.book_awards (award, year, category, rank, author, book_title, publisher) VALUES ('Wolf', 2023, 'Fiction',3,'Shirley Rodriguez','Mountain', 'AnyPublisher') ; |
挿入確認
1 2 |
SELECT * FROM catalog.book_awards ; |
挿入できました。
サンプルファイルをダウンロード
1 2 3 |
wget https://docs.aws.amazon.com/ja_jp/keyspaces/latest/devguide/samples/samplemigration.zip unzip samplemigration.zip |
接続します。
1 2 |
cqlsh-expansion cassandra.us-east-1.amazonaws.com 9142 --ssl |
キースペースの指定
1 2 |
USE catalog ; |
cqlsh:catalog> となります。
整合性の指定
1 2 |
CONSISTENCY LOCAL_QUORUM; |
CSVからの挿入実行
1 2 |
COPY book_awards (award, year, category, rank, author, book_title, publisher) FROM '/home/cloudshell-user/keyspaces_sample_table.csv' WITH header=TRUE ; |
エラーは出ましたが成功しました。
出力
cqlsh current consistency level is LOCAL_QUORUM.
Reading options from /home/cloudshell-user/.cassandra/cqlshrc:[copy]: {‘numprocesses’: ’16’, ‘maxattempts’: ‘1000’}
Reading options from /home/cloudshell-user/.cassandra/cqlshrc:[copy-from]: {‘ingestrate’: ‘1500’, ‘maxparseerrors’: ‘1000’, ‘maxinserterrors’: ‘-1’, ‘maxbatchsize’: ’10’, ‘minbatchsize’: ‘1’, ‘chunksize’: ’30’}
Reading options from the command line: {‘header’: ‘TRUE’}
Using 16 child processes
Starting copy of catalog.book_awards with columns [award, year, category, rank, author, book_title, publisher].
OSError: handle is closed 0 rows/s; Avg. rate: 0 rows/s
OSError: handle is closed
OSError: [Errno 9] Bad file descriptor
OSError: handle is closed
Processed: 9 rows; Rate: 0 rows/s; Avg. rate: 0 rows/s
9 rows imported from 1 files in 0 day, 0 hour, 0 minute, and 28.110 seconds (0 skipped).
確認できました。
読み取り
特定の列
1 2 |
SELECT award, category, year FROM catalog.book_awards ; |
特定の行
1 2 |
SELECT * FROM catalog.book_awards WHERE year=2020 AND award='Wolf' ; |
更新
1 2 |
UPDATE book_awards SET publisher='new Books' WHERE year = 2020 AND award='Wolf' AND category='Non-Fiction' AND rank=1; |
削除
1 2 |
DELETE book_title FROM catalog.book_awards WHERE year=2020 AND award='Richard Roe' AND category='Fiction' AND rank=1; |
cqlも通常のSQLとほぼ変わりなく実行できました。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。

「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

「AWSではじめるLinux入門ガイド」という本を書きました。


開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
S3バケットのデフォルト暗号化はデフォルトだったことを確認しました
S3バケットのデフォルト暗号化は名前のとおりだとデフォルトなので、暗号化を指定し …
-
-
Amazon Connectから問い合わせ追跡レコード(CTR)をエクスポート
Amazon Connectから発信した電話に出たのか、出なかったのかを確認した …
-
-
php-fpm で Out of memoryが発生した際にメール通知する(AWS CloudWatch , Amazon SNS)
AWS CloudWatch LogsエージェントでAmazon EC2上のNg …
-
-
kintoneに登録されたアカウントの電話番号にGoogleカレンダーの予定をAmazon Pollyが読み上げてTwilioから電話でお知らせする(AWS Lambda Python)
Google Calendar Twilio Reminder Googleカレ …
-
-
S3リクエストメトリクスをプレフィックスを指定して有効化
検証でどのリクエストがどれぐらい発生しているのか、さっと知りたくなったので、特定 …
-
-
WordPress、プラグインのアップデートしてBlue/Greenデプロイ
現在のブログの構成です。 WordPressとプラグインのアップデートをして、デ …
-
-
AWS Organizations SCPがリソースベースのポリシーには影響しないことを確認
AWS Organizations SCPで許可ポリシーの設定をし継承の関係を確 …
-
-
AWS Lambda(Python)でDynamoDB テーブルを日次で削除/作成(オートスケーリング付き)
この記事はAWS #2 Advent Calendar 2018に参加した記事で …
-
-
特定AWSアカウント特定リージョンのSNSトピックを削除するLambda(Python)
やりたいこと 特定アカウント内特定リージョン内のSNSトピックを全部削除したいで …
-
-
AWS OrganizationsでAWSアカウントを25作りたいのでPythonで作った
AWSアカウントを25作る必要があったので、Lambda Python 3.7で …