Kinesisとエコシステムソリューションアーキテクトの今井(@imai_factory)です。Kinesisと、これを便利に使うためのツールやライブラリのエコシステムを紹介したいと思います。これらは数も多いので何度かにわけてご紹介していきたいと思います。Kinesis自体についてのおさらいと、2014年8月時点でリリース済みのツール群のさわりを紹介します。ツールそれぞれのディープな話題については次回以降にご期待ください。Kinesisこのブログを読んでいる方のなかにはデータの可視化や集計について考えてみたり、実際に開発・運用している方が多いのではないかと思います。Redshiftを組み合わせて使うパターンが多いのではないかと思います。図にするとこんな感じでしょうか。この方法の特徴としては15分や1時間、または1日に1回などのインターバルを定義し、計算対象ウィンドウ(前述の15分や1時間、1日のこと)のデータが完全に揃った状態で行われることが挙げられます。いわゆるバッチ処理ですね。インターバルを縮めていくことによって処理の計算粒度を上げていくことは可能ですが、あくまでスケジュールドリブンの処理方式です。これに対する概念としてデータ入力によって駆動される処理方式がありますが、そのなかでも入力を逐次的に処理していく方式のことをストリームプロセッシングと呼び、入力されるデータをストリームと呼びます。Keyでソートしてくれるサービスです。Kinesisを組み合わせてリアルタイムダッシュボードを実装しようとすると以下のようなイメージになります。ストリームプロセッシングが実現するのはデータのリアルタイムな可視化だけではなく、他にも以下のようなユースケースが考えられます。Kinesisがもたらすものストリームプロセッシングでは、ストリームの上流でデータを生成するアプリケーションやデバイスのことをProducerと呼びます。以下のようなものが挙げられます。アプリケーション・サーバーモバイルデバイス/モバイルアプリケーションウェブブラウザセンサーデバイスカーナビWifiのアクセスポイント一方、下流でデータを処理するアプリケーションのことをConsumerと呼ばれ、前述のユースケースで述べたユーザーやデバイスの状態トラッキングや集計、などを行います。Kinesisの役割であり、おおまかにいって以下の機能・ベネフィットを提供します。Keyによって、後続のどのShardに出力されるかが決まります。Keyはシャーディングのためのキーのようなものです。これにより、Consumerは自分のShardに流れてくるデータのみを気にしてあげればよいということになります。numberが付与されます。これにより、Consumer側で「どこまで処理をしたのか」だったり「どこから処理を開始するのか」といった管理が容易になります。柔軟なキャパシティShardの数を調整することによりどんな流量のStreamも処理をすることが可能です。ProducerはShardの値がいくつになっていても一意のエンドポイントにデータを流し込んでやればOKです。ConsumerはShardごとにホストやノード、またはプロセスを追加してやればよいでしょう。これらの特性を活かすことにより、流量の遅いStreamから、非常に多数のProducer(例えば数十万もモバイルアプリケーション)から大量のデータがながれてくるようなStreamでも、アプリケーションを複雑化させることなく処理をすることができるでしょう。ここで紹介した概念を絵にすると以下のようになります。Kinesisアプリケーションの設計と配置また、ストリームプロセッシングを設計する上で非常に重要な概念となるのがConsumerアプリケーションの配置方法です。KinesisはストリームのMediatorのようなイメージで動作してくれます。Kinesisにコンセントを差し込むようなイメージで好きなConsumerアプリケーションを追加していくことができるのです。numberで実現されます)で受け取ることができます。Webアプリケーションのログストリームを例にとると、以下の様な使い方が考えられます。Kinesisの入出力のためのライブラリです。ここから先のパートは、既に公開されているライブラリやツール群を(一部のツールはセットアップ方法等も交えながら)紹介していきます。下記の図はあくまでイメージですが、既に数多くのツール群が公開されています。Kinesisが利用できるようになります。Kinesisが利用可能です。KinesisFluentdはご存知の方も非常に多いのではないでしょうか。Dataによってスポンサーされているプロジェクトで、ログコレクタ/イベントコレクタのデファクトスタンダードと言ってもいいくらい普及しているツールです。Kinesisへもログを取り込むことが可能です。セットップから利用までのイメージrubygems.orgで配布されていないので、githubから手動でダウンロードしてビルドする必要があります。installapacheのアクセスログをtest-streamというストリームにデータを流し込む場合は以下のような設定ファイルを書くとよいでしょう。1s</match>設定ファイルの詳細なオプションなどは後日別途取り上げたいと思います。Kinesisにフォワードしてくれるサーバーアプリケーションです。MQTTとは非常に軽量なメッセージングプロトコルで、IOTやM2Mの分野で、センサーデバイスなどからのデータ収集のための利用されることが期待されています。Kiesisに入力します。利用方法についてはGithub上のREADMEを参照してください。KinesisJava開発者の方であればLog4Jを知らない方はいないのではないでしょうか。Kinesisへデータを入力してくれます。上記のGithubプロジェクトからソースをダウンロードしてMavenを使ってビルドすることもできますが、利用したいだけならこちらのページからJarファイルをダウンロードできるようになっています。Library、もしくはKCLとして知られるこのソフトウェアはAmazonがファーストパーティーとして提供する、Consumerアプリケーションを開発するためのクライアントライブラリです。大規模なストリームを処理するためには複数のホストに分散したConsumerアプリケーションを協調して動作させる必要が出てきます。KCLはこのための処理のロードバランスや、ホストに問題が発生したときのフェイルオーバー、そのために必要となる処理のチェックポインティングなどをバックエンドで行ってくれます。これにより開発者は、Consumerアプリケーションのロジックの開発に多くのリソースを割くことができるようになります。Repositoryで配布されているので、Mavenプロジェクトから利用したいだけであれば以下のようにpom.xmlに追記してあげればOKです。実際に利用するにあたってコアとなるのは、Consumerアプリケーションのメインロジックを実装することになる、IRecordProcessorを継承したクラスです。shutdownという3つのインターフェイスを実装します。メソッド名からなんとなくイメージが湧くかと思いますが、processRecordsが実際にレコードを処理するためのメソッドで、ここに集計や分析などのロジックを書くことになります。Libraryなどを参照してください。Applicationを参照してください。KCLについてはまた後日、このブログで個別に取り上げたいと思います。LibraryKCLと名前が非常に似ていますが別物です。S3へのコネクタライブラリです。これを利用するとストリームのデータをリアルタイムに整形、フィルタしてRedshiftに格納する、などが実現できます。KCLと同様に、ConsumerアプリケーションとしてEC2などで動作させるタイプのライブラリです。詳細については後日、個別に取り上げたいと思います。SpoutStormはTwitterが開発したストリームプロセッシングのためのアプリケーションフレームワークです。KinesisをSpout(データの取り込み口)として使用できるので、Stormの経験や既存アプリケーション、トポロジなどの資産を有効に活用すうることができるでしょう。こちらについても別途個別に取り上げたいと思っています。Kinesisのデータは利用可能です。EMRを最新のバージョンで起動すれば、すでにコネクタライブラリがインストールされた状態でクラスタが起動してきます。下記にHiveでストリームを取り扱うチュートリアルがありますので興味ある方はぜひ触ってみてください。StreamingのデータソースとしてKinesisを利用することもできます。実際の設定方法などについては下記を参照してください。MapReduceSparkとの連携についても、後日個別に取り上げたいと思っています。Kinesis自体のおさらいと、ツール群のさわりを紹介させて頂きました。多数のツールが公開されていることが感じて頂けたのではないかと思います。次回以降は個別にツールを取り上げてセットアップ方法や実装のサンプルなどを紹介していきたいと思います。今のところ予定(あくまで予定です笑)として考えているのは以下のツールです。Webinarのご案内AWSソリューションアーキテクトの篠原英治(@shinodogg)です。Webinarは、Ctrix社のGoToMeetingで配信します。セミナーの申込みおよび参加方法に関しましては、こちら(http://aws.amazon.com/jp/webinar-flow/)に詳細を記載しております。iOSアプリやAndroidアプリもございますのでご活用ください。Directoryドメインへの自動参加ソリューションアーキテクトの渡邉(@gentaw0)です。Dataを設定することによりインスタンス起動時に自動的にスクリプトを実行させることが可能になっています。Directoryドメインに自動的に参加させることができます。Directoryドメインコントローラーをセットアップしておきます。serversにはドメインコントローラーのIPアドレスを設定します。typeもあわせて設定するようにしておきます。setをVPCに設定します。Directoryドメインの名前解決をおこなうために必要になります。Directoryのドメインコントローラー通信に必要なポートを許可するように設定しておく必要があります(参考:http://blogs.technet.com/b/jpntsblog/archive/2009/03/04/3208978.aspx)。ServicesでSysprepを実行してからAMIを作成するようにしてください。ComputerSystemコマンドとAdd-Computerコマンドレットによる方法についてご紹介したいと思います。Dataに設定するスクリプトとして通常のバッチファイルまたはPowerShellスクリプトを実行可能です。それぞれ、<script></script>タグと<powershell></powershell>タグでかこむことでスクリプトとして認識させることができるようになります。Dataを設定します。Directoryドメインへコンピュータを参加させる権限のあるアカウントのユーザー名とパスワードを指定します。その他、ドメイン名やOUなどについては環境にあわせてカスタマイズして使用してください。Dataを設定します。こちらも、使用するアカウントやドメイン名、OUなどは環境にあわせてカスタマイズしてください。Directoryドメインへの参加が自動的に完了します。Facebookこのブログの最新情報はTwitter、Facebookでもお知らせしています。お気軽にフォローください。