Cloud IoT Core を使用してセンサー情報を Cloud Storage にストリーミングしてみた!
- IoT
はじめまして。トップゲートの Takuto です。
Google Cloud には Cloud IoT Core という、広範囲に分散した多数の端末の接続、管理、データ取り込みを、セキュリティを維持しながら簡単に行うことのできるIoTプロダクト向けのフルマネージド サービスがあります。
今回の記事では Cloud IoT Core を使用してセンサーデータを Cloud Storage にストリーミングする方法についてご紹介します。
目次
用語解説
まず、Cloud IoT Core の理解を深めるのに必要な次の用語について説明します。
IoT
インターネットに接続されており、ユーザーの関与なしでデータをやり取りできる物理的なデバイスを指します。
テレメトリー
端末からクラウドに送られるすべてのイベントデータ(環境に関する測定データなど)を指します。
MQTT
組み込みデバイスでサポートされる Pub/Sub 型の通信プロトコルを指します。
概要
今回は以下の手順でセンサーから取得した情報をCloud Storageにストリーミングしていこうと思います。
- Cloud Storage にテレメトリーデータを保存するためのバケットを作成する。
- Cloud IoT Core の端末マネージャにモニタリングするデバイスを登録する。
(今回は Google が公開しているデバイスシミュレータを使用します) - Cloud Pub/Sub にストリーミング用のトピックを作成する。
- Cloud Dataflow にテレメトリーデータを保存するためのジョブを作成する。
- IoT デバイスを安全に接続するために暗号化キーペアを作成する。
Google Cloudリソースのセットアップ
Cloud Storage
はじめにセンサーデータを保存するためのバケットをCloud Storageに作成します。
1.コンソール画面の[ナビゲーションメニュー]から[Cloud Storage]を選択する。
2.バケット作成のプロパティに以下の値を設定する。
プロパティ名 | 値 |
---|---|
バケット名 | sensor-log (任意の値を設定) |
ロケーションタイプ | Region |
ロケーション | asia-northeast1 |
ストレージクラス | Standard |
3.[バケットを作成]を選択する。
4.作成したバケット内で、[フォルダを作成]を選択する。
Cloud Pub/Sub
次にPub/Subのトピックを作成します。
- コンソール画面の[ナビゲーションメニュー]から[Pub/Sub]を選択する。
- [トピック作成]を選択する。
(今回は”iot-topic”という名称で作成しています) - [メンバー追加]から”cloud-iot@system.gserviceaccount.com”という名前のサービスアカウントを作成して、”Pub/Sub Publisher”の役割を付与する
Cloud Dataflow
次にセンサーデータをバケットに保存するためのDataflowのジョブを作成します。
1.コンソール画面の[ナビゲーションメニュー]から[Dataflow]を選択する。
2.[テンプレートからジョブを作成]を選択する。
3.テンプレートのプロパティに以下の値を設定する。
プロパティ名 | 値 |
---|---|
ジョブ名 | sensor-telemetry (任意の値を設定) |
リージョン | asia-northeast1 |
Dataflowのテンプレート | PubSub to Text Files on Cloud Storage |
4.テンプレートの必須パラメータに以下の値を設定する。
プロパティ名 | 値 |
---|---|
Input Pub/Sub topic | projects/<project-id>/topics/<topic-name(今回は”iot-topic”)> |
Output file directory in Cloud Storage | gs://<bucket-name(今回は“sensor-log”)>/Log |
Output filename prefix | output- |
一時的なロケーション | gs://<bucket-name>/tmp |
5.設定内容を確認して[ジョブの実行]を選択する。
Cloud IoT Core
次にCloud IoT Coreでデバイスのレジストリを作成します。
- コンソール画面の[ナビゲーションメニュー]から[IoT Core]を選択する。
- [レジストリを作成]を選択する。
- レジストリ作成のプロパティに以下の値を設定する。
プロパティ名 | 値 |
---|---|
レジストリ ID | iot-topic-registry |
リージョン | asia-east1 ※ IoT Coreはus-central1、europe-west1とasia-east1のみであるためasia-east1を選択しています。 |
Cloud Pub/Sub トピック | projects/<project-id>/topics/<topic-name(今回は”iot-topic”)> |
仮想デバイス
最後に仮想デバイスのセットアップとセキュアな通信のための認証設定を行います。
- 以下の Git リポジトリからデバイスシミュレータを入手します。
https://github.com/GoogleCloudPlatform/training-data-analyst - 以下のコマンドでRSA暗号化キーペアを作成する(“rsa_private.pem”,”rsa_cert.pem”)
$ cd training-data-analyst/quests/iotlab/
$ openssl req -x509 -newkey rsa:2048 -keyout rsa_private.pem \
-nodes -out rsa_cert.pem -subj "/CN=unused"
- IoT Core 画面の左側メニューから[デバイス]を選択する。
- [デバイス作成]を選択する。
- デバイスのプロパティに以下の値を設定し、[作成]を選択する。
プロパティ名 | 値 |
---|---|
デバイス ID | temp-sensor-buenos-aires (任意の値を設定) |
認証 | 手動で入力 |
公開鍵形式 | RS256_X509 |
公開鍵の値 | rsa_cert.pem の内容をコピーする |
動作確認
Google Cloud 上の構築が完了したので、実際にシミュレータを動かして行きます。
1.以下のコマンドを入力してCAルート証明書を取得する。
$ cd training-data-analyst/quests/iotlab/
$ wget https://pki.google.com/roots.pem
2.以下のコマンドでシミュレータに必要な python のライブラリを追加する。
$ pip install pyjwt
$ pip install paho-mqtt
$ pip install cryptography
3.以下のコマンドを実行して、1番目のデバイス(temp-sensor-buenos-aires)を実行する。
$ python3 cloudiot_mqtt_example_json.py \
--project_id=<project-id> \
--cloud_region=<IoT Coreのregions> \
--registry_id=iot-topic-registry \
--device_id=temp-sensor-buenos-aires \
--private_key_file=rsa_private.pem \
--message_type=event \
--algorithm=RS256 --num_messages=200 > buenos-aires-log.txt 2>&1 &
4.以下のコマンドを実行して、2番目のデバイス(temp-sensor-istanbul)を実行する。
*temp-sensor-istanbulは登録されていないデバイスのためログが作成されません。
$ python3 cloudiot_mqtt_example_json.py \
--project_id=<project-id> \
--cloud_region=<IoT Coreのregions> \
--registry_id=iot-topic-registry \
--device_id=temp-sensor-istanbul \
--private_key_file=rsa_private.pem \
--message_type=event \
--algorithm=RS256 --num_messages=200 > buenos-istanbul-log.txt 2>&1 &
5.Cloud Storage に保存されたログデータを確認します。
ファイルの内容は以下のようになっています。
まとめ
本記事では、Cloud IoT Core を使用したセンサーデータの Cloud Storage への保存方法について紹介してきました。
本記事の内容を発展させて、センサーデータを送る先を Cloud StorageからBigQuery に変更することでセンサーデータを分析することも可能になります。
Cloud IoT Core はデバイスを扱うため敷居が高く感じられることもありますが、シミュレータなどを駆使して気軽に試してみると楽しいのではないかと思いました。
執筆者:Takuto
弊社トップゲートでは、Google Cloud (GCP) 利用料3%OFFや支払代行手数料無料、請求書払い可能などGoogle Cloud (GCP)をお得に便利に利用できます。さらに専門的な知見を活かし、
- Google Cloud (GCP)支払い代行
- システム構築からアプリケーション開発
- Google Cloud (GCP)運用サポート
- Google Cloud (GCP)に関する技術サポート、コンサルティング
など幅広くあなたのビジネスを加速させるためにサポートをワンストップで対応することが可能です。
Google Workspace(旧G Suite)に関しても、実績に裏付けられた技術力やさまざまな導入支援実績があります。あなたの状況に最適な利用方法の提案から運用のサポートまでのあなたに寄り添ったサポートを実現します!
Google Cloud (GCP)、またはGoogle Workspace(旧G Suite)の導入をご検討をされている方はお気軽にお問い合わせください。
メール登録者数3万件!TOPGATE MAGAZINE大好評配信中!
Google Cloud(GCP)、Google Workspace(旧G Suite) 、TOPGATEの最新情報が満載!