SORACOM Beam をトリガーとして Azure Logic Apps を動かす方法

# はじめに
先日、[SORACOM Beam](https://soracom.jp/services/beam/) をトリガーにして [Microsoft Flow](https://japan.flow.microsoft.com/ja-jp/) を動かしてみた[記事](https://qiita.com/ko2a/items/cfee52310562f51247c2)を書いたのですが、今回は [Azure Logic Apps](https://azure.microsoft.com/ja-jp/services/logic-apps/) を使ってみようと思います。

# Azure Logic Apps って何？

Microsoft が提供する、アプリや Web サービスを結合した連携システムを作ることができる PaaS (Platform as a Service) です。

同社が提供する、 Microsoft Flow とほぼ同じサービスですが、できることが若干違います。
詳細は公式ドキュメントサイトをご覧ください。

Flow、Logic Apps、Functions、WebJobs の比較
https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-compare-logic-apps-ms-flow-webjobs

ここで興味深いのは

>Flow は Logic Apps の上に構築されています。 どちらも同じワークフロー デザイナーおよび同じコネクタを共有します。

とあり、Microsoft Flow の実体は Azure Logic Apps であることが記載されています。

# 手順

Azure Portal から「ロジック アプリ」を選択します。

左側ツリー
![LogicApps001.png](https://qiita-image-store.s3.amazonaws.com/0/49240/c9a489c9-a288-ee70-06f4-a6ee360a6eea.png)

一覧メニュー
![LogicApps002.png](https://qiita-image-store.s3.amazonaws.com/0/49240/33b0de58-fb5f-9984-6356-43612814091d.png)

「ロジック アプリ」画面上の「＋追加」を選択します。

![LogicApps003.png](https://qiita-image-store.s3.amazonaws.com/0/49240/f640658e-c6af-65ce-94d0-ea988f26f258.png)

「ロジック アプリの作成」で「名前」「サブスクリプション」「リソース グループ」「場所」を適宜選択して「作成」を選択します。

![LogicApps004.png](https://qiita-image-store.s3.amazonaws.com/0/49240/949dc4f4-3568-1efc-345a-4aae19ea8fb4.png)

ロジック アプリの作成が完了すると、Logic Apps デザイナーが表示されます。

![LogicApps005.png](https://qiita-image-store.s3.amazonaws.com/0/49240/5295d9b9-526c-2678-6309-0d2b88bdb4f1.png)

今回は前回の Microsoft Flow と同様に、 SORACOM Beam から ツイートをするアプリを作ってみます。
「一般的なトリガーで開始する」の中から「HTTP 要求の受信時」を選択します。

![LogicApps006.png](https://qiita-image-store.s3.amazonaws.com/0/49240/d49325d4-d645-bd99-9598-ce2c042163ed.png)

おや、どこかで見たことがある画面が。
Microsoft Flow とこの辺りまったく同じですね。

![LogicApps007.png](https://qiita-image-store.s3.amazonaws.com/0/49240/41189a16-68ba-01b4-8896-902d89cebe0e.png)

同じなので、前回の手順と同じようにフローを記述することが可能です。

![LogicApps008.png](https://qiita-image-store.s3.amazonaws.com/0/49240/be7428b8-6ad5-b414-2719-1242111a02f2.png)

フローを保存すると「HTTP POST の URL」が前回同様に取得できるので、この URL を元に SORACOM Beam の設定を行いましょう。

![beamtoazure.png](https://qiita-image-store.s3.amazonaws.com/0/49240/ed978e0c-0819-f730-5939-4be3e0ce2ff0.png)

なお、Microsoft Flow と異なる点として、デザイナーのメニューに「コード ビュー」のボタンがあります。
このボタンを押すと、今話題？の JSON 形式のデータとしてフロー情報を取得することができます。

![LogicApps010.png](https://qiita-image-store.s3.amazonaws.com/0/49240/ddf05686-c0aa-04b1-829f-c929fdf8737b.png)

```json:BeamToTwitter
{
    "$connections": {
        "value": {
            "twitter": {
                "connectionId": "/subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/resourceGroups/SORACOM/providers/Microsoft.Web/connections/twitter",
                "connectionName": "twitter",
                "id": "/subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/providers/Microsoft.Web/locations/japaneast/managedApis/twitter"
            }
        }
    },
    "definition": {
        "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
        "actions": {
            "ツイートの投稿": {
                "inputs": {
                    "host": {
                        "connection": {
                            "name": "@parameters('$connections')['twitter']['connectionId']"
                        }
                    },
                    "method": "post",
                    "path": "/posttweet",
                    "queries": {
                        "tweetText": "電話番号は @{triggerBody()?['value1']} 、温度は @{triggerBody()?['value2']} 度、湿度は @{triggerBody()?['value3']} ％です。"
                    }
                },
                "runAfter": {},
                "type": "ApiConnection"
            }
        },
        "contentVersion": "1.0.0.0",
        "outputs": {},
        "parameters": {
            "$connections": {
                "defaultValue": {},
                "type": "Object"
            }
        },
        "triggers": {
            "manual": {
                "inputs": {
                    "schema": {
                        "properties": {
                            "value1": {
                                "type": "string"
                            },
                            "value2": {
                                "type": "string"
                            },
                            "value3": {
                                "type": "string"
                            }
                        },
                        "type": "object"
                    }
                },
                "kind": "Http",
                "type": "Request"
            }
        }
    }
}
```

# おわりに

ちょうど今、田畑の環境データの収集システムを開発していて、せっかくなら Microsoft Flow でデータ連携しちゃえばいいか？と思っていたのですが、Microsoft Flow って実行数がプランによって上限値が設けられているので、1分間隔でデータを送ろうとするとすぐ上限になってしまうため、ちょっと利用は難しいかな？と思っていました。
https://japan.flow.microsoft.com/ja-jp/pricing/

Azure Logic Apps を使う場合だと、月当たりの実行数上限がなく、従量課金での請求となるため、費用さえどうにかなれば Microsoft Flow よりも柔軟に使えるかと思います。

※まーそもそも台数多くなったら IoT Hub 使う方がデバイス管理など含め楽なんですけども・・・