ただし、Windows10 IoT Coreではなく、もちろんLinuxからです。
今回は、RaspbianからPythonスクリプトでEventHubsへデータを登録します。
まず、Raspbianの実行環境を設定します。
管理者権限で、python-pipをインストールします。
その後、pipを使ってAzureSDKをインストールします。
# apt-get install python-pip
# pip install azure
今回は、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かなー。