はじめに

Google Cloud IoT CoreはAWSでいうAWS IoT、MSでいうAzure IoT Hub的な位置づけのもの。デバイスとクラウドを繋いでPub/Subできるサービスである。IoT CoreからCloud PubSubCloud Functionsと繋げてサーバレスアプリを作っていけるみたい。

現在、クローズドベータ版ということで無料で使える。申請してしばらくしたら招待がとどく。招待来てたのでつかってみた。

つかってみる

QuickstartにそってMQTTでPubSubしてみる。

Cloud Platform Consoleで新規プロジェクトを作成する。

プロジェクトが作成されたら、画面左上のハンバーガーメニューからIoT Coreを選択してIoT Coreのコンソールに移動する。

スクリーンショット 2018-03-20 16.09.15.png

IoT Core のAPIを有効化する。

スクリーンショット 2018-03-20 11.02.22.png

Create a device registry をクリックする

スクリーンショット 2018-03-20 16.05.18.png

任意のレジストリIDを入力。今回はbtf-iot-core-testとした。
Regionを指定。今回は us-central1 とした。
プロトコルは、 MQTT, HTTP をチェック。
Cloud Pub/Subトピックは、新規作成してbtf-test-topicとした。
デバイス状態のトピックは省略。

入力したら 作成 をクリック。

スクリーンショット 2018-03-20 16.07.28.png

端末を追加 をクリック。

スクリーンショット 2018-03-20 16.14.11.png

ターミナルを開いて、以下のコマンドで公開鍵を作成する。

openssl req -x509 -newkey rsa:2048 -keyout rsa_private.pem -nodes  -out rsa_cert.pem -subj "/CN=unused"

端末を追加 の画面で以下を入力する。

端末ID: 任意のID。今回は btf-iot-device-testとした。
端末の通信: 許可
認証: 手動で入力
公開鍵の形式: RS256_X509
公開鍵の値: 先ほど生成した rsa_cert.pem の中身
公開鍵の有効期限: 省略
端末メタデータ: 省略

入力したら 追加 をクリックする

スクリーンショット 2018-03-20 16.26.12.png

端末に以下のサンプルコードのリポジトリをcloneして、./nodejs-docs-samples/iot/mqtt_example に移動する

git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples
cd ./nodejs-docs-samples/iot/mqtt_example/

先ほど生成した秘密鍵を同ディレクトリにコピーする

cp ../../../rsa_private.pem ./

依存モジュールをインストールする

npm install

トピックをサブスクライブする。[PROJECT_ID]はプロジェクトのID、btf-test-subscriptionの部分は任意のサブスクリプション名を指定、btf-test-topicの部分はレジストリ作成の時に作成したトピック名。ここでは btf-test-topic となる。

gcloud pubsub subscriptions create \
    projects/[PROJECT_ID]/subscriptions/btf-test-subscription \
    --topic=projects/[PROJECT_ID]/topics/btf-test-topic

サンプルコードを実行する。[PROJECT_ID]はプロジェクトのID、btf-iot-core-testはレジストリ作成のときに指定した任意のレジストリID、btf-iot-device-testは端末作成の時に指定した任意のデバイスID。

node cloudiot_mqtt_example_nodejs.js \
    --projectId=[PROJECT_ID] \
    --registryId=btf-iot-core-test \
    --deviceId=btf-iot-device-test \
    --privateKeyFile=rsa_private.pem \
    --numMessages=25 \
    --algorithm=RS256

実行すると、MQTTでデータがパブリッシュされていく。

スクリーンショット 2018-03-20 16.46.04.png

ターミナルで別タブを開いて、サブスクライブされているメッセージを確認する。[PROJECT_ID]はプロジェクトのID。btf-test-subscriptionはサブスクリプション作成のときに指定したサブスクリプション名

gcloud pubsub subscriptions pull --auto-ack \
    projects/[PROJECT_ID]/subscriptions/btf-test-subscription

以下のように、パブリッシュされたメッセージが確認できた

$ gcloud pubsub subscriptions pull --auto-ack     projects/[PROJECT_ID]/subscriptions/btf-test-subscription
┌──────────────────────────────────────────────────┬────────────────┬────────────────────────────────────┐
│                       DATA                       │   MESSAGE_ID   │             ATTRIBUTES             │
├──────────────────────────────────────────────────┼────────────────┼────────────────────────────────────┤
│ btf-iot-core-test/btf-iot-device-test-payload-14 │ 58564552499088 │ deviceId=btf-iot-device-test       │
│                                                  │                │ deviceNumId=2750966584450049       │
│                                                  │                │ deviceRegistryId=btf-iot-core-test │
│                                                  │                │ deviceRegistryLocation=us-central1 │
│                                                  │                │ projectId=[PROJECT_ID]      │
│                                                  │                │ subFolder=                         │
└──────────────────────────────────────────────────┴────────────────┴────────────────────────────────────┘

IoT Core関係を削除する

いままで設定したサブスクリプション、レジストリ、端末をひとつひとつ消していく必要があってけっこうめんどい。

Cloud PubSubのコンソールに移動してトピック名を選択してオプションメニューから削除を選択する

スクリーンショット 2018-03-20 16.56.31.png

IoT Core 端末レジストリに移動してレジストリIDをクリック

スクリーンショット 2018-03-20 16.59.34.png

画面下部の端末IDをクリック

スクリーンショット 2018-03-20 17.00.25.png

端末の詳細 で削除をクリック。

スクリーンショット 2018-03-20 17.01.24.png

端末名を入力して 削除 をクリック。端末が複数登録されている場合は全ての端末を削除する必要がある。

スクリーンショット 2018-03-20 17.02.51.png

レジストリに登録されている端末が全て削除されると、レジストリの削除ボタンが有効になる。削除をクリックする

スクリーンショット 2018-03-20 17.03.57.png

レジストリ名を入力して 削除 をクリックする

スクリーンショット 2018-03-20 17.05.10.png

まとめ

ざっくりとした所感では、AWS IoTやAzure IoT Hubと特に変わらない感じ。ただIoT Coreはより純粋にBrokerの役割でCloud PubSubでサブスクライブするってことを意識しておく必要があるかな。じゃないと管理画面で迷うこともあるかも。って思いました。

あと、Firebaseで作成したプロジェクトからIoT CoreのAPIの有効化をしようとすると成功しなかった。GCPコンソールではFirebaseのプロジェクトとその他のプロジェクトが混在するのでこのへんなんとかしてほしい。IoT Coreに限った話じゃないけど。

あとでPubSubをトリガにしたCloud Functionsなんかもやってみたいと思います。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.