Azure IoT Hub から Azure Cosmos DB を使用してデバイス接続イベントを順序付ける
Azure Event Grid を使うと、イベント ベースのアプリケーションを構築するのに役立ち、IoT イベントをビジネス ソリューションに簡単に統合できます。 この記事では、Cosmos DB、ロジック アプリ、IoT Hub イベント、シミュレートされた Raspberry Pi を使って、デバイスの接続と切断のイベントを収集して格納するためのセットアップの手順について説明します。
デバイスが起動してからの操作がアクティブになる順序は次のようになります。
IoT ハブ デバイス キーを使う Pi デバイスが開始され、停止されます
IoT Hub イベントがデバイスのアクティビティをキャプチャし、ロジック アプリに HTTP 要求を送信します
ロジック アプリが、設定されている条件に基づいて HTTP 要求を処理します
ロジック アプリが、接続または切断イベントを Cosmos DB の新しいドキュメントにログします
前提条件
アクティブな Azure Cosmos DB for NoSQL アカウント。 まだ作成していない場合は、「データベース アカウントの作成」の手順を参照してください。
データベース内のコレクション。 「コレクションの追加」の手順を参照してください。 コレクションを作成するときに、パーティション キーに
/id
を使用します。Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、開始する前に 無料でアカウントを 1 つ作成してください。
Azure サブスクリプション内の IoT ハブ。 ハブがまだない場合は、「IoT ハブの作成」の手順に従うことができます。
ロジック アプリを作成します
ロジック アプリを作成し、仮想マシンのリソース グループを監視する Event Grid トリガーを追加してみましょう。
ロジック アプリ リソースを作成する
Azure portalで、 [+リソースの作成] 、 [統合] 、 [ロジック アプリ] の順に選択します。
フォームに入力して、以下を含む新しいロジック アプリを作成します。
該当するサブスクリプション
自分のリソース グループ (または、新しく作成します)
サブスクリプションで一意のロジック アプリ名
お使いの IoT ハブのリージョン
ログ分析の有効化は "いいえ"
"従量課金" プランの種類
注意
"従量課金" プランの種類は、UI でロジック アプリ デザイナーを有効にするオプションです。 Standard (既定値) を選んだ場合、ロジック アプリ デザイナーを使えるようにするには、新しいワークフローを作成する必要があります。
[確認と作成] を選んで構成を確認し、[作成] を選んでロジック アプリを作成します。
これで、ロジック アプリの Azure リソースが作成されました。 Azure によってロジック アプリがデプロイされたら、[リソースに移動] を選択します。 すばやく始められるように、ロジック アプリ デザイナーで一般的なパターンのテンプレートが表示されます。
ロジック アプリ デザイナーで、[テンプレート] セクションが表示されるまでスクロールし、[空のロジック アプリ] を選んで、ロジック アプリを最初から構築できるようにします。
トリガーを選択する
トリガーは、ロジック アプリを開始する特定のイベントです。 このチュートリアルでは、ワークフローを開始するトリガーは、HTTP 経由での要求の受信です。
コネクタとトリガーの検索バーに、「HTTP」と入力して Enter キーを押します。
トリガーとして要求 [HTTP 要求の受信時] を選びます。
[サンプルのペイロードを使用してスキーマを生成する] を選びます。
次のサンプル JSON コードをテキスト ボックスに貼り付けて、[完了] を選びます。
この JSON はテンプレートとしてのみ使われるため、正確な値は重要ではありません。
[{ "id": "fbfd8ee1-cf78-74c6-dbcf-e1c58638ccbd", "topic": "/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/RESOURCEGROUPS/EGTESTRG/PROVIDERS/MICROSOFT.DEVICES/IOTHUBS/MYIOTHUB", "subject": "devices/Demo-Device-1", "eventType": "Microsoft.Devices.DeviceConnected", "eventTime": "2018-07-03T23:20:11.6921933+00:00", "data": { "deviceConnectionStateEventInfo": { "sequenceNumber": "000000000000000001D4132452F67CE200000002000000000000000000000001" }, "hubName": "MYIOTHUB", "deviceId": "48e44e11-1437-4907-83b1-4a8d7e89859e", "moduleId": "" }, "dataVersion": "1", "metadataVersion": "1" }]
条件を作成する
条件は、特定の条件を満たした後に特定のアクションを実行するのに役立ちます。 この記事での条件は、eventType がデバイス接続またはデバイス切断のどちらであるかを調べることです。 その eventType が true の場合に実行されるアクションは、Azure Cosmos DB でのドキュメントの作成です。 この条件は、ロジック アプリ デザイナーで作成されます。
[+ 新しいステップ]、[ビルトイン] タブの順に選び、[条件] という名前のコントロールを見つけて選びます。
接続イベントまたは切断イベントを 1 回の解析でキャプチャしたいので、条件で [And] を [Or] に変更します。
[値の選択] ボックスの内部を選ぶと、ポップアップが表示されて、動的コンテンツ (選択可能なフィールド) が示されます。
eventType を選びます。 ポップアップが閉じ、[本文] が [以前の手順から出力を選択] に自動的に配置されます。 [条件] を選んで、条件ステートメントをもう一度開きます。
[が次の値に等しい] という値のままにします。
その行の最後の値として「Microsoft.Devices.DeviceConnected」と入力します。
[+ 追加] を選んで別の行を追加します。
この 2 行目は 1 行目に似ていますが、切断イベントを探す点が異なります。
行の値として、eventType、[が次の値に等しい]、Microsoft.Devices.DeviceDisconnected を使います。
[true の場合] ダイアログで、 [アクションの追加] をクリックします。
Cosmos DB を検索し、[Azure Cosmos DB — Create or update document (V3)] (Azure Cosmos DB — ドキュメントを作成または更新する (V3)) を選びます
[ドキュメントを作成または更新する (V3)] パネルが表示されます。 フィールドに次の値を入力します。
Azure Cosmos DB account name (Azure Cosmos DB アカウント名): <自分のアカウント名を追加します>
データベース ID:ToDoList
コレクション ID:アイテム
ドキュメント: 動的コンテンツ パラメーター リストから [
Current item
] を選びますロジック アプリを保存します。
HTTP の URL をコピーする
Logic Apps デザイナーを終了する前に、ロジック アプリがトリガーをリッスンする URL をコピーします。 この URL を使って、Event Grid を構成します。
[HTTP 要求の受信時] トリガー構成ボックスを選んで展開します。
[HTTP POST の URL] の横にあるコピー ボタンを選んで値をコピーします。
次のセクションで使えるように、この URL を保存します。
IoT Hub イベント用のサブスクリプションを構成する
このセクションでは、発生したらイベントを発行するように IoT Hub を構成します。
Azure Portal で、お使いの IoT ハブに移動します。
イベントを選択します。
[+ イベント サブスクリプション] を選びます。
[イベント サブスクリプションの詳細] を指定します。わかりやすい [名前] を指定し、[イベント スキーマ] として [イベント グリッド スキーマ] を選びます。
IoT ハブ リソースのシステム トピック名を作成します。
[イベントの種類] フィールドに入力します。 ドロップダウン リストで、 [Device Connected](デバイスの接続) および [Device Disconnected](デバイスの切断) のみをメニューから選択します。 画面の他の場所をクリックしてリストを閉じ、選択内容を保存します。
[エンドポイントの詳細] で、 [エンドポイントのタイプ] として [web hook] を選択し、[エンドポイントの選択] をクリックして、ロジック アプリからコピーした URL を貼り付けて選択を確認します。
これで、フォームは次の例のようになります。
[作成] を選び、イベント サブスクリプションを保存します。
デバイスを実行してイベントを観察する
イベント サブスクリプションを設定した後は、デバイスを接続してテストします。
IoT Hub にデバイスを登録する
IoT ハブで、[デバイス] を選択します。
ペインの上部にある [+ デバイスの追加] を選びます。
[デバイス ID] に「
Demo-Device-1
」と入力します。[保存] を選択します。
デバイスを再度クリックすると、接続文字列とキーが入力されます。 後で使用できるように [プライマリ接続文字列] をコピーして保存します。
Raspberry Pi シミュレーターを起動する
Raspberry Pi Web シミュレーターを使用してデバイス接続をシミュレートしましょう。
Raspberry Pi Web シミュレーターでサンプル アプリケーションを実行する
このサンプル アプリでは、デバイス接続イベントがトリガーされます。
コーディング領域で、行 15 のプレースホルダーを、前のセクションの最後に保存した Azure IoT Hub デバイスの接続文字列に置き換えます。
[Run](実行) を選択してアプリケーションを実行します。
IoT Hub に送信されるセンサー データとメッセージを示す次のような出力が表示されます。
ロジック アプリの [概要] ページを調べて、ロジックがトリガーされているかどうかを確認できます。 [成功] または [失敗] と表示されます。 トラブルシューティングが必要な場合、ここを調べるとロジック アプリの状態がわかります。 トリガーが実行してから、15 秒から 30 秒の遅延が予想されます。 ロジック アプリのトラブルシューティングが必要な場合は、こちらのエラーのトラブルシューティングに関する記事をご覧ください。
[停止] を選んでシミュレーターを停止すると、デバイス切断イベントがトリガーされます。 このイベントは、接続イベントがログされたのと同様に、ロジック アプリの [概要] ページにログされます。
これで、サンプル アプリケーションを実行し、IoT ハブに送信されるデバイスの接続と切断イベントを収集しました。
Azure Cosmos DB でイベントを確認する
実行されたロジック アプリの結果は、Cosmos DB ドキュメントで確認できます。 ページを更新すると、[項目] コレクションにドキュメントが表示されます。 接続状態イベントごとに、一意の id
を割り当てられた新しいドキュメントが生成されます。 次の図は、デバイスが起動 (接続) されたときに作成されるドキュメントを示したものです。 接続イベントの種類が、JSON 出力の一覧に表示されています。
Azure CLI の使用
Azure portal を使う代わりに、Azure CLI を使って IoT Hub の手順を行うことができます。 詳細については、イベント サブスクリプションの作成とIoT デバイスの作成に関する Azure CLI のページを参照してください。
リソースをクリーンアップする
このチュートリアルでは、Azure サブスクリプションで料金が発生するリソースを使いました。 チュートリアルを試してテストを完了したら、残しておきたくないリソースを無効にするか削除します。
ロジック アプリ
アプリ ロジックでの作業を失いたくない場合は、削除ではなく無効にします。
ロジック アプリに移動します。
[概要] ブレードで、 [削除] または [無効] を選びます。
各サブスクリプションで使うことができる無料 IoT Hub は 1 つです。 このチュートリアル用に無料のハブを作成した場合は、課金されないように削除する必要はありません。
IoT ハブまたは Event Grid
IoT Hub に移動します。
[概要] ブレードで [削除] を選びます。
IoT Hub を残しておく場合でも、作成したイベント サブスクリプションを削除できます。 IoT Hub で [イベント グリッド] を選びます。
削除するイベント サブスクリプションを選んで、[削除] を選びます。
Cosmos DB
Azure portal から Azure Cosmos DB アカウントを削除するには、リソースに移動し、上部のメニュー バーから [アカウントの削除] を選びます。 Azure Cosmos DB アカウントを削除するための詳細な手順を参照してください。
次のステップ
Event Grid で他にできることについて確認します
IoT Hub へのデバイス接続の監視、診断、およびトラブルシューティングを目的として Event Grid と Azure Monitor を使用する方法を確認します