前回は『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 |
2. 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 2 3 |
$ sudo yum -y install git $ git clone https://github.com/awslabs/amazon-kinesis-client-python.git $ cd amazon-kinesis-client-python/samples/ |
サンプルのファイルは以下になります。
sample.properties
KCL に関する設定ファイル。
今回は以下の部分を環境にあわせて変更しておきます。
1 2 |
streamName = words regionName = us-east-1 |
sample_kclpy_app.py
KCL for Pythonで処理を記述するサンプル。
sample_kinesis_wordputter.py
Kinesisに対してサンプルのデータをプットするスクリプト。
amazon_kclpy_helper.py
KCL for Pythonを実行するためのコマンドを生成してくれる。
amazon_kclpy_helper.pyを利用してコマンドを生成してみます。
1 2 |
$ amazon_kclpy_helper.py --print_command --java /usr/bin/java --properties sample.properties /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 |
実際に生成されたコマンドを実行してみます。
以下の様に情報がどんどん更新されていきます。
1 2 3 4 5 6 7 |
INFO: Received response {"action":"status","responseFor":"initialize"} from subprocess while waiting for initialize while processing shard shardId-000000000000 Aug 13, 2015 6:04:37 AM com.amazonaws.services.kinesis.metrics.impl.DefaultCWMetricsPublisher publishMetrics INFO: Successfully published 20 datums. Aug 13, 2015 6:04:37 AM com.amazonaws.services.kinesis.metrics.impl.DefaultCWMetricsPublisher publishMetrics INFO: Successfully published 3 datums. Aug 13, 2015 6:04:47 AM com.amazonaws.services.kinesis.metrics.impl.DefaultCWMetricsPublisher publishMetrics INFO: Successfully published 12 datums. |
topコマンドでもプロセスを確認出来ます。
1 2 |
22482 ec2-user 20 0 1408m 61m 12m S 0.3 6.1 0:02.55 java 22499 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で実際にレコード処理の記述を試してみたいと思います。
お楽しみに!!!