Node-RedからAzure Logic Appsを呼び出す

#概要
Node-RED、本当に便利ですよね。
PoCでサクッとシステム作るときなんか、めちゃめちゃ重宝してます。
クラウド側もなるべくコーディングレスでやりたいので、
Azure Logic Appsを使っています。

今回はエッジ側をNode-RED、クラウド側をAzure Logic Appsで組んだシステムを例に
その手順を紹介します。

#システム構成
実際に過去に行ったPoCを題材にしたいと思います。
部屋にいくつかの温度センサーを置いて、
それをクラウド上のデータベースに保存しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/d852fcac-6716-2b3a-9ca8-10e628e183eb.png)

※データの可視化については、[Power BIでIoTデータの可視化（初級編）](https://qiita.com/yossihard/items/bf47a06236a8afb656e7)を参照してください。


#手順
###データフォーマットを決める
Node-REDからLogic Appsに送信するデータ構造を決めておきます。
今回は以下のJSONフォーマットでデータをやり取りすることにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/abe9f260-7c65-f14a-a101-ecefd77e642d.png)


###Logic Apps
エッジ側のNode-Redからデータを受け取るLogic Appsを作成、設定していきます。

1.　Azure Portalにログインし、ホーム画面で「リソースの作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/e3ebbe95-e50b-4eb8-44c1-2d90097c02d6.png)

2.　検索枠に「Logic App」と入力して検索し、結果から「Logic App」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/0379b6b4-e2a4-3c6c-70f0-2011e4fafa79.png)

3.　作成をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/2257afc7-95c0-5df3-9b81-0ba0aa40a594.png)

4.　必要な情報を入力し、作成をクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/cb873e5b-5a98-442d-4060-3d23f713613a.png)

5.　作成が完了したら、Logic Appsのデザイナーを表示し、「一般的なトリガーで開始する」の中の「HTTP要求の受信時」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/b34318b9-7139-79e2-5a9f-2cafb7fda6b2.png)

6.　以下のような画面が表示されます。「サンプルのペイロードを使用してスキーマを生成する」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/22b40228-9bf2-bca1-2982-0ee2af736842.png)

7.　先に決めたJSONデータを貼り付けます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/e717cf95-f28c-1f11-30cc-21c79cf0c208.png)


8.　JSONスキーマが自動生成されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/e2005bba-2a4f-1eda-4102-8ed5fc228baa.png)

9.　この後、本来は受信したデータを処理するフローを作成するのですが、それはまた別の機会に。ここで一旦フローを保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/15ead25a-0cdd-3601-ae81-3e15fdf42e49.png)

10.　HTTP要求を受け付けるURLが自動生成されるので、コピーボタンをクリックしてコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/485345db-72ae-3cc2-2a50-44a7f8762c9d.png)

11.　実行をクリックします。これでNode-REDからデータを受け取る準備ができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/9348b26f-0169-ecf2-f6ab-78f766285ee1.png)


###Node-RED
Node-REDは、ラズパイ用OSであるRaspbianにプリインストールされているものを使いました。
作成したフローはこんな感じのごく簡単なものです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/cc05f38f-b6f6-6c34-a71e-310a4c5b0c98.png)

①5分に1回起動
②温度センサー（2JCIE-BL01）からBluetoothでデータを読み出し
③送信データを生成
④Logic Appsにデータ送信
⑤結果をデバッグ出力

今回はLogic Appsに絡む部分のみ説明します。
④のLogic Appsへのデータ送信には、「http request」ノードを利用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/32c32382-67c8-3fd6-b36b-4b370643cfe7.png)

設定はこんな感じです。
メソッドはPOSTで、URLは先に控えておいたURLを設定してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/7ffc6cfd-caf2-6939-1be8-0530cde2d97b.png)

###実行結果
Node-RED側をデプロイして、実行結果を確認します。
Azure Logic Appsのブレードから概要を選択し、一番下の実行の履歴をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/dc874478-2fc0-7fce-71e2-a091c32e2c0e.png)

そうすると、下記のように送信されてきたデータが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/99bb06e7-a44a-b928-2043-4293cc6195b5.png)



#まとめ？
ということで、Node-REDからAzure Logic Appsを呼び出す手順を記載しましたが、
Node-RED側は単純にHTTP Requestを実行するだけになっています。
結果、手順のほとんどはAzure Logic Appsの内容になってしまいました（笑）。

なお、Logic Appsの呼び出し時のセキュリティについては、下記を参照ください。
[https://docs.microsoft.com/ja-jp/azure/logic-apps/logic-apps-securing-a-logic-app](https://docs.microsoft.com/ja-jp/azure/logic-apps/logic-apps-securing-a-logic-app)