前回ご紹介したKCL for Python ですが、ちゃんと使ってみました。
と言いましても、ブログにある通り、サンプルを動かすだけなのですが、PyPiでインストールすると、勝手が違うので色々ハマりました、が何とか動作確認が出来ました。
では、順を追って説明します。
まず、sampleにあるブツについてですが
- sample_kinesis_wordputter.py
コイツはKinesisにデータを放り込むだけです。参照としてはboto.kinesisをimportしているだけなので、KCLとは直接関係ございません。
- sample_kclpy_app.py
これが今回のメインです。Kinesisからデータを受け取り、処理します。何をしているのかはあとでね。
- sample.properties
.propertiesなので、あからさまにJava様が使うものですよね!コイツは本家java版のKCLが参照しているハズ。上記のsample_kinesis_wordputter.pyは、このファイルを参照しませんのでご注意ください。
- amazon_kclpy_helper.py
java使いならよくわかると思いますが、javaのアプリを動かすにはCP(ClassPath)を通したり面倒なことが多々有ります。このコマンドはCPを指定したjavaコマンドを作ってくれます。なんと親切なことか!
でははじめましょう。
1. 普通は、Kinesisアプリ(受信側)を先に動かすのですが、送信側を動かしましょう。
$ ./sample_kinesis_wordputter.py -s [お好きなstream名] -r ap-northeast-1 -w imaoka -w help -w me!
CredentialやIAMロールがあれば、勝手にストリームの作製もやってくれますので、いきなり叩いてOK
2. sample.propertiesを編集します。PyPiでインストールしてしまうと、かなり深い場所に入ってしまうので、諦めてGitHubからダウンロードでも良いです。sample_kclpy_app.pyと同じ場所において下記に編集
executableName = ./sample_kclpy_app.py
streamName = [お好きなstream名、さっき作ったやつ]
regionName = ap-northeast-1
3. amazon_kclpy_helper.pyで、コマンドを作ります。
$ ./amazon_kclpy_helper.py --print_command --java /usr/bin/java --properties sample.properties > run_kclapp
$ chmod +x run_kclapp
4. 動かします。いよいよ
$ ./run_kclapp
Putが有るときだけGetが反応しているのが確認できます。が、肝心のKinesisApp(sample_kclpy_app.py)はなにをやっているのかというと、単純に受け取った文字をBase64にエンコードしているだけです。じゃあpythonでprintすれば結果が見えると思いましたが、そうはいかないようです。(もしかしたらどこかにLogが出ているかもしれません)今日はこのあたりで!また、本家のKCLサンプルがそうでしたが、まずはEC2のメタデータからCredentialを取るような実装であれば、EC2で動かす必要があります。コスト的にはEC2で動かすのは当然ですが、ローカルで動かす場合はその点注意してください。
参考