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

Kinesis Firehoseを使ってみた

  • 1.
  • 2.
    【登壇者プロフィール】 ミサワ マサキ 名前: 三澤正木 職業: エンジニア(現在の業務は、主にWEBアプリ開発担当) 所属: 株式会社ビズリーチ キャリアトレック事業部 http://careertrek.com GitHub: https://github.com/MasakiMisawa 趣味: 野球(観る専)、ランニング、旅行 etc
  • 3.
  • 4.
    アジェンダ ・Chapter1 そもそも AmazonKinesis って? → 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(小川)という名前が示すとおり、流れてくる大容量データをリアルタイムで加 工して扱いたい場合に使用され、データロード間隔の短さが最大の特徴となっています。 ストリーミングデータなどの絶え間なく入ってくるデータをリアルタイムで処理できるメ リットがある一方、入ってきたデータを加工したり、加工後のデータを任意のデータスト アに転送する為のプログラムコードは自前で用意しておく必要があったりなど データを溜めておく場所の提供と、データが入ってきたタイミングで のイベント発火だけは用意するから、後は使う側で自由にやってね! という、使う人は選ぶものの、割と自由度の高いサービスになっているのが特徴です。
  • 9.
    Chapter1:そもそも Amazon Kinesisって? Kinesis Streams
  • 10.
    Chapter1:そもそも Amazon Kinesisって? Kinesis Streams 尚、Kinesis Streams 内に挿入されたデータを加工、保存先へ転送させる為のプログラムコ ードを実行させるには、以下の二つの方法が一般的です。 1. Kinesis Streams にデータが入ってきたことをイベントトリガーに発火させる Lambda function 内に加工、保存先への転送コードを書いておき自動実行。 1. cronなどの定期実行処理でKinesis Streamsからデータを取得し、取得したデータを 加工、保存先への転送を実行 ● Kinesis Streamsから手動でデータを取得した場合、取得後もKinesis Streams内に対象データは残り 続ける仕様になっている為、既処理済のデータか未処理のデータかを判別可能にする為に取得した レコードのシーケンス番号や取得日時を保存しておき、次回取得時に前回取得したレコード以降の レコードを取得するように管理する必要があります。
  • 11.
    Chapter1:そもそも Amazon Kinesisって? Kinesis Streams Kinesis Streamsにデータが入った事をイベントトリガーに発火するLambda functionの 例
  • 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上の全文検索エンジンです。
  • 15.
    Chapter1:そもそも Amazon Kinesisって? Kinesis Firehose Kinesis Firehose Amazon S3 data flow overview
  • 16.
    Chapter1:そもそも Amazon Kinesisって? Kinesis Firehose Kinesis Firehose Amazon Redshift data flow overview
  • 17.
    Chapter1:そもそも Amazon Kinesisって? Kinesis Firehose Kinesis Firehose Amazon Elasticsearch data flow overview
  • 18.
    Chapter1:そもそも Amazon Kinesisって? Kinesis Firehose
  • 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月現在では東京リージョンでの使用が不可能になっている点に注意が必要 です。
  • 25.
    Chapter1:そもそも Amazon Kinesisって? Kinesis Analytics
  • 26.
    Chapter1:そもそも Amazon Kinesisって? Kinesis Analytics
  • 27.
    Chapter2:Kinesis Firehose の使い方 概要が分かったところで、KinesisFirehoseを 使用してデータ転送を行う一連のフローなど、 実際の使い方を見ていきましょう。
  • 28.
  • 29.
    Chapter2:Kinesis Firehose の使い方 Firehoseの欄の、Firehoseコンソールに移動ボタンを選択します。
  • 30.
    Chapter2:Kinesis Firehose の使い方 最初は何も作られていない為、CreateDelivery System ボタンを選択して新規作成します。
  • 31.
    Chapter2:Kinesis Firehose の使い方 作成するKinesisFirehose の stream name を設定します。 Delivery stream name の欄に作成する Kinesis Firehose の名前を入力します。 stream nameは作成したKinesisを一意に識別する為の名前で後から変更が不可能な為、な るべく一目で分かるような名前を付けておきましょう。 今回は本勉強会のテスト用のKinesisだった為、「dcube-test-kinesis-firehose」という名前 で作成しています。
  • 32.
    Chapter2:Kinesis Firehose の使い方 データ挿入元の指定で、直接PutするかKinesisStreamsから自動転送するかを選択 Choose source では、Kinesis Firehoseに入れるデータの挿入元を指定します。 2017年9月現在では、自作コードなどでKinesis Firehoseに対して直接データを挿入するか、 Kinesis Streamsに入ってきたデータを自動で転送するかの二択が選択可能です。 今回は、Kinesis Firehoseに対して直接データを挿入する方式を選択しています。
  • 33.
    Chapter2:Kinesis Firehose の使い方 受け取ったレコードに対してLambdafunctionで変換(加工)を行うかを指定 受け取ったデータに対して何かしらの加工を施したい場合に設定する項目で、加工したい 場合にはKinesis Firehoseにデータが入ってきたことをトリガーに発火するLambda functionを設定する事が可能で、変換後のデータを保存先に転送する事ができます。 今回は、Disabled(加工は行わない)を選択しています。
  • 34.
    Chapter2:Kinesis Firehose の使い方 データを転送する保存先をどこにするかを設定 受け取ったデータを転送する保存先をどこにするかの設定項目です。 2017年9月現在では、AmazonS3、Amazon Redshift、Amazon Elasticsearch Serviceの 3つが選択可能になっています。 今回は、転送先をAmazon S3に設定しています。
  • 35.
    Chapter2:Kinesis Firehose の使い方 保存先の詳細情報を設定します。(AmazonS3 を保存先に選択した場合) データを転送する保存先をAmazon S3に指定した場合の詳細設定項目です。 S3 Bucket欄で保存先のバケットを設定し、Prefix欄で保存先ファイルパスの接頭語を指定 できます(デフォルトの保存先ファイルパスは、YYYY/MM/DD/HH/ 配下になっており、 省略した場合はバケット直下にYYYY/MM/DD/HH/ファイル名のパスで保存されます) 今回は、本勉強会用に作成した「dcube-test-bucket」を保存先バケットに設定し、管理 を容易にする為にデフォルトPrefixの前に test-dir/ をつけて保存するようにしています。
  • 36.
    Chapter2:Kinesis Firehose の使い方 データロードの間隔を設定します。 KinesisFirehose に挿入されたデータをAmazon S3に転送する間隔を設定する項目です。 データロードを行うタイミングは、 - 対象データのサイズがBuffer sizeで指定した値を超える - 前回のデータロード実行時からBuffer interval で設定した秒数を経過 のどちらかの条件を満たしたタイミングで実行されます。 今回は、Buffer sizeはデフォルトの5MBのままにし、Buffer intervalだけ1分毎に転送を行 うようにする為に60秒に設定しています。
  • 37.
    Chapter2:Kinesis Firehose の使い方 AmazonS3に保存するファイルに対して圧縮と暗号化を行うかを設定します。 Amazon S3に保存する際にファイル圧縮と暗号化を行なってから保存をしたい場合に設定 する項目です。 今回はサンプル実行の為、ファイル圧縮も暗号化も行わなずに保存するように設定してい ます。
  • 38.
    Chapter2:Kinesis Firehose の使い方 エラーログの出力設定を行います。 KinesisFirehoseに挿入されたデータを加工して保存先のAmazon S3に転送したい場合に使 用するLambda functionの変換処理内でエラーが発生した場合や、Amazon S3へのデー タ転送時に失敗した場合などにエラーログを出力するかどうかの設定項目です。 出力設定にしている状態でエラーが発生した場合は、エラーログがCloudWatch内に出力 されるようになります。 今回は、エラー発生時に出力するように設定しています。
  • 39.
    Chapter2:Kinesis Firehose の使い方 転送処理の実行ロールを設定します。 KinesisFirehoseのデータを保存先に転送を行う処理の実行ロール(権限)を設定します。 実行ロールは、「該当処理内でAWSのどのサービスに対してどのレベルのアクセスを許可 するか」というアクセス可能なサービスと、そのサービスに対するアクセス許可レベル (読み込みのみ許可 or 書き込みも許可 etc)を設定するもので、転送処理で保存する保存 先へのアクセス権限を設定しておく必要があります。 Kinesis Firehoseを新規作成時には、「Create new or Choose」ボタンから実行ロールの 編集画面に遷移することで、デフォルトで保存先サービスへのアクセス権限が設定された 状態の実行ロールを作成可能なようになっています。
  • 40.
  • 41.
  • 42.
    Chapter2:Kinesis Firehose の使い方 KinesisFirehoseのTOP画面に作成したstreamが表示される事を確認します。 作成が完了するとKinesis FirehoseのTOP画面に表示されるようになります。
  • 43.
    Chapter2:Kinesis Firehose の使い方 KinesisFirehose側の準備が整ったので、作成 したKinesis Firehoseにデータを挿入して Amazon S3に転送してみましょう。
  • 44.
    Chapter2:Kinesis Firehose の使い方 KinesisFirehose に値を入れる自作処理作成 今回は、Kinesis Firehoseに値を入れる方法を自作コードなどから直接 値を入れる形式を指定した為、実行環境の用意が簡単なPythonで簡単 なスクリプトコードを作成してデータを挿入してみます。
  • 45.
    Chapter2:Kinesis Firehose の使い方 KinesisFirehose に値を入れる自作処理作成 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 の使い方 KinesisFirehose に値を入れる自作処理作成 次に、PythonからAWSの各種サービス(今回のKinesis Firehose含 む)へのアクセスを行う為のライブラリであるboto3を用意します。 boto3はpythonからAWSの各種サービスを行う為のAmazonが提供し ている公式ライブラリですが、ローカルマシン含むサーバ上ではデフ ォルトで用意されていない為、pipを使用してインストールする必要が あります。
  • 47.
    Chapter2:Kinesis Firehose の使い方 KinesisFirehose に値を入れる自作処理作成 全ての用意が整ったところで、以下のサンプルコードのようなものを 用意、コンソールから実行してKinesis Firehoseに値を挿入します。
  • 48.
    Chapter2:Kinesis Firehose の使い方 KinesisFirehose に値を入れる自作処理作成 Kinesis Firehoseのデータロード間隔が60秒間隔の為、60秒経過後に転送後の保存 先に指定したS3バケットを確認するとファイルが作成されているはずです。
  • 49.
    Chapter2:Kinesis Firehose の使い方 KinesisFirehose に値を入れる自作処理作成 Amazon S3から転送後のファイルをダウンロードして中身を確認して みると、Pythonコード上で送ったテスト文字列が正しく入っている事 が確認できます。
  • 50.
    Chapter3:Kinesis Firehose を使って実現できそうなこと 1.中身の参照が難しいKVSのデータを、分析用データベースに転送 大量のデータを溜め込み、レコード取得時に取得したいレコードを一意に識別でき るKeyを指定して対象レコードを取得する使い方をするKVS(Key-Value Store)で すが、大量のデータを溜め込めるメリットもある一方、データを取得する際に必ず Key を指定しなければならず、溜め込んだデータを分析用途などで使用するのには あまり向いていない面もあります。 この問題を解消する為に、KVSのデータを Kinesis に流し、更に Kinesis から分析用 途で使用するデータベースに転送すれば、溜め込んだ大量のデータに対して分析よ 用のクエリを実行することが可能になり、KVSのデメリットを解消できそうです。
  • 51.
    Chapter3:Kinesis Firehose を使って実現できそうなこと AWSのサービスで考えると、KVSはDynamoDBが 該当し、分析用途で使用するデータベースは AmazonRedshiftが該当する為、DynamoDBに入 ってきたレコードをKinesis Firehoseに一度流し、 Kinesis Firehoseが受け取ったレコードの情報を Amazon Redshiftに転送すると良さそうです。
  • 52.
  • 53.
    Chapter3:Kinesis Firehose を使って実現できそうなこと 2.アプリケーションログなどの時系列ログデータをビジュアライズ表示 各種アプリケーションが出力するログ情報はサービスを運用していく上で非常に大 事な情報として使用可能ですが、これらの情報をそのまま見ようとすると grep コ マンドなどを毎回使用しながらでないと見たい情報を見る事ができません。 この問題を解決する為に、各種ログ情報を時系列にまとめた上で、人間が見る用に 最適化した状態を予め作成しておき、見たい時に見たい情報をすぐに見れるような 環境を作成しておけば、日々の業務効率が大きく上がりそうです。
  • 54.
    Chapter3:Kinesis Firehose を使って実現できそうなこと AWSのサービスで考えると、時系列で溜めたデー タを見れるようにするのはAmazon ElasticsearchServiceが該当する為、各種アプリ ケーションのログ情報をKinesis Firehoseに挿入す るようにし、Kinesis Firehoseが受け取ったレコー ドの情報をAmazon Elasticsearch Serviceに転送、 KibanaからElastisearchに入れられたデータを参 照してビジュアライズ表示させるのが良さそうで す。
  • 55.
  • 56.
  • 57.
    Chapter4 :Kinesis Firehoseを使用したデータ転送を実演してみる 時間が余れば実際にデータ転送処理が実行され るところを実演してみます。
  • 58.