概要
kinesisの管理画面では、Data Streamの中にデータが入っているのかわからない。
結果として、AWS CLIでKinesisに直接データを突っ込んで様子をみるのが一番わかりやすい。
この記事では、Kinesisのレコードに実際にデータを追加し、管理画面でどのように表示されるかを確認するまでやります。
主に以下のURLを参考にチュートリアルを進めていきます。
AWS DOCS - 基本的なストリームオペレーションの実行
AWS CLIでKinesisに直接データをつっこむ
以下、Kinesis Data Streams のアーキテクチャの概要
ストリームの作成
KinesisでData Streamを作成する。
--stream-name
はストリームの名前、--shard-count
はシャードの個数を指定。
ストリームの中に、シャードというキューを作るイメージ。
シャードは1つのストリームに複数個作成できて、そこに並列でデータを投入できる。
※ awsコマンドを実行する際、必要な人は --profile, --region オプションを追加してください
# ↓ 必要な場合は --profile, --region オプションを追加する
aws kinesis create-stream --stream-name <ストリーム名> --shard-count <シャード数>
ストリームの確認
ストリームが作られているかは、以下のコマンドで確認
ストリームの状態を表示
aws kinesis describe-stream --stream-name <ストリーム名>
# "StreamStatus": "ACTIVE" となれば、ストリームが完成
ストリームの一覧を表示
aws kinesis list-streams
# "StreamNames": に設定したストリーム名があればOK
レコードを入力する
KinesisのData Streamの中にシャード(キューのようなもの)があり、その中にレコード(データ)を追加していく。
文字列をレコードに登録する場合
# `--partition-key` はどのシャードにデータを送るかをハッシュ値を使って決めてくれる
# "ShardId": "shardId-000000000000" と出力されればOK
aws kinesis put-record --stream-name <ストリーム名> --partition-key 123 --data <レコードに保存したい文字列>
jsonファイルをレコードに登録する場合
a. jsonファイルの作成
{
"Records": [
{
"Data": "<レコードに保存したい文字列1>",
"PartitionKey": "123"
},
{
"Data": "<レコードに保存したい文字列2>",
"PartitionKey": "123"
}
],
"StreamName": "<ストリーム名>"
}
b. jsonファイルの登録
# "FailedRecordCount": 0 と出力されればOK
aws kinesis put-records --cli-input-json file://<jsonファイルへのフルパス>
参考URL
レコードの確認
get-record.sh というファイルを作成し、以下をコピペ、<ストリーム名>を修正
#!/bin/bash
SHARD_ITERATOR=$(aws kinesis get-shard-iterator --shard-id shardId-000000000000 --shard-iterator-type TRIM_HORIZON --stream-name <ストリーム名> --query 'ShardIterator')
aws kinesis get-records --shard-iterator $SHARD_ITERATOR
スクリプトを実行
./get-record.sh
# "Data":"XXXXXXX", の部分が入力したデータ
get-recordした結果、Dataによくわからない文字列が入っている。
これは、入力したデータをKinesisがBase64 エンコーディングしているから文字化けしているように見える。
Base64 デコーディングをすると元のデータが見れる。
Base64 デコーディングしてくれるサイト: https://www.base64decode.org/
ストリームの削除
一度作ったストリームは課金されるので、必要ない場合は削除する
aws kinesis delete-stream --stream-name <ストリーム名>
ストリームが本当に削除されたかを確認
aws kinesis describe-stream --stream-name <ストリーム名>
# A client error (ResourceNotFoundException) が出力されればOK
AWSコンソールでKinesisのData Streamにデータが送られていたかを確認
AWS Kinesis → Data Stream → ストリーム名 → モニタリングへ移動
受信データ (バイト) — 合計
と 受信データ (数) — 合計
の図を確認
図の中に青い丸、もしくは青い線があればOK
※ 上の赤い線は制限値(Maxの値)なので無視してOK
まとめ
Kinesis はライブラリから使うことが多いので、実際の動きを把握できていないひとも多いと思う。
AWS CLIを使ってKinesisにデータがどのように追加されるのかを確認すると理解が捗る。
また、データが追加されたときの管理画面の挙動もわかるのでおすすめ。
その他、参考URL
Qiita - PythonでKinesis操作する
Developers.IO - AWS SDK for JavaでKinesisにアクセスする
お読みいただき誠にありがとうございました。 m(_ _)m