Cloud IoT Core を使用してセンサー情報を Cloud Storage にストリーミングしてみた!

Cloud IoT Core を使用してセンサー情報を Cloud Storage にストリーミングしてみた!

エンジニアブログ

投稿日:2021/11/17

はじめまして。トップゲートの Takuto です。

Google Cloud には Cloud IoT Core という、広範囲に分散した多数の端末の接続、管理、データ取り込みを、セキュリティを維持しながら簡単に行うことのできるIoTプロダクト向けのフルマネージド サービスがあります。
今回の記事では Cloud IoT Core を使用してセンサーデータを Cloud Storage にストリーミングする方法についてご紹介します。

用語解説

まず、Cloud IoT Core の理解を深めるのに必要な次の用語について説明します。

IoT

インターネットに接続されており、ユーザーの関与なしでデータをやり取りできる物理的なデバイスを指します。

テレメトリー

端末からクラウドに送られるすべてのイベントデータ(環境に関する測定データなど)を指します。

MQTT

組み込みデバイスでサポートされる Pub/Sub 型の通信プロトコルを指します。

概要

今回は以下の手順でセンサーから取得した情報をCloud Storageにストリーミングしていこうと思います。

  1. Cloud Storage にテレメトリーデータを保存するためのバケットを作成する。
  2. Cloud IoT Core の端末マネージャにモニタリングするデバイスを登録する。
    (今回は Google が公開しているデバイスシミュレータを使用します)
  3. Cloud Pub/Sub にストリーミング用のトピックを作成する。
  4. Cloud Dataflow にテレメトリーデータを保存するためのジョブを作成する。
  5. IoT デバイスを安全に接続するために暗号化キーペアを作成する。

altタグ代替えテキスト

Google Cloudリソースのセットアップ

Cloud Storage

はじめにセンサーデータを保存するためのバケットをCloud Storageに作成します。

1.コンソール画面の[ナビゲーションメニュー]から[Cloud Storage]を選択する。
2.バケット作成のプロパティに以下の値を設定する。

プロパティ名
バケット名 sensor-log (任意の値を設定)
ロケーションタイプ Region
ロケーション asia-northeast1
ストレージクラス Standard

3.[バケットを作成]を選択する。
4.作成したバケット内で、[フォルダを作成]を選択する。

Cloud Pub/Sub

次にPub/Subのトピックを作成します。

  1. コンソール画面の[ナビゲーションメニュー]から[Pub/Sub]を選択する。
  2. [トピック作成]を選択する。
    (今回は”iot-topic”という名称で作成しています)
  3. [メンバー追加]から”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でデバイスのレジストリを作成します。

  1. コンソール画面の[ナビゲーションメニュー]から[IoT Core]を選択する。
  2. [レジストリを作成]を選択する。
  3. レジストリ作成のプロパティに以下の値を設定する。
プロパティ名
レジストリ 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”)>

仮想デバイス

最後に仮想デバイスのセットアップとセキュアな通信のための認証設定を行います。

  1. 以下の Git リポジトリからデバイスシミュレータを入手します。
    https://github.com/GoogleCloudPlatform/training-data-analyst
  2. 以下のコマンドで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”

  1. IoT Core 画面の左側メニューから[デバイス]を選択する。
  2. [デバイス作成]を選択する。
  3. デバイスのプロパティに以下の値を設定し、[作成]を選択する。
プロパティ名
デバイス 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 に保存されたログデータを確認します。

altタグ代替えテキスト

ファイルの内容は以下のようになっています。

altタグ代替えテキスト

まとめ

本記事では、Cloud IoT Core を使用したセンサーデータの Cloud Storage への保存方法について紹介してきました。
本記事の内容を発展させて、センサーデータを送る先を Cloud StorageからBigQuery に変更することでセンサーデータを分析することも可能になります。

Cloud IoT Core はデバイスを扱うため敷居が高く感じられることもありますが、シミュレータなどを駆使して気軽に試してみると楽しいのではないかと思いました。

執筆者:Takuto

記事を探す

GCP・G Suite のご相談・
お見積り依頼はお気軽に
お問合せフォーム TEL.03-5840-8815

GCP のご利用をご検討の方、
事例紹介資料

無料ダウンロード

GCP、G Suite、TOPGATE の
最新情報満載!

メルマガ登録

最近の記事

人気の記事一覧

サイト内検索

カテゴリー一覧

タグ一覧

GCP のメリットを最大限に活用しよう!

Google Cloud・Google Workspace のご相談・
お見積り依頼はお気軽に
お問合せフォーム