続 カッコの付け方

AWSを始めとしたクラウドコンピューティング全般と、唯一神emacsにおける()の付け方についてだらだら書きます

Amazon Kinesis ライブラリ Python版を使ってみる

前回ご紹介した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で動かすのは当然ですが、ローカルで動かす場合はその点注意してください。

参考

https://github.com/awslabs/amazon-kinesis-client-python