データバケット利用ガイド(メッセージ受信タイプ)

Data Bucket Guide: Message-Receiving Type

データバケット利用ガイド

はじめに

IoTをビジネスに活用するにあたって課題となるのが、IoTデバイスが収集したデータをどうやってサーバーやクラウドに保存するかということです。サーバーやクラウドの構築には専門知識が必要です。また、それにかかる費用や期間も気になるところです。

データバケットでは、クラウドにデータを保存する仕組みを提供します。利用するクラウドには、セキュアで大規模データを高速に処理できるGoogle Cloud Platform を採用しています。

このデータバケットを使えば、IoTデバイスからのデータを収集・蓄積する仕組みが、サーバーやクラウドに関する専門的な知識を必要とせず、簡単かつスピーディに構築できます。

データバケットとは何か

データバケットは、IoTデバイス(「デバイス」)から送られてくるデータを受け取り、ストレージに保存するクラウド型のシステムを提供します。

データバケット概略図

このシステムは、お客さまのGoogle Cloud Platform (「GCP」)プロジェクト上に、BLOCKSが自動で構築します。システムの構築(データバケットの作成)に、GCPに関する専門的な知識は不要です。

データバケットのシステムは、お客さまのGCPプロジェクト上に構築するため、BLOCKSの料金とは別に「GCPサービスの利用料金」が発生します。

データバケットには、データの種類(「タイプ」)に応じて、2つのタイプあります。

タイプ 説明
メッセージ受信タイプ
  • デバイスから加速度・温度・湿度などの比較的小さなデータ(「メッセージ」)を受け取り、BigQueryのテーブルにデータを保存します。
メッセージ受信タイプ概略図
ファイル受信タイプ
  • デバイスから画像ファイルや音声ファイルなどのファイル形式のデータを受け取り、Google Cloud Storageにファイルを保存します。
  • ログ(ファイル名や保存日時など)を保存できます(オプション)。
  • ファイルの保存を契機に、フローデザイナーのフローを実行します(オプション)。
ファイル受信タイプ概略図

データバケットの作り方

このドキュメントでは、メッセージ受信タイプのデータバケットについて解説しています。

ファイル受信タイプのデータバケットについては、「データバケット利用ガイド(ファイル受信タイプ)」で解説しています。

<セルフサービスプランの場合>

  • GCPサービスアカウントの役割にオーナー権限が付与されている必要があります。

    GCPサービスアカウントの役割にオーナー権限がない場合は、GCPコンソールのIAM のページにアクセスして、該当するGCPサービスアカウントの役割にオーナー権限を付与してください(図の1→2→3の順)。

    GCPコンソールのIAM画面

データバケットを作る大まかな流れ

データバケットは、「データバケットとは?」の画面の[利用開始]ボタンをクリックするか、データバケット一覧画面の[追加]ボタンをクリックして、表示される案内に沿って操作するだけで簡単に作れます。

以下は、データバケットを作るときの大まかな流れです。

  1. データバケット作成
    データバケットの種類を選択して、名前を設定します。
  2. GCPサービスアカウント設定(セルフサービスプランのみ)
    データバケットで使用するGCPサービスアカウントを設定します。
  3. エントリーポイント設定
    デバイスがデータバケットへデータを送るときの送り先の設定をします。
  4. プロセス設定
    データバケットが受け取ったデータをどう処理するかを設定します。
  5. ストレージ設定
    データバケットが受け取って処理したデータをどう保存するかを設定します。
  6. 入力内容の確認
    これまでの設定内容を確認します。

それぞれについて、以降で詳しく解説します。

データバケット作成

初めてデータバケットを作成する場合は、「データバケットとは?」の画面の[利用開始]ボタンをクリックします。

データバケットとは?画面

データバケットがひとつ以上ある場合は、、データバケットの一覧画面左上の[追加]ボタンをクリックします。

データバケット一覧画面

info_outlineライセンス不足の場合は、その旨のメッセージが表示されます(管理者の場合は、ライセンス購入画面を表示)。メッセージが表示された場合は、組織の管理者に問い合わせてください(管理者の場合は、ラインセンスを購入してください)。

続いて、データバケットのタイプを選択して、「次へ」ボタンをクリックします。

メッセージ受信タイプ選択

タイプは、以下の説明を参考にして選択してください。

タイプ 説明
メッセージ受信タイプ
  • デバイスから加速度・温度・湿度などの比較的小さなデータ(「メッセージ」)を受け取り、BigQueryのテーブルにデータを保存します。
メッセージ受信タイプ概略図
ファイル受信タイプ
  • デバイスから画像ファイルや音声ファイルなどのファイル形式のデータを受け取り、Google Cloud Storageにファイルを保存します。
  • ログ(ファイル名や保存日時など)を保存できます(オプション)。
  • ファイルの保存を契機に、フローデザイナーのフローを実行します(オプション)。
ファイル受信タイプ概略図

データバケットに付ける名前は、わかりやすい名前をつけておくと、管理しやすくなります。

データバケット名設定(メッセージ受信)

設定が完了したら、「次へ」ボタンをクリックします。

GCPサービスアカウント設定

このステップはセルフサービスプランの場合のみです。

ここでは、GCPサービスアカウントの選択とGCPのサービスを利用するためのAPIを有効にします。

データバケット(メッセージ受信)GCPサービスアカウント設定
GCPサービスアカウント選択

データバケットは、お客さまのGCPプロジェクトに、BLOCKSが環境を自動で構築し運用します。BLOCKSからGCPプロジェクトを操作するためには、そのプロジェクトに対してオーナー権限を持つGCPサービスアカウントが必要です。

ここでは、GCPプロジェクトに対してオーナー権限を持つGCPサービスアカウントを選択してください。

GCPサービスアカウントの作成については、基本操作ガイドの「Google Cloud Platformのサービスアカウントキーを作成する」を参考にしてください。このページの作成例では、編集権限を指定していますが、その部分でオーナー権限を指定してください。

APIの有効化

確認]ボタンの前にチェックマーク()が付いていないAPIがある場合は、以下の操作を行います。

  1. APIをまとめて有効化する]ボタンをクリックします。
  2. 別タブにGCPコンソールの画面が開きます。
  3. GCPコンソール画面内の[続行]ボタンをクリックします。
  4. APIは有効になっています」というメッセージが表示されたら、GCPコンソールの画面を閉じて、BLOCKSの画面に戻ります。

上記操作が終わったら、が付いていないAPIの[確認]ボタンをクリックします。[確認]ボタンの前にが付くことを確認してください。この操作をが付いていないすべてのAPIに対して繰り返してください。

もし、が付かない場合は、しばらく時間をおいてから[確認]ボタンをクリックしてください。状況によっては、すぐにはが付かない場合もあります。その場合は、 が付くまで、以下の操作を繰り返してください。

  1. しばらく時間をおく
  2. 確認]ボタンをクリックする

が表示される原因としては、以下のことが考えられます。

  • サービスアカウントの役割が「オーナー」となっていない。

    GCPコンソールメニュー(GCPコンソール左上の)の「IAMと管理」をクリックし、「IAM」で確認します。もし、役割が「オーナー」となっていない場合は、「オーナー」を選択します。

  • 対象となるGCPプロジェクトの課金が有効になっていない。

    GCPコンソールメニュー(GCPコンソール左上の)の「お支払い」で確認します。もし、課金が有効になっていない場合は、課金を有効にします。

設定が完了したら、「次へ」ボタンをクリックします。

エントリーポイント設定

ここでは、エントリーポイントURLの設定を行います。

データバケット(メッセージ受信)エントリーポイント設定

エントリーポイントとは、デバイスがデータバケットへデータを送るときの送り先(データを受け取って処理する部分の受け取り口)のことです。エントリーポイントは、URLで示されます。デバイスは、このエントリーポイントURLにHTTPのPOSTメソッドでデータを送ります。

エントリーポイント説明図

エントリーポイントURLは、以下のように形式が決まっています。一部のみ自由に設定することができます。

https://magellan-iot-<*****>-dot-<プロジェクトID>.appspot.com
項目 説明
<*****>

このデータバケットのエントリーポイントを特定するための文字列です。自由に設定できます。デフォルトの値は、ランダムな16進数文字列です。

  • 使用できる文字は、英小文字(a〜z)、数字(0〜9)およびハイフン(-)です。
  • 末尾の文字は、数字か英小文字でなければなりません。
  • 文字数は、プロジェクトIDの長さによって変わり、15文字から27文字までです。

1つのGCPプロジェクトで、複数のデータバケットを作成する場合は、文字列が重複しないように設定してください。

<プロジェクトID> GCPプロジェクト のプロジェクトIDが自動で設定されます。変更できません。

設定が完了したら、「次へ」ボタンをクリックします。

プロセス設定

ここでは、プロセスに関するオプション設定を行います。

データバケット(メッセージ受信)プロセス設定

プロセスとは、エントリーポイントで受け取ったデータを処理する部分のことです。

オプション設定では、Google Compute EngineやGoogle Kubernetes Engineに関する設定を行います。

設定項目 説明
マシンタイプ

使用する仮想マシンの種類を選択します。

  • n1-standard-1 (1仮想CPU、3.75 GBメモリ)
  • g1-small (0.5仮想CPU、1.70 GBメモリ)

デフォルト値は、n1-standard-1です。

MAGELLAN BLOCKSの料金とは別に、Google Compute Engineのマシンタイプごとの料金が適用されます。

起動VMの数

起動する仮想マシンの数(ノード)を指定します。

起動VM数が5までは無料です。6以上になると、MAGELLAN BLOCKSの料金とは別にGCPの課金対象となり、Google Kubernetes Engineの料金が適用されます。

VM 1台あたりのコンテナ数

仮想マシン1台あたり、エントリーポイントで受け取ったデータを処理するBLOCKSのアプリケーション(コンテナ)の数を指定します。

指定できるコンテナ数は、1から10までです。

info_outline「起動VMの数」と「VM 1台あたりのコンテナ数」は、データバケット作成後の詳細画面から変更可能です。

設定が完了したら、「次へ」ボタンをクリックします。

ストレージ設定

ここでは、ストレージに関する設定を行います。

データバケット(メッセージ受信)ストレージ設定

ストレージとは、デバイスから送られてくるデータの保存先です。ストレージでは、データの種類ごとに、データを分けて保存できます。

データの種類は、メッセージタイプで識別します。メッセージタイプは、デバイスが送るデータの種類を示す識別子であり、ストレージの保存先を示す識別子です。識別子は、半角英数字とアンダースコア(_)で構成されます(例:location_message)。

データバケットへデータを送るデバイスは、データバケットへ送るデータに、このメッセージタイプを含めなければなりません。データバケットは、この「メッセージタイプ」を元に、送られてきたデータをストレージのどこにデータを保存するかを決定します。

メッセージタイプ解説図

ここでは、送られてくるデータと保存先に関する情報を設定をします。この設定では、送られてくるデータと保存先に関する情報の追加、編集、削除ができます。

  • 追加する場合は、「保存先を追加する」リンクをクリックします。
  • 編集する場合は、保存先一覧から編集したい情報の編集欄のアイコンをクリックします。
  • 削除する場合は、保存先一覧から削除したい情報の削除欄のアイコンをクリックします。

現バージョンでサポートするストレージは、BigQueryのみです。このため、データの保存先に関する情報の設定は、BigQueryのテーブルに関する情報です。

BigQueryストレージで、追加・編集する情報は、次のとおりです。

項目 説明
メッセージタイプ

保存するデータのメッセージタイプを設定します。

識別子は、半角英数字とアンダースコア(_)で構成します(例:location_message)。

ここで設定したメッセージタイプのデータが以下で設定するBigQueryのテーブルに保存されます。

データセット データを保存するBigQueryのデータセットIDを設定します。
テーブル データを保存するBigQueryのテーブル名を設定します。
スキーマ

テーブルのスキーマを設定します。

テーブル分割

データ保存先のテーブルを日ごとや月ごとに分割する設定をします。

テーブルを分割する場合は、「テーブル分割に使用する時間(フィールド)」も設定します。

テーブル分割補足

「テーブル分割に使用する時間(フィールド)」には、スキーマ中のデータ型がTIMESTAMPのフィールドと、「データバケットに送られた時間を使用する」が選択候補と列挙されています。「データバケットに送られた時間を使用する」を選択すると、データバケットがデータを受け取った時間をテーブル分割に使用します。

日ごとや月ごとにテーブルを分割するとテーブル名にはサフィックス(テーブル名の末尾に追加する文字列)がつきます。日ごと、月ごとにつくサフィックスの仕様は、次のとおりです。

  • 日ごと: _%Y%m%d
  • 月ごと: _%Y%m01

%Y、%m、%dは、「テーブル分割に使用する時間(フィールド)」が示す時間情報に応じて、それぞれ年(西暦4桁)、月(2桁)、日(2桁)に置き換わります。例えば、テーブル名がsampleで、日ごとのテーブル分割を選択した場合、sample_20160905、sample_20160906などのようにテーブルが分割されます。

設定が完了したら、「次へ」ボタンをクリックします。

入力内容の確認

ここでは、これまで設定した内容が確認できます。

データバケット(メッセージ受信)入力内容の確認

設定内容に間違いがないかを確認して、もし間違いがあれば「前へ」ボタンをクリックして、間違いを修正する設定画面まで戻ります。設定に間違いがなければ、「完了」ボタンをクリックします。

データバケットの作成には、しばらく時間がかかります。データバケットの作成が完了すると、データバケットの詳細画面に切り替わります。

データバケットへデータを送る方法

ここでは、デバイスからデータバケットへデータを送る方法について解説します。

デバイスからデータバケットへデータを送るためには、次の3つの情報が必要です。

  • エントリーポイントURL
  • APIトークン
  • メッセージタイプ

これらの情報は、データバケットの詳細画面で確認できます。「データバケットの詳細画面」は、確認したいデータバケットの名前クリックすると表示されます。

デバイスからデータバケットへデータを送るときは、このエントリーポイントURLにHTTPのPOSTメソッドでアクセスしてください。

また、送るデータはJSON形式にします。APIトークンやメッセージタイプは、JSON形式のデータに含めます。

APIに送るデータの解説図

データバケットに送るJSON形式のデータ仕様は、次のとおりです。

{
  "api_token": "************************",
  "logs": [
    {
      "type": "message",
      "attributes": {
        "date": 1473642000,
        "name": "device_001",
        "message": "hello"
      }
    }
  ]
}

各メンバー(名前と値の組)の意味は次のとおりです。

名前 値の説明
"api_token" APIトークンを文字列で指定します。
"logs"

データをオブジェクト値の配列で指定します。

  • オブジェクト値: {...}という形式、...はカンマ(,)区切りのメンバーが1個以上
  • 配列: [{...}, {...}]という形式
"type" メッセージタイプを指定します。メッセージタイプによって、ストレージのどこ(BigQueryストレージの場合はテーブル)に保存するかが決まります。
"attributes"

ストレージに保存するデータをオブジェクト値で指定します。

BigQueryストレージの場合は、名前がそのデータを保存するテーブルのフィールド名、値がそのフィールドに保存するデータ値です。

日時として扱うフィールド(今回の例では、名前"date"の値1473642000)は、UNIX時間の形式で指定する必要があります。

次の例は、2種類のデータをまとめてデータバケットへ送るときのJSON形式データです。

{
  "api_token": "************************",
  "logs": [
    {
      "type": "message",
      "attributes": {
        "date": 1473642000,
        "name": "device_001",
        "message": "hello"
      }
    },
    {
      "type": "temperature",
      "attributes": {
        "date": 1473642000,
        "name": "device_fukuoka_001",
        "temperature": 24.5
      }
    }
  ]
}

GCPサービスの利用料金

データバケットは、ユーザーのGCPプロジェクトに各種GCPサービスを利用した環境を構築します。

このため、MAGELLAN BLOCKSの料金とは別にGCPの料金が発生します。適用される料金は、サービスごとに異なります。詳しくは、データバケットで使用する各サービスごとの料金ページを参照してください。

データバケットの使い方

ここでは「データバケットの作り方」を踏まえて、IoTデバイスから2種類のデータを収集するデータバケットを実際に作ってみます。

作成するデータバケットの仕様概略図

作成するデータバケットの仕様

収集するデータは、次の2種類のデータとします。

データの種類 データの内容
メッセージ
  • メッセージを送信する日時: UNIX時間形式の日時
  • メッセージを送信するデバイス名:文字列
  • メッセージ:文字列
温度
  • 温度を送信する日時: UNIX時間形式の日時
  • 温度を送信するデバイス名:文字列
  • 温度:数値

これらのデータを保存するストレージの設定は、次のとおりとします。

メッセージデータ保存用:
項目
メッセージタイプ message
データセット sample
テーブル messages
スキーマ
フィールド名 データ型 モード
date TIMESTAMP REQUIRED
name STRING REQUIRED
message STRING NULLABLE
テーブル分割 dateフィールドを使って、日ごとに分割する
温度データ保存用:
項目
メッセージタイプ temperature
データセット sample
テーブル temperatures
スキーマ
フィールド名 データ型 モード
date TIMESTAMP REQUIRED
name STRING REQUIRED
temperature FLOAT NULLABLE
テーブル分割 dateフィールドを使って、日ごとに分割する

データバケットを作る

それでは、これらの情報を元に、以下の内容でデータバケットを作成します。

画面 項目 内容
データバケット作成 タイプ選択 「メッセージ受信タイプ」を選択します。
名前 名前は自由に設定してください。
GCPサービスアカウント設定(セルフサービスプランのみ) GCPサービスアカウント選択 GCPサービスアカウントを選択します。
エントリーポイント設定 オプション設定 デフォルトのままとします。
プロセス設定 オプション設定 デフォルトのままとします。
ストレージ設定 保存先 作成するデータバケットの仕様」記載の「メッセージデータ保存用」と「温度データ保存用」を追加します。

試してみる

ここでは、データバケットへデータを送る方法をデバイスの代わりにPCを使って、データバケットへデータを送ります。PCからデータバケットへデータを送るには、Unix系のcurlコマンドを使うと便利です。

今回、データバケット接続情報とデバイスから送るデータの内容は、次のとおりとします。

データバケットへの接続情報:
項目
エントリーポイントURL https://magellan-iot-*****-dot-magellan-iot-sample.appspot.com
APIトークン *****
1つ目のデータ:
項目 名前
メッセージタイプ "type" "message"
メッセージを送信する日時 "date" 1473642000
(2016/09/12 10:00)
メッセージを送信するデバイス名 "name" "device_001"
メッセージ "message" "hello"
2つ目のデータ:
項目 名前
メッセージタイプ "type" "temperature"
温度を送信する日時 "date" 1473642600
(2016/09/12 10:10)
温度を送信するデバイス名 "name" "device_fukuoka_001"
温度 "temperature" 24.5

curlコマンドを使ったデータ送信は次のとおりです。

1つ目のデータ送信:

curl --data '{"api_token":"*****","logs": [{"type": "message","attributes": {"date": 1473642000,"name": "device_001","message": "hello"}}]}' https://magellan-iot-*****-dot-magellan-iot-sample.appspot.com/

2つ目のデータ送信:

curl --data '{"api_token":"*****","logs": [{"type": "temperature","attributes": {"date": 1473642600,"name": "device_fukuoka_001","temperature": 24.5}}]}' https://magellan-iot-*****-dot-magellan-iot-sample.appspot.com/

なお、次のように、2つのデータをまとめて送ることもできます。

curl --data '{"api_token":"*****","logs": [{"type": "message","attributes": {"date": 1473642000,"name": "device_001","message": "hello"}},{"type": "temperature","attributes": {"date": 1473642600,"name": "device_fukuoka_001","temperature": 24.5}}]}' https://magellan-iot-*****-dot-magellan-iot-sample.appspot.com/

結果は、BigQueryの画面で確認します。

メッセージデータ:

bigquery_storage_data1

温度データ:

bigquery_storage_data2

この情報は役に立ちましたか?