Amazon Kinesis編~KCL for Pythonを使ってみる01~

前回は『 Amazon ECS編~ECSを使ってみる03~ 』と題して、Amazon ECSでコンテナの入れ替えを試してみました。

今回は『Amazon Kinesis編~KCL for Pythonを使ってみる01~』と題して、Kinesis Client Library for Pythonを試してみたいと思います。

Kinesis Client Library for Pythonとは

Amazonから提供されているKinesis Client Library(KCL) のPython版です。

Amazon Kinesisからのデータ取得、ロードバランシングや可用性を高める機能などは、KCL for Javaを利用している構造となっており、その後の処理をPythonで記述する事が可能です。

Amazon KCL for Python

1.環境の準備

KCLで使う環境を準備しておきます。

先ずはKinesisとDynamoDBにアクセス出来るEC2を用意しておきます。

次にKinesisを作成しておきます。

1$ aws kinesis create-stream --stream-name words --shard-count 1 --region us-east-1

1. KCL for Pythonのインストール

virtualenvを利用してKCL for Pythonをインストールしてみます。

1$ virtualenv /tmp/kclpy-sample-env

virtualenvを有効にします。

1$ source /tmp/kclpy-sample-env/bin/activate

KCL for Pythonをインストールします。

1$ pip install amazon_kclpy

これでインストールは完了です。

3.サンプルをダウンロードしてみる

公式のサンプルをダウンロードしてみます。

1$ sudo yum -y install git2$ git clone https://github.com/awslabs/amazon-kinesis-client-python.git3$ cd amazon-kinesis-client-python/samples/

サンプルのファイルは以下になります。

sample.properties

KCL に関する設定ファイル。

今回は以下の部分を環境にあわせて変更しておきます。

1streamName = words2regionName = us-east-1

samplekclpyapp.py

KCL for Pythonで処理を記述するサンプル。

samplekinesiswordputter.py

Kinesisに対してサンプルのデータをプットするスクリプト。

amazonkclpyhelper.py

KCL for Pythonを実行するためのコマンドを生成してくれる。

amazonkclpyhelper.pyを利用してコマンドを生成してみます。

1$ amazon_kclpy_helper.py --print_command --java /usr/bin/java --properties sample.properties2/usr/bin/java -cp /tmp/kclpy-sample-env/local/lib/python2.7/site-packages/amazon_kclpy-1.1.0-py2.7.egg/amazon_kclpy/jars/jackson-annotations-2.1.1.jar:/tmp/kclpy-sample-env/local/lib/python2.7/site-packages/amazon_kclpy-1.1.0-py2.7.egg/amazon_kclpy/jars/httpclient-4.2.jar:/tmp/kclpy-sample-env/local/lib/python2.7/site-packages/amazon_kclpy-1.1.0-py2.7.egg/amazon_kclpy/jars/httpcore-4.2.jar:/tmp/kclpy-sample-env/local/lib/python2.7/site-packages/amazon_kclpy-1.1.0-py2.7.egg/amazon_kclpy/jars/joda-time-2.4.jar:/tmp/kclpy-sample-env/local/lib/python2.7/site-packages/amazon_kclpy-1.1.0-py2.7.egg/amazon_kclpy/jars/commons-logging-1.1.1.jar:/tmp/kclpy-sample-env/local/lib/python2.7/site-packages/amazon_kclpy-1.1.0-py2.7.egg/amazon_kclpy/jars/jackson-core-2.1.1.jar:/tmp/kclpy-sample-env/local/lib/python2.7/site-packages/amazon_kclpy-1.1.0-py2.7.egg/amazon_kclpy/jars/aws-java-sdk-1.7.13.jar:/tmp/kclpy-sample-env/local/lib/python2.7/site-packages/amazon_kclpy-1.1.0-py2.7.egg/amazon_kclpy/jars/jackson-databind-2.1.1.jar:/tmp/kclpy-sample-env/local/lib/python2.7/site-packages/amazon_kclpy-1.1.0-py2.7.egg/amazon_kclpy/jars/amazon-kinesis-client-1.2.1.jar:/tmp/kclpy-sample-env/local/lib/python2.7/site-packages/amazon_kclpy-1.1.0-py2.7.egg/amazon_kclpy/jars/commons-codec-1.3.jar:/home/ec2-user/amazon-kinesis-client-python/samples com.amazonaws.services.kinesis.multilang.MultiLangDaemon sample.properties

実際に生成されたコマンドを実行してみます。

以下の様に情報がどんどん更新されていきます。

1INFO: Received response {"action":"status","responseFor":"initialize"} from subprocess while waiting for initialize while processing shard shardId-0000000000002Aug 13, 2015 6:04:37 AM com.amazonaws.services.kinesis.metrics.impl.DefaultCWMetricsPublisher publishMetrics3INFO: Successfully published 20 datums.4Aug 13, 2015 6:04:37 AM com.amazonaws.services.kinesis.metrics.impl.DefaultCWMetricsPublisher publishMetrics5INFO: Successfully published 3 datums.6Aug 13, 2015 6:04:47 AM com.amazonaws.services.kinesis.metrics.impl.DefaultCWMetricsPublisher publishMetrics7INFO: Successfully published 12 datums.

topコマンドでもプロセスを確認出来ます。

122482 ec2-user  20   0 1408m  61m  12m S  0.3  6.1   0:02.55 java222499 ec2-user  20   0  199m  10m 3720 S  0.0  1.1   0:00.06 sample_kclpy_ap

また、管理用のDynamoDBが作成されているのが分かります。

1$ aws dynamodb describe-table --table-name PythonKCLSample --region us-east-1

いかがでしたでしょうか?

次回は『Amazon Kinesis編~KCL for Pythonを使ってみる02~』と題して、Kinesis Client Library for Pythonで実際にレコード処理の記述を試してみたいと思います。

お楽しみに!!!

この記事を書いた人

aws-recipe-user