ゆれくるコール開発日誌

ゆれくるコール、あめふるコール、つながるコールや緊急地震速報のことなど

C#でAWS Kinesisからデータをひっこぬく

こんにちは、商品開発部の池端です。

久々の開発ブログです、、

 

AWS KinesisからデータをひっこぬくのをC#でやりたい。

 

Kinesisのクライアントを作るにはAWS SDKで実現してもいいんだけど、Kinesis Client Libraryというのがあって、それを利用すると楽に開発できる、らしい。

ここにそう書いてある。

docs.aws.amazon.com

 

Kinesis Client Libraryはいろんなプログラミング言語用のものが用意されていて、C#のもある。
GitHubここにライブラリ、サンプルコードひっくるめてあります。

 

これをダウンロードしてきてサンプルコード動かしてみれば、C#でのKinesis Client Libraryの利用方法がなんとなくわかります。
このサンプルコードを動かすのに、プロジェクト丸ごとビルドしてサンプルコードのプロジェクト実行すればよいわけでなく、ちょっとした手間が必要でした。
GitHubのREAdMEに書いてあるのでその通りにすればいいんだけど、日本語での解説記事があんまりないようなので、この記事で手順を書いてみたいと思います。

 

0. Java実行環境の準備
Kinesis Client LibraryはJavaのライブラリなのです。
そのためJavaの実行環境が必要になります。
Javaの実行環境がない場合は、Javaの実行環境をあらかじめ用意しましょう。

 

1. Amazon Kinesis Client Library (.NET)のダウンロード
GitHubここからダウンロードします。

 

2. プロジェクトのビルド
何も考えずに、ソリューションのビルドってするとビルドエラーになっちゃいます。
任意のプロジェクトを選択して、個別にビルドするとNuGetがうまいことやってくれます。
その後ソリューションのビルドをすればおk。

 

3. Kinesisにデータをつっこむ
SampleProducerというプロジェクトがKinesisにデータをつっこむサンプルです。

 

こちらを動かすにはAWS Credencialsの設定が必要です。
AWS Credencialsの設定はAWSSDKが導入されていて、Credencialsの設定がされていれば必要ないんですが、検証を行った2016/12/06現在、なぜか最新のAWS SDK(AWSToolsAndSDKForNet_sdk-3.3.27.0_ps-3.3.27.0_tk-1.11.0.0.msi)がWindowsにインストールできない状況でした。(インストール中に「There is a problem with this Windows Installer package」とかいわれちゃう)
そのためプロジェクトのapp.configのappSettingsに、"AWSAccessKey"と"AWSSecretKey"を追加しました。

 

プロジェクトを実行すると、USEast1(米国東部(バージニア北部))にmyTestStreamという名前でKinesis Streamが作成され、10個のテストデータがつっこまれます。

 

4. Kinesisからデータをひっこぬく
SampleConsumerというプロジェクトがKinesisからデータをひっこぬくサンプルです。

 

まず、SampleConsumerプロジェクト内のkcl.propertiesのexecutableNameの設定を、"bin/Debug/SampleConsumer.exe"とします。
"Debug"の部分はビルドの仕方(Release or Debug)に合わせて変更してください。

 

次に、コマンドプロンプトでSampleConsumerプロジェクトのディレクトリにcdし、下記のコマンドを実行します。

..\Boot strap\bin\Debug\Bootstrap.exe --properties kcl.properties --execute

こちらも"Debug"の部分はビルドの仕方(Release or Debug)に合わせて変更してください。

 

実行が始まると、初回実行時に必要なもの(Javaのライブラリ)をダウンロードし、動作するようになっています。
標準出力にKinesisから取得したデータが表示されると思います。(その他にもいろいろ標準出力されますが、、)
こちらはCtrl+Cで止めるまで動き続け、Kinesisにデータが追加される度に動作します。

 

なおSampleConsumerは処理の際に、USEast1(米国東部(バージニア北部))のDynamoDBにDotNetKinesisSampleという名前でテーブルを作成します。

 

こちらを動かすにもAWS Credencialsの設定が必要です。
上記の理由によりSDKが導入できなかったので、Windowsユーザのホームディレクトリに.awsというディレクトリを作成し、credentialsファイルをおき、その中にaws_access_key_idとaws_secret_access_keyを記載しました。
ちなみにWindowsで"."からはじまるディレクトリの作成は、".aws."とタイプします。

 

5. あとかたづけ
USEast1(米国東部(バージニア北部)) に自動的に作成されたKinesis StreamとDynamoDBのテーブルを忘れずに削除しましょう。
つかわなくても、存在するだけでお金かかっちゃいます。。

 

このサンプルを動かし、サンプルプロジェクトのコードを見ればなんとなく使い方がわかるんじゃないかと思います。
動作させるのにJava環境が必要だったりするので、実運用環境ではその辺がネックになったりしそうな気もしますね。

 

だれかのお役に立つと幸いです!