最近大量のデータを取り扱う案件があり、Amazon Kinesis Data Streams について学んだことをまとめて解説します。
Amazon Kinesis とは
Amazon Kinesis はストリーミングデータ(ストリームデータ)をリアルタイムで収集・保存・処理・分析をするサービスです。
- 収集
- 保存(一時的)(バッファリング)
- 処理
- 分析
Amazon Kinesis には以下のサービスがあります。
- Kinesis Data Streams ← データストリームを収集・保存・処理
- Kinesis Data Firehose ← データストリームをデータストアに配信
- Kinesis Data Analytics ← データストリームを SQL で分析
- Kinesis Video Streams ← ビデオストリームを収集・保存・分析
データの処理はリアルタイムなので、一旦 Oracle などのデータベースに保存して、そこから取り出すといったことはしません。
■ストリーミングデータ(ストリームデータ)とは
簡単に言いますと、終わりがなく継続的に生成されるデータを言います。
通常データの送信元は多数を想定しています。
例えば以下のデータが考えられます。
- 各サーバ、アプリからの大量のデータ
- IoTのセンサデータ
- カメラの動画や音声のデータ
AWS Kinesis の利用例
AWS IoT と組み合わせて利用するケースが多いです。
- IoT ← 「Internet of Things」の略で「モノのインターネット」と呼ばれます。たとえば、テレビや炊飯器やエアコンがインターネットに接続されて操作やデータ収集ができるようになります。
Kinesis の料金
Amazon Kinesis Data Streams の料金
https://aws.amazon.com/jp/kinesis/data-streams/pricing/
Kinesis は従量課金制です。
そのため、使用したリソース分のみ料金を支払います。
以下の4つに対して費用が発生します。
- シャード時間 ← 1時間ごとに料金が発生
- PUT ペイロードユニット ← 100万件の PUT ペイロードごとに料金が発生
- データ保持期間延長(最長7日観) ← デフォルトで24時間データが保持されますが、期間を延長するとシャード時間に対して料金が発生
- 拡張ファンアウト ← 「拡張ファンアウトでの消費者のシャード時間」と「拡張ファンアウトデータ取得」の2種類があります。
Amazon Kinesis の料金例(東京リージョンの場合)
2019年1月時点での東京リージョンの場合の Amazon Kinesis の料金例です。
■シャード時間
1シャードの価格は 0.0195 USD/時間
1 USD ← 110円(2019年1月)
0.0195×110円=2.145円/時
2.145円×24時間=51.48円/日
51.48円×30日=1,544.4円/月
■PUT ペイロードユニット
1,000,000 ユニットごと $0.0215
0.0215×110円=2.365円
■データ保持期間延長(最長7日観)
シャード時間ごと $0.0260
0.0215×110円=2.365円
■拡張ファンアウト
- 拡張ファンアウトでの消費者のシャード時間
1か月あたりの消費者は 44.64 USD の費用が掛かります。
44.64×110円=4,910円 - 拡張ファンアウトデータ取得
1GBあたりのデータ消費者は 0.013 USD の料金がかかります。
0.013×110円=1.43円/GB
AWS CLI(aws コマンド)から Amazon Kinesis Data Streams を使ってみる
以下の記事を参考にして aws コマンドより Amazon Kinesis Data Streams を使ってみてどのようなものか調べてみました。
有益な情報ありがとうございます。
AWS CLIを使って初めてAmazon Kinesisを使ってみた
https://qiita.com/toshihirock/items/86a7d5144ad54b18bf36
AWS CLI(aws コマンド)のインストール手順は以下を参考にしてください。
【AWS】EC2 インスタンスに AWS CLI(aws コマンド)をインストールする手順【Windows&Linux】
環境の設定
最初に環境を確認及び設定します。
■最初の状態
最初は何もない状態です。
環境の確認です。
OS は RedHat 7.6 です。
[root@redhat7 ~]# cat /etc/redhat-release |
aws コマンドのバージョンです。
[root@redhat7 ~]# aws –version |
Kinesis 検証用にユーザーを作成します。
「ユーザー詳細の設定」でユーザー名を設定します。
AWS アクセスの種類は「プログラムによるアクセス」にチェックを入れて「次のステップ:アクセス権限」ボタンをクリックします。
「アクセス許可の設定」で「既存のポリシーを直接アタッチ」をクリックします。
ポリシーは今回の場合は「AdministratorAccess」を選択して「次のステップ:タグ」ボタンをクリックします。
「タグの追加(オプション)」画面で必要な場合はタグを入力し「次のステップ:確認」ボタンをクリックします。
最後に設定内容を確認し「ユーザーの作成」ボタンをクリックします。
下図のように「成功」画面が表示されたら「.csv のダウンロード」ボタンをクリックします。
CSV の中身は下図のようになっています。
次に aws configure コマンドで環境の設定をします。
[root@redhat7 ~]# aws configure |
Kinesis Data Streams の作成
次に Kinesis Data Streams を作成します。
kinesis 関連のコマンド一覧は以下のコマンドで確認できます。
[root@redhat7 ~]# aws kinesis help
KINESIS() KINESIS() |
create-stream でストリームを新規作成します。
[root@redhat7 ~]# aws kinesis create-stream –stream-name Test-Kinesis-01 –shard-count 1 |
コマンド実行後に再度 Kinesis のダッシュボードにアクセスをすると Kinesis データストリームが作成されています。
設定内容を確認します。
[root@redhat7 ~]# aws kinesis describe-stream –stream-name Test-Kinesis-01 |
jq コマンドでステータスを抽出します。
[root@redhat7 ~]# aws kinesis describe-stream –stream-name Test-Kinesis-01 | jq ‘.StreamDescription.StreamStatus’ |
list-streams コマンドで現在の設定を表示できます。
[root@redhat7 ~]# aws kinesis list-streams |
Kinesis へのデータのプットとゲット手順
Kinesis にデータをプットします。
[root@redhat7 ~]# aws kinesis put-record –stream-name Test-Kinesis-01 –partition-key test123 –data Test-Data-123 |
最初にシャードイテレーターをゲットします。
[root@redhat7 ~]# aws kinesis get-shard-iterator –shard-id shardId-000000000000 –shard-iterator-type TRIM_HORIZON –stream-name Test-Kinesis-01 |
get-record コマンドで先ほど取得したシャードイテレーターを指定してデータをゲットします。
[root@redhat7 ~]# aws kinesis get-records –shard-iterator AAAAAAAAAAFKPFBEYi6XOCK02mE187iScMSkhHRvUN+VFKBpiielGbfXnBJkdG0kC6vh5pF/O3wNUqJxq6wKq80Hra4I4OOFT1CoSvBxluEfivkHm67ICX6rInIXC5qMBUrQsPtJ2/Y7xUseRorbZbKUuIx3pqtTtZDiLlsV4Ty1i1ArrA4+2zJQLwI35Ubin6wa2qIjQh+8eRhpC9Hci47y/nZvAVq3 |
base64 コマンドでデコードします。
「Test-Data-123」が表示されました。
[root@redhat7 ~]# echo “VGVzdC1EYXRhLTEyMw==” | base64 –decode |
「Test-Data-123」をエンコードしてみます。
[root@redhat7 ~]# echo “Test-Data-123” | base64 |
参考サイト
AWS Black Belt Online Seminar 2017 Amazon Kinesis
コメント