2015年8月26日水曜日

【Microsoft Azure】RaspberryPi(Raspbian)からPythonでEventHubsを経由してSQLDatabaseへデータを保存してみる

IoTな機器からデータを収集するのにEventHubsを使ってようと思います。
ただし、Windows10 IoT Coreではなく、もちろんLinuxからです。

今回は、RaspbianからPythonスクリプトでEventHubsへデータを登録します。

まず、Raspbianの実行環境を設定します。
管理者権限で、python-pipをインストールします。
その後、pipを使ってAzureSDKをインストールします。
# apt-get install python-pip
# pip install azure

次は、SQL Database の準備です。
今回は、testデータベースを作成し、以下のCreateTable文でテーブルを作成しました。
create table Test (
  id int identity(1,1) not null primary key,
  insert_date datetime2 default getutcdate() not null,
  test varchar(256)
);

クラシックポータルから、ServiceBusを作成します。
まずは名前空間を作成します。
名前空間名は「pythontest」、地域は「米国中南部」(個人的な都合なので使えるところならどこでも)にします。

次はイベントハブの作成です。
左下の「新規」を押して作成します。
イベントハブ名は「testhub」、地域は「米国中南部」(名前空間と合わせます)、名前空間は先ほど作った「pythontest」とします。

作成したイベントハブに、共有アクセスポリシーを追加します。
今回は名前に「writer」、アクセス許可に「送信、リッスン」を設定して保存します。




接続に必要な情報は、共有アクセスポリシーの名前「writer」、プライマリーキー、イベントハブ名、名前空間名です。

ここまで出来たら、EventHubsとSQLDatabaseを繋ぐためのStreamAnalyticsを作成します。
ジョブ名を「teststream」、地域は「South Central US」(名前空間に合わせます)に設定します。

作成したジョブの「入力」タブを見ると何もないので作成します。

データストリームを選んだ状態で次へ。


 イベントハブを選んだ状態で次へ。

入力に割り当てるイベントハブの設定です。
入力のエイリアスに「input」、名前空間は「pythontest」を選択、EVENTHUBは「testhub」(名前空間を設定すると自動的に選択されてる)、イベントハブポリシーを「writer」にして次へ。

シリアル化の設定はひとまずJSONで。

入力が設定できたので、次は「クエリ」タブを選択し、クエリの設定をします。
ここでは、ひとまず「SELECT input.test FROM input」としておきます。


「出力」タブに移動して、出力を作成します。
まずは出力先を「SQL Database」にします。

出力先のデータベースの情報を環境に合わせて設定します。
テーブルは、最初に作成した「test」とします。


長々と説明しましたが、これでイベントハブからSQLDatabaseまでの設定が終わりました。

次は、Pythonスクリプトです。
名前空間名、イベントハブ、共有イベントポリシー名、アクセスキーを設定して接続、値の送信を行います。
$ vi eventhub_test.py

from azure.servicebus import ServiceBusService

namespace        = 'pythontest'
eventhub_name = 'testhub'
sas_name          = 'writer'
sas_key             = 'SECRET'

sbs = ServiceBusService(namespace, shared_access_key_name=sas_name, shared_access_key_value=sas_key)
sbs.send_event(eventhub_name, '{"test":"35.689556 139.691722"}')

では、実際に動かしてみます。
まず、ポータルから作成したストリーム「teststream」を開始します。
次に、上記のスクリプトを実行します。
$ python eventhub_test.py


そして、SQLDatabaseのテーブルを確認します。
もちろんWindowsは使わずに、FreeTDSで確認です。(過去記事を御覧ください)
$ tsql ....
1> select * from test;
2> go
id    insert_date   test
1     2015-08-26 04: 02: 22.3330000    35.689556 139.691722
(1 rows affected)


これで、Raspbianから、イベントハブからSQLDatabaseへのデータ保存ができました。
RaspberryPiからPythonで連携できると、何かと幅が広がるかと思います。

次はREST APIかなー。
























0 件のコメント: