GCPUG in Osaka で sakura.io と GCPの連携について発表しました

6/13(水) に行われた GCPUG in Osaka #7 で、 sakura.io と GCP の連携について発表してきました。

公開用資料は、 Speaker Deck に上がっています。

当日のDataflowのコードなどは、GitHub に置いてあります。

発表内容について

今回の発表では、 sakura.io の機能を使って、 GCP Pub/Subにデータを送信し、 Pub/Sub → Dataflow → BigQuery とデータを保存、Data Studio で可視化する、ということを行いました。
IoTをテーマに2つ発表があるということもあり、前半にサービス紹介を入れざるを得なかったことと、すでにDataflowなどを触っている方が多いという想定で資料を準備していたので、あまり細かなGCPのチュートリアルは入れていません。
今回、鯖江市と協力して行っている水位計測データを利用しました。デバイス側も開発・改善しつつのデータということもあり、プロダクション環境で扱うデータよりもはるかに除外値が多いのですが、実データ使ってDataflowが便利に使えることはお見せでき、連携した場合のイメージは何となく示すことができたと考えています。

最後に

今回、 Pub/Sub, Dataflow, BigQuery, Data Studio という4つを使ったのですが、他にもいくつか良く利用されるであろうソリューションがあります。
その1つがデータ分析のためのCloud MLです。
IoTでデータを収集する目的として、やはりデータを分析したい、というモチベーションがある場合が多く、今回Dataflowを中心に話すつもりではなく、Cloud MLを使ったデータ分析の話を中心に話すべく準備していました。
ただ、データの収集・保存の準備をしている中で、私自身が初めて実証実験のデータを見て、想定以上の異常データがあることに気づき前処理に時間を取られたということがあり、だったらこの知見をお話しておいた方が、参加者が(sakura.io に限らず、)IoTプロダクトを作るときに参考になるのでは、と思い、Dataflow を使った前処理のお話をさせていただきました。

また機会があれば、 sakura.io から Cloud MLまでの連携をする場合の紹介ができればと思います。

Continue Reading

sakura.io のコントロールパネルが新しくなりました

こんにちは、 sakura.io のプラットフォーム開発を担当しています、藤原です。
本投稿では、sakura.io コントロールパネルのリニューアルについてお知らせいたします。
以下が新しいコントロールパネルです。

何故リニューアルを行ったのか?

理由としては「表示が遅くなる場合があるから」 です。
旧コントロールパネルは、仮に特定のプロジェクトに 5万個モジュールなどの大量のデータが登録されていた場合に、全てのモジュールを取得するようになっておりました。

新コントロールパネルでは、同様の条件で 分割して モジュールの情報を返すように変更されました。
一般的に言われる「ページネーション」の適用になります。

ページネーションにより

  1. サーバサイド側の SQL の削減、オブジェクト生成
  2. クライアントサイドのオブジェクトの生成

が、削減され体感描画速度が向上しました。

ページネーションによる管理 API の利用方法

ページネーションの導入により、管理 API の v2 を今回開発しました。
もちろん、以前の 管理 API v1 は今後もご利用いただけます。
これから管理 API v2 の実際の利用方法について示します。
管理 API 呼び出しに際する API Token と API Secret の取得は、管理API 利用ガイド を参考にしてください。
今回はモジュールのリストを取得してみることにします。

管理 API v1

$ curl -XGET  --header 'Accept: application/json' --user '{api token}:{api secret}'   'https://api.sakura.io/v1/modules/'

このようなリクエストを送ると、下記のようなレスポンスデータが返却されます。

[
{
"id": "1",
"name": "",
"project": 1,
"is_online": false,
"serl_number": "*********",
"model": "test-model"
},
{
"id": "2",
"name": "",
"project": 1,
"is_online": false,
"serial_number": "*********",
"model": "test-model"
},
...
]

管理 API v2

次に、ページネーションを用いた場合のデータの取得方法について解説します。
変更点としては、下記になります。

  1. アクセスする URL
  2. cursor を用いてリクエストを送信

アクセスする URL

アクセスする URL は下記のように変更になります。

https://api.sakura.io/v1/modules/ => https://api.sakura.io/v2/modules/

cursor を用いてリクエストを送信

こちらは実例を交えながら後述します。
それでは実際にアクセスして情報を取得してみましょう。

$ curl -XGET  --header 'Accept: application/json' --user '{api token}:{api secret}'   'https://api.sakura.io/v2/modules/'

このとき、以下のような結果が表示されます。

{
"meta": {
"per_page": 100,
"links": {
"next": "https://api.sakura.io/v2/modules/?cursor=bbbbbbbbbb",
"previous": null
}
},
"results": [
{
"id": "1",
"name": "",
"project": 1,
"is_online": false,
"serial_number": "*********",
"model": "test-model"
},
...
]
}

このとき、 1 ~ 100件目が表示されました。
101 件目以降を表示したい場合には、 先程前述した 「cursor を用いてリクエストを送信」 を利用します。
レスポンスの next の URL にリクエストを投げます。

$ curl  -XGET --header 'Accept: application/json' --user '{token}:{secret}' "https://api .sakura.io/v2/modules/?cursor=bbbbbbbbbb"

実際に投げると、下記のようにレスポンスが帰ってきて、101 件目以降が表示されました。

{
"meta": {
"per_page": 100,
"links": {
"next": "https://api.sakura.io/v2/modules/?cursor=aaaaaaaaaaa",
"previous": "https://api.sakura.io/v2/modules/?evcursor=ccccccccc"
}
},
"results": [
{
"id": "101",
"name": "",
"project": 1,
"is_online": false,
"serial_number": "********",
"model": "test-model"
},
...
]
}

cursor を用いてリクエストを送信」を繰り返しますと、最終ページにたどり着きます。
最終的に next が null になると、最終ページとなります。
具体的には下記のようなレスポンスが帰ってきた場合です。

{
"meta": {
"per_page": 100,
"links": {
"next": null,
"previous": "https://api.sakura.io/v2/modules/?cursor=yyyyyyyyyyy"
}
},
"results": [
{
"id": "50000",
"name": "",
"project": 1,
"is_online": false,
"serial_number": "********",
"model": "test-model"
},
...
]
}

 

最後に

コントロールパネルのリニューアルとその背景について解説させていただきました。
今回のリニューアルにより、大量のモジュールやプロジェクトをご利用のお客様も安心してご利用いただけます。
今後とも sakura.io をよろしくお願いいたします。

Continue Reading
Close Menu