前回は『 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で記述する事が可能です。
1.環境の準備
KCLで使う環境を準備しておきます。
先ずはKinesisとDynamoDBにアクセス出来るEC2を用意しておきます。
次にKinesisを作成しておきます。
1$ aws kinesis create-stream --stream-name words --shard-count 1 --region us-east-11. KCL for Pythonのインストール
virtualenvを利用してKCL for Pythonをインストールしてみます。
1$ virtualenv /tmp/kclpy-sample-envvirtualenvを有効にします。
1$ source /tmp/kclpy-sample-env/bin/activateKCL 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-1samplekclpyapp.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で実際にレコード処理の記述を試してみたいと思います。
お楽しみに!!!