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
関連記事
-
-
AWS Summit Tokyo 2017 聴講したセッションのメモ
2017年6月に参加しましたAWS Summitで聴講したセッションのメモを記し …
-
-
EC2インスタンスを必要最小限のパラメータでCLIとSDKから起動する
EC2インスタンスをCLIとSDKから起動するデモで、パラメータを必要最小限にし …
-
-
AWS LambdaのSQSへの自前ポーリングをやめてSQSイベントソーストリガーに変更した
以前は、LambdaがSQSからメッセージを受信するには、キューをポーリングして …
-
-
AWS Trusted Advisorの2023/11/17発表のAPI
2023/11/17に発表されたAWS Trusted Advisor の新しい …
-
-
AWS WAF Web ACLとルールをv1(Classic)からv2に自動移行しました
新しいものは、課題が解決されていたり、機能追加されたりするのでいいものです。 長 …
-
-
AWS CLIを使用せずにCodeCommitへSSHユーザーで接続する
AWS CLIやアクセスキーID、シークレットアクセスキーなどを開発環境にセット …
-
-
AWS CloudWatch LogsエージェントでAmazon EC2上のNginxのaccess.log , error.log , php-fpm error.log , Linuxのmessages , secureログを収集する
参考ページ クイックスタート: 実行中の EC2 インスタンスに CloudWa …
-
-
Systems Manager セッションマネージャアクセスのCloud9(SSHなし)
作成画面 いつからできるようになっていたのか気づいてなかったのですが、Cloud …
-
-
AWSアカウントルートユーザーのMFAでYubicoセキュリティキーを設定した
先日Yubico セキュリティキーを購入して、USBにささなければならないのがな …
-
-
ALBにWAFを関連付けて特定のヘッダー以外はブロックする
おかげさまで、ブログのアクセスも増えてきて、t3.nano EC2インスタンス単 …











