More Related Content
Similar to Kinesis Firehoseを使ってみた (20)
Kinesis Firehoseを使ってみた
- 2. 【登壇者プロフィール】
ミサワ マサキ
名前: 三澤 正木
職業: エンジニア(現在の業務は、主にWEBアプリ開発担当)
所属: 株式会社ビズリーチ キャリアトレック事業部
http://careertrek.com
GitHub: https://github.com/MasakiMisawa
趣味: 野球(観る専)、ランニング、旅行 etc
- 4. アジェンダ
・Chapter1 そもそも Amazon Kinesis って?
→ Amazon Kinesis の簡単な概要説明です
・Chapter2 Kinesis Firehoseの使い方
→ Kinesis Firehoseに挿入した値を、任意の場所に転送完了させるまでの一連の流れです
・Chapter3 Kinesis Firehoseを使って実現できそうなこと
→ 自分なりに考えるKinesis Firehoseを使えばこんなこと、あんなことが実現できそうという紹介です
・Chapter4 Kinesis Firehoseを使用したデータ転送を実演してみる
→ 時間が余ればになりますが、Kinesis Firehoseを使用したデータ転送を実演しようと思っています。
・etc 質疑応答
→ さいごに質疑応答の時間を設ける予定でいます
- 5. Chapter1:そもそも Amazon Kinesis って?
Amazon Kinesis は、AWS(Amazon Web Service)の用意したスト
リーミングデータ向けのプラットフォームで、大容量のデータを低コ
ストで収集、分析、処理、転送する事が可能なサービスです。
大量に流れてくるログデータなどを一時保存(Kinesisへの保存期間は
デフォルトで24時間、最大7日まで延長可能)し、分析をしたり任意の
形に加工した後に任意の各種データストレージに転送するところまで
をやってくれます。
- 6. Chapter1:そもそも Amazon Kinesis って?
大量のデータを低コストで溜め込み、溜め込んだデータを取得して各
種展開するという意味では、AWSの中で割とよく使われているSQS
(Simple Queue Service)に近いイメージですが、
1. SQSよりも大量、大容量のデータを受ける事が可能
* SQSでは秒間数百のリクエストをさばく事ができないが、Kinesisではそれが可能
* 1レコードの最大容量がSQSは256KBまでだが、Kinesisは1MBまで保存可能
1. 溜め込むだけでなく、分析や加工をしてくれたり、各種AWSサー
ビスに転送する処理もやってくれる(Kinesisすべてではない)
の2点が大きな違いであり、Kinesisを使う上での利点です。
- 7. Chapter1:そもそも Amazon Kinesis って?
一口にKinesisと言っても、用途毎に以下の3種類が存在します。
1. Kinesis Streams
→ 挿入されたデータをリアルタイムで加工してデータ転送を行いたい場合などに使用し
ます。
1. Kinesis Firehose
→ 複雑な転送用コードを書かずにコンソール画面での設定だけでデータ転送を行いたい
場合などに使用します。今回扱うメインテーマです。
1. Kinesis Analytics
→ 挿入されたデータに対して予め用意したSQLの実行結果を転送したい場合などに使用
します。2017/09現在では東京リージョン非対応になっています。
- 8. Chapter1:そもそも Amazon Kinesis って?
Kinesis Streams
Streams(小川)という名前が示すとおり、流れてくる大容量データをリアルタイムで加
工して扱いたい場合に使用され、データロード間隔の短さが最大の特徴となっています。
ストリーミングデータなどの絶え間なく入ってくるデータをリアルタイムで処理できるメ
リットがある一方、入ってきたデータを加工したり、加工後のデータを任意のデータスト
アに転送する為のプログラムコードは自前で用意しておく必要があったりなど
データを溜めておく場所の提供と、データが入ってきたタイミングで
のイベント発火だけは用意するから、後は使う側で自由にやってね!
という、使う人は選ぶものの、割と自由度の高いサービスになっているのが特徴です。
- 10. Chapter1:そもそも Amazon Kinesis って?
Kinesis Streams
尚、Kinesis Streams 内に挿入されたデータを加工、保存先へ転送させる為のプログラムコ
ードを実行させるには、以下の二つの方法が一般的です。
1. Kinesis Streams にデータが入ってきたことをイベントトリガーに発火させる
Lambda function 内に加工、保存先への転送コードを書いておき自動実行。
1. cronなどの定期実行処理でKinesis Streamsからデータを取得し、取得したデータを
加工、保存先への転送を実行
● Kinesis Streamsから手動でデータを取得した場合、取得後もKinesis Streams内に対象データは残り
続ける仕様になっている為、既処理済のデータか未処理のデータかを判別可能にする為に取得した
レコードのシーケンス番号や取得日時を保存しておき、次回取得時に前回取得したレコード以降の
レコードを取得するように管理する必要があります。
- 12. Chapter1:そもそも Amazon Kinesis って?
Kinesis Streams
Kinesis Streams では扱える最大データ容量をシャードという概念で管理しており、設定す
るシャード数により扱える最大データ容量を増やすことができます。
ただ、設定するシャード容量を増やすとその分利用料金も増えていくので、使用するデー
タ容量に応じて適切なシャード数を設定する必要があります。
(後からシャードを追加、削除する事は可能)
Kinesis Streams に関してはこの設定シャード数が使用する上での重要な肝になってくる為、
利用料金についても使用するユーザ側で制御する形になっているなど、ここでもカスタム
要素の強いサービスである点が感じられます。
- 13. Chapter1:そもそも Amazon Kinesis って?
Kinesis Firehose
各種AWSサービス間のデータ転送を行うことが可能なサービスであり、複雑な保存先への
転送用プログラムコードを書く必要がなく、GUIのコンソール画面での簡単な設定だけで
データ転送を行えることが特徴です。
Firehoseは英語で消化ホースという意味を持ちますが、Kinesis Firehose に対してデータを
挿入し、挿入したデータを指定した保存先に対して転送するこのサービスは、正にそんな
イメージですね。
これまで一部のリージョンでのみ使用可能になっていた為東京リージョンでの使用ができ
ませんでしたが、2017年8月に東京リージョンでの使用が解禁されて使用可能になりまし
た!
- 14. Chapter1:そもそも Amazon Kinesis って?
Kinesis Firehose
Kinesis Firehose に挿入されたデータの転送先には、以下の3つが選択可能です。
1. Amazon S3
→ オンラインストレージで、静的ファイルなどを低料金で保存可能なサービスです。
1. Amazon Redshift
→ 大容量のデータを低価格で保存可能なデータベースで、分析用途などで使用されます。
1. Amazon Elasticsearch Service
→ 目的の文字列を含むドキュメントを高速に抽出可能なAWS上の全文検索エンジンです。
- 19. Chapter1:そもそも Amazon Kinesis って?
Kinesis Firehose
Kinesis Firehose を使用する場合の利用料金は、サービスを介して送信するデータ容量に対
してのみ発生する形になっている為、Kinesis Streams におけるシャード数のユーザ側によ
る設定などが一切必要ありません。
Kinesis Streams が使う人を選ぶカスタム要素の強いサービスなのに対して、Kinesis
Firehose は、複雑な設定などの管理が不要なサービスであるという事が、利用料金の算出
方法からも見受けられます。
- 20. Chapter1:そもそも Amazon Kinesis って?
→ Kinesis Firehose と Kinesis Streamsの使い分け
Kinesis に対して挿入されたデータを加工、任意の保存先に転送すると
いう目的は同じの為、混同しやすい Kinesis Firehose と Kinesis
Streams ですが、それぞれ以下のような特徴がある為、用途により使
い分けると便利です。
- 21. Chapter1:そもそも Amazon Kinesis って?
- Kinesis Firehose
特徴:
- 転送時に自前でコードを用意する必要がなく、GUIのコンソールで簡単設定可能
- 使用するデータ容量の増減があった場合でも、ユーザ側での設定変更が不要
- データロードの間隔が最短で60秒からの為、リアルタイム描画などには不向き
向いている使用用途:
- KVSのレコードやアプリケーションログなどの大容量データを分析用データベースに
転送したり、自動バックアップ保存したりなど
→ Kinesis Firehose と Kinesis Streamsの使い分け
- 22. Chapter1:そもそも Amazon Kinesis って?
- Kinesis Streams
特徴:
- データロードが1秒以下の間隔で可能な為、リアルタイムでの処理に向いている
- データ加工や、保存先への転送の為に自前でコードを用意し、実行させる必要有
- 設定するシャード数により扱えるデータ容量と利用料金が変動
向いている使用用途:
- ストリーミングデータをリアルタイムで変化させるグラフで表示させたりなど
→ Kinesis Firehose と Kinesis Streamsの使い分け
- 23. Chapter1:そもそも Amazon Kinesis って?
結論:
Kinesis Firehose は、ゼロ管理の非エンジニアでも
扱えるようなサービス
Kinesis Streams は、細かい設定が可能なユーザカス
タム用サービス
→ Kinesis Firehose と Kinesis Streamsの使い分け
- 24. Chapter1:そもそも Amazon Kinesis って?
Kinesis Analytics
流れてくる大容量データに対して予め用意しておいたSQLを実行し、実行結果を保存先の
各種データストアに転送できるサービスです。
実行するSQLは標準のSQLクエリがサポートされている為、プログラミング言語などを学ば
なくても一般的なSQLの知識があれば使える点など、使用可能になるまでの敷居が低めに
設定されており、非エンジニアでも使えそうなところも嬉しい点です。
ただ、2017年9月現在では東京リージョンでの使用が不可能になっている点に注意が必要
です。
- 31. Chapter2:Kinesis Firehose の使い方
作成するKinesis Firehose の stream name を設定します。
Delivery stream name の欄に作成する Kinesis Firehose の名前を入力します。
stream nameは作成したKinesisを一意に識別する為の名前で後から変更が不可能な為、な
るべく一目で分かるような名前を付けておきましょう。
今回は本勉強会のテスト用のKinesisだった為、「dcube-test-kinesis-firehose」という名前
で作成しています。
- 35. Chapter2:Kinesis Firehose の使い方
保存先の詳細情報を設定します。(Amazon S3 を保存先に選択した場合)
データを転送する保存先をAmazon S3に指定した場合の詳細設定項目です。
S3 Bucket欄で保存先のバケットを設定し、Prefix欄で保存先ファイルパスの接頭語を指定
できます(デフォルトの保存先ファイルパスは、YYYY/MM/DD/HH/ 配下になっており、
省略した場合はバケット直下にYYYY/MM/DD/HH/ファイル名のパスで保存されます)
今回は、本勉強会用に作成した「dcube-test-bucket」を保存先バケットに設定し、管理
を容易にする為にデフォルトPrefixの前に test-dir/ をつけて保存するようにしています。
- 36. Chapter2:Kinesis Firehose の使い方
データロードの間隔を設定します。
Kinesis Firehose に挿入されたデータをAmazon S3に転送する間隔を設定する項目です。
データロードを行うタイミングは、
- 対象データのサイズがBuffer sizeで指定した値を超える
- 前回のデータロード実行時からBuffer interval で設定した秒数を経過
のどちらかの条件を満たしたタイミングで実行されます。
今回は、Buffer sizeはデフォルトの5MBのままにし、Buffer intervalだけ1分毎に転送を行
うようにする為に60秒に設定しています。
- 38. Chapter2:Kinesis Firehose の使い方
エラーログの出力設定を行います。
Kinesis Firehoseに挿入されたデータを加工して保存先のAmazon S3に転送したい場合に使
用するLambda functionの変換処理内でエラーが発生した場合や、Amazon S3へのデー
タ転送時に失敗した場合などにエラーログを出力するかどうかの設定項目です。
出力設定にしている状態でエラーが発生した場合は、エラーログがCloudWatch内に出力
されるようになります。
今回は、エラー発生時に出力するように設定しています。
- 39. Chapter2:Kinesis Firehose の使い方
転送処理の実行ロールを設定します。
Kinesis Firehoseのデータを保存先に転送を行う処理の実行ロール(権限)を設定します。
実行ロールは、「該当処理内でAWSのどのサービスに対してどのレベルのアクセスを許可
するか」というアクセス可能なサービスと、そのサービスに対するアクセス許可レベル
(読み込みのみ許可 or 書き込みも許可 etc)を設定するもので、転送処理で保存する保存
先へのアクセス権限を設定しておく必要があります。
Kinesis Firehoseを新規作成時には、「Create new or Choose」ボタンから実行ロールの
編集画面に遷移することで、デフォルトで保存先サービスへのアクセス権限が設定された
状態の実行ロールを作成可能なようになっています。
- 45. Chapter2:Kinesis Firehose の使い方
Kinesis Firehose に値を入れる自作処理作成
Kinesis Firehoseに値を挿入するコード作成の前に、コード上で使用する
Kinesis Firehoseにアクセス可能なIAMUserのクレデンシャルを取得します。
以下の手順でIAM ユーザを作成し、クレデンシャル情報を保存します。
1. コンソール画面TOPからセキュリティ認証情報 → ユーザー → ユーザーを追加選択
1. ユーザー名に適当な名前(test-firehose-full-access-user など)を入力
1. アクセスの種類は、「プログラムによるアクセス」を選択
1. 既存のポリシーを直接アタッチを選択後、AmazonKinesisFirehoseFullAccessを選択
1. ユーザーの作成を選択後、.csvファイルのダウンロードボタンでファイルをDL
1. DLしたファイルを開き、クレデンシャル情報を控えておく
- 46. Chapter2:Kinesis Firehose の使い方
Kinesis Firehose に値を入れる自作処理作成
次に、PythonからAWSの各種サービス(今回のKinesis Firehose含
む)へのアクセスを行う為のライブラリであるboto3を用意します。
boto3はpythonからAWSの各種サービスを行う為のAmazonが提供し
ている公式ライブラリですが、ローカルマシン含むサーバ上ではデフ
ォルトで用意されていない為、pipを使用してインストールする必要が
あります。
- 50. Chapter3:Kinesis Firehose を使って実現できそうなこと
1. 中身の参照が難しいKVSのデータを、分析用データベースに転送
大量のデータを溜め込み、レコード取得時に取得したいレコードを一意に識別でき
るKeyを指定して対象レコードを取得する使い方をするKVS(Key-Value Store)で
すが、大量のデータを溜め込めるメリットもある一方、データを取得する際に必ず
Key を指定しなければならず、溜め込んだデータを分析用途などで使用するのには
あまり向いていない面もあります。
この問題を解消する為に、KVSのデータを Kinesis に流し、更に Kinesis から分析用
途で使用するデータベースに転送すれば、溜め込んだ大量のデータに対して分析よ
用のクエリを実行することが可能になり、KVSのデメリットを解消できそうです。
- 53. Chapter3:Kinesis Firehose を使って実現できそうなこと
2. アプリケーションログなどの時系列ログデータをビジュアライズ表示
各種アプリケーションが出力するログ情報はサービスを運用していく上で非常に大
事な情報として使用可能ですが、これらの情報をそのまま見ようとすると grep コ
マンドなどを毎回使用しながらでないと見たい情報を見る事ができません。
この問題を解決する為に、各種ログ情報を時系列にまとめた上で、人間が見る用に
最適化した状態を予め作成しておき、見たい時に見たい情報をすぐに見れるような
環境を作成しておけば、日々の業務効率が大きく上がりそうです。