AWS
tutorial
aws-cli
Kinesis

AWS CLIを使ったKinesisチュートリアル

概要

kinesisの管理画面では、Data Streamの中にデータが入っているのかわからない。
結果として、AWS CLIでKinesisに直接データを突っ込んで様子をみるのが一番わかりやすい。
この記事では、Kinesisのレコードに実際にデータを追加し、管理画面でどのように表示されるかを確認するまでやります。
主に以下のURLを参考にチュートリアルを進めていきます。

AWS DOCS - 基本的なストリームオペレーションの実行

AWS CLIでKinesisに直接データをつっこむ

以下、Kinesis Data Streams のアーキテクチャの概要
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