IoT Platformのルールエンジンについて
本記事では、Alibaba Cloudが提供するIoT Platformの機能の1つであるルールエンジンについてご紹介します。
ルールエンジンとは?
ルールエンジンとはIoT Platformに送られてきたデータを他のサービスに連携するための仕組みです。
例えば、センサーからIoT Platformに対してデータを送っている場合、そのデータをデータベースに保存したい、などはよくある例かと思います。
このような場合、ルールエンジンを使用することで、簡単にデータベースにデータを挿入することができます。
ルールエンジンの種類
ルールエンジンには以下の2種類があります。
- サービスサブスクリプション
- データ転送
サービスサブスクリプションは簡単な手順でデータの転送を実現できます。
データ転送はより複雑な設定をする際に有効です。
順に仕様を実際に試していきたいと思います。
前準備
【ECSの設定】
AlibabaCloudのECSをデバイスと仮定します。
CentOS7.7環境を準備し、以下のコマンドを実行しておきます。
unzipとNode.jsのインストールを行なっています。
# yum install -y unzip# yum install -y nodejs
【IoT Platformの設定】
1. IoT Platformのコンソールを開く。
2. 左側ペインより「クイックスタート」を開く。
3. デバイスへの接続で「開始」を押す。
4. 再度問われるので「開始」を押す。
5. デバイスの登録で「プロダクト名」と「デバイス名」を入力して「次へ」を押す。
プロダクト:blog-product デバイス:blog-device1
6. 開発キットの選択で「Linux」「MQTT」「Node.js」を選択し、「次へ」を押す。
7. SDKのダウンロードにて「ダウンロード SDK kit」を押し、SDKをダウンロードする。
8. ダウロード後、「次へ」を押します。
9. ダウンロードしたkitをECS上に起き、以下のように解凍しておきます。
# unzip aliyun_iot_device_quickstart.zip# cd aliyun_iot_device_quickstart
10. kitのstart.shを実行します。
# sh start.sh
11. IoT Platformのコンソールに戻り、IoT Platfromでデータを受信していることを確認します。
以上、前準備は完了です。
サービスサブスクリプション
サービスサブスクリプションを使用することで簡単にデータを転送することができます。
サービスサブスクリプションはAMQPとAlibaba CloudのMNSをサポートしています。
MNSはAlibaba Cloudが提供するキューイングサービスです。(詳しくはこちら)
サービスサブスクリプションの利用方法
ここでは、以下のようなデバイスがPublishしてきたデータをMNSのキューに転送するような設定をしていきたいと思います。
IoT Platform > ルールエンジン > サービスサブスクリプション
より「サブスクリプションの作成」を選択します。
以下のようなポップアップが表示されますので設定していきます。
- ・プロダクト:「blog-product」を選択してください。(前準備で作成したプロダクト)
- ・サブスクリプションタイプ:今回はMNSを選択します。
- ・メッセージタイプ:デバイスアップストリーム通知
最後にOKを押します。
以下のような確認画面が表示されるので「OK」を押します。
これはMNSにキューを作成するよ!というメッセージです。
設定がうまくいくとMNSコンソールにキューができます。
今回の設定では「デバイスアップストリーム通知」を選択しているので、
IoT PlatformにデータをPubishすることでキューにデータが送られることになります。
MNSコンソールの画面で受信を押すことでメッセージを確認できます。
メッセージの受信を押すと以下のようにメッセージが表示されます。
データ転送
データ転送では以下の4つのプロダクトへの転送をサポートしています。(2020年2月現在)
データ転送でサポートされていないデータベースにデータを保存したい場合はFunctionComuputeを経由することで実現できます。
- RDS
- TableStore
- MNS
- FunctionCompute
データ転送の利用方法
ここでは、データ転送のMNSを利用して、MNSにデータを転送していきたいと思います。
サブスクリプションでもMNSを使用しましたが、サブスクリプションはMNSのキューに直接データを送ることができます。
データ転送のMNSを使用する際はMNSトピックにデータをPublishします。
つまりトピックのサブスクライバーに複数の送信先を指定しておけば、1つのメッセージを複数のサブスクライバーに送ることができます。
トピックとキューに関してはこちらを参考にしてください。
今回の構成を図にすると以下のようになります。
まず、
トピックのサブスクライブ先としてキューを準備しておきます。
MNSのコンソールより、キュー > キューの作成を押します。
- キュー名:blog-test-que
最後に「OK」を押します。
次にMNS側のトピックとキューを作成します。
MNSのコンソールより、トピック > トピックの作成 を押します。
- Topic名:blog-test-topic
- 最大メッセージバイト数:1024
「OK」を押します。
トピックのサブスクライバーとしてキューを設定します。
トピック > サブスクリプションリスト を押します。
トピックリストの下にサブスクリプションリストが表示されます。
サブスクライブボタンを押し、以下のように設定します。
- プッシュタイプ:キュー
- サブスクリプション名:test-sub
- エンドポイント:blog-test-que
最後に「OK」を押します。
これでMNSの設定は完了です。
続いてIoT Platformの設定です。
IoT Platformのコンソールより ルールエンジン > データ転送より「ルールの作成」を選択します。
- ルール名:testRule
- データ型:JSON
「OK」を押します。
作成されたルールの「表示」を選択します。
右上のSQLを作成から転送するトピックや値を設定できます。
今回は以下のように既存のトピックにPulishされるデータを全て転送したいと思います。
- フィールド:*
- Topic:TSLデータの報告
- プロダクト:blog-product
- デバイス:blog-device1
- トピック:thing/event/property/post
続いて、データ転送を設定していきます。「操作の追加」を押します。
ポップアップが開かれたら以下を入力していきます。
- 対処方法の選択:「Message Serviceに送信」
- リージョン:東京
- Topic:blog-test-topic
- Role:AliyunIOTAccessingMNSRole
最後に「OK」を押します。
※ここの「Message Service」はMNSのことです。
作成したルールを有効化します。
左側ペインのデータ転送を押します。有効化したいルールの「開始」を押します。
確認画面が出るので、「確認」を押します。
ここ中国なので少しわかりにくいですが、青いボタンの方です。
これで設定完了です。
MNSコンソールの「メッセージの受信」を押すとblog-test-queでデータを受けているのがわかるかなと思います。
データ転送の場合、文字化けしてしまっているので、Base64のデコードのチェックを外すことでメッセージを確認できます。
最後に
以上、ルールエンジンについてをご紹介しました。ルールエンジンがあれば、Alibaba Cloud各プロダクトサービスに色々連携できます。