チュートリアル:Event Grid および Logic Apps を使用して Azure IoT Hub イベントに関する電子メール通知を送信する
Azure Event Grid を使うと、ダウンストリームのビジネス アプリケーションのアクションをトリガーすることによって、IoT Hub のイベントに対応することができます。
この記事では、IoT Hub と Event Grid を使うサンプルを構成する手順について説明します。 最終的に、デバイスが IoT Hub に接続されるか接続が解除されるたびに通知メールを送信するように Azure Logic Apps が設定されます。 Event Grid を使用すると、重要なデバイスの接続解除について、適切なタイミングで通知を受け取ることができます。 メトリックと診断は、ログとアラートに表示されるまでに時間がかかる (20 分以上など) 場合があります。 クリティカルなインフラストラクチャでは、長い処理時間が許されない場合があります。
Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。
前提条件
- Azure Logic Apps がサポートするメール プロバイダー (Office 365 Outlook、Outlook.com など) のメール アカウント。 このメール アカウントは、イベント通知の送信に使われます。
Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の Bash のクイックスタート」を参照してください。
CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。
ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。
初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。
az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。
IoT ハブを作成する
新しい IoT ハブは、ポータルから Azure Cloud Shell ターミナルを使用してすぐに作成できます。
Azure portal にサインインします。
ページの右上にある [Cloud Shell] ボタンを選択します。
次のコマンドを実行して、新しいリソース グループを作成します。
az group create --name {your resource group name} --location westus
次のコマンドを実行して、IoT ハブを作成します。
az iot hub create --name {your iot hub name} --resource-group {your resource group name} --sku S1
Cloud Shell ターミナルを最小化します。 このチュートリアルで後ほどまたシェルを使います。
ロジック アプリを作成します
次に、ロジック アプリを作成し、IoT ハブからの要求を処理する HTTP Event Grid トリガーを追加します。
ロジック アプリ リソースを作成する
Azure portal で、 [リソースの作成] を選択し、検索ボックスに「logic app」と入力して、Enter キーを押します。 結果から [Logic App] を選択します。
次の画面で [作成] を選択します。
ロジック アプリにサブスクリプション内で一意の名前を指定し、IoT ハブと同じサブスクリプション、リソース グループ、場所を選びます。 従量課金プランの種類を選びます。
[Review + create](レビュー + 作成) を選択します。
設定を確認し、 [作成] を選択します。
リソースが作成されたら、 [リソースに移動] を選択します。
Logic Apps デザイナーで、ページを下へスクロールして [テンプレート] を表示します。 ロジック アプリを最初から作成できるように、 [空のロジック アプリ] を選択します。
トリガーを選択する
トリガーは、ロジック アプリを開始する特定のイベントです。 このチュートリアルでは、ワークフローを開始するトリガーは、HTTP 経由での要求の受信です。
コネクタとトリガーの検索バーに、「HTTP」と入力します。
結果をスクロールし、トリガーとして [要求 - HTTP 要求の受信時] を選びます。
サンプル ペイロードを使用してスキーマを生成する を選択します。
下の
json
をコピーし、プレースホルダーの値<>
を独自の値に置き換えます。"デバイス接続イベントのスキーマ" の JSON をテキスト ボックスに貼り付け、 [完了] を選択します。
[{ "id": "f6bbf8f4-d365-520d-a878-17bf7238abd8", "topic": "/SUBSCRIPTIONS/<azure subscription ID>/RESOURCEGROUPS/<resource group name>/PROVIDERS/MICROSOFT.DEVICES/IOTHUBS/<hub name>", "subject": "devices/LogicAppTestDevice", "eventType": "Microsoft.Devices.DeviceConnected", "eventTime": "2018-06-02T19:17:44.4383997Z", "data": { "deviceConnectionStateEventInfo": { "sequenceNumber": "000000000000000001D4132452F67CE200000002000000000000000000000001" }, "hubName": "<hub name>", "deviceId": "LogicAppTestDevice", "moduleId" : "DeviceModuleID" }, "dataVersion": "1", "metadataVersion": "1" }]
重要
JSON スニペットは、[要求本文の JSON スキーマ] ボックスに直接ではなく、[サンプルのペイロードを使用してスキーマを生成する] リンクで提供されるボックスに貼り付けてください。 サンプル ペイロードのリンクを使うと、JSON スニペットに基づいて JSON コンテンツを生成できます。 最終的に要求本文になる JSON は、JSON スニペットとは異なります。
このイベントは、デバイスが IoT Hub に接続されると発行されます。
Note
"application/json に設定されている Content-Type ヘッダーを要求に忘れずに含めてください" というポップアップ通知を受け取る場合があります。この指摘は無視しても安全なので、次のセクションに進みます。
アクションを作成する
アクションは、トリガーがロジック アプリのワークフローを開始した後に発生する手順です。 このチュートリアルのアクションは、メール プロバイダーからのメール通知の送信です。
[新しいステップ] を選択します。 ウィンドウが表示され、アクションの選択を求められます。
[Outlook] を探します。
電子メール プロバイダーに基づいて、一致するコネクタを検索して選択します。 このチュートリアルでは、Outlook.com を使用します。 他のメール プロバイダーの手順も同様です。 または、Office 365 Outlook を使ってサインインのステップをスキップします。
[メールの送信 (V2)] アクションを選択します。
[サインイン] を選択して、ご使用の電子メール アカウントにサインインします。 このアプリがあなたの情報にアクセスすることを許可する場合は、 [はい] を選択します。
電子メール テンプレートを作成します。
送信先: 通知メールを受信するメール アドレスを入力します。 このチュートリアルでは、テストの目的でアクセスできる電子メール アカウントを使用します。
Subject:件名のテキストを入力します。 [件名] テキストボックスをクリックすると、含める動的コンテンツを選択できます。 たとえば、このチュートリアルでは
IoT Hub alert: {eventType}
を使用します。 [動的なコンテンツ] が表示されない場合は、[動的なコンテンツの追加] ハイパーリンクを選んで、[動的なコンテンツ] ビューのオンとオフを切り替えます。
eventType
を選ぶと、これまでのメール フォームの出力が表示されます。 [メールの送信 (V2)] を選んで、メールの本文を編集します。- 本文:メールのテキストを記述します。 イベント データに基づく動的なコンテンツを含めるには、選択ツールから JSON プロパティを選びます。 動的コンテンツが表示されない場合、 [本文] テキスト ボックスの下にある [動的なコンテンツの追加] ハイパーリンクを選択します。 必要なフィールドが表示されない場合は、[動的コンテンツ] 画面の [その他] をクリックして、前のアクションのフィールドを含めます。
メール テンプレートは次の例のようになります。
Logic Apps デザイナーで [保存] を選択します。
HTTP の URL をコピーする
Logic Apps デザイナーを終了する前に、ロジック アプリがトリガーをリッスンする URL をコピーします。 この URL を使って、Event Grid を構成します。
[HTTP 要求の受信時] トリガー構成ボックスをクリックして展開します。
[HTTP POST の URL] の横にあるコピー ボタンを選んで値をコピーします。
次のセクションで参照できるように、この URL を保存します。
IoT Hub イベント用のサブスクリプションを構成する
このセクションでは、発生したらイベントを発行するように IoT Hub を構成します。
Azure Portal で、お使いの IoT ハブに移動します。 Azure ダッシュボードから [IoT Hub] を選ぶことで、自分の IoT ハブを見つけることができます。その後、リソースの一覧から IoT ハブのインスタンスを選びます。
イベントを選択します。
[イベント サブスクリプション] を選びます。
次の値でイベント サブスクリプションを作成します。
[イベント サブスクリプションの詳細] セクションで、次の手順に従います。
- イベント サブスクリプションの名前を指定します。
- [イベント スキーマ] に [イベント グリッド スキーマ] を選択します。
[トピックの詳細] セクションで、次の手順に従います。
- [トピックの種類] が [IoT Hub] に設定されていることを確認します。
- [ソース リソース] フィールドの値として IoT ハブの名前が設定されていることを確認します。
- 自動的に作成されるシステム トピックの名前を入力します。 システム トピックについては、「システム トピックの概要」を参照してください。
[イベントの種類] セクションで、次の手順に従います。
[イベントの種類のフィルター] ドロップダウンを選択します。
[Device Created](デバイスの作成完了) チェックボックスと [Device Deleted](デバイスの削除完了) チェックボックスをオフにし、[Device Connected](デバイスの接続完了) チェックボックスと [Device Disconnected](デバイスの切断完了) チェックボックスのみをオンにしておきます。
[エンドポイントの詳細] セクションで、次の手順に従います。
- [webhook] として [エンドポイントのタイプ] を選択します。
- [エンドポイントの選択] をクリックし、ロジック アプリからコピーした URL を貼り付けて、選択内容を確認します。
完了すると、ペインは次の例のようになります。
[作成] を選択します。
新しいデバイスの接続とテレメトリ送信をシミュレートする
Azure CLI を使用して簡単にデバイスの接続をシミュレートし、ロジック アプリをテストします。
[Cloud Shell] ボタンを選んで、もう一度ターミナルを開きます。
次のコマンドを実行して、シミュレートされたデバイスの ID を作成します。
az iot hub device-identity create --device-id simDevice --hub-name {YourIoTHubName}
処理には 1 分かかる場合があります。 作成が済むと、コンソールに JSON の出力が表示されます。
次のコマンドを実行して、デバイスの IoT ハブへの接続とテレメトリの送信をシミュレートします。
az iot device simulate -d simDevice -n {YourIoTHubName}
シミュレートされたデバイスが IoT Hub に接続すると、"DeviceConnected" イベントを通知するメールを受け取ります。
シミュレーションが完了すると、"DeviceDisconnected" イベントを通知するメールを受け取ります。
リソースをクリーンアップする
このチュートリアルでは、Azure サブスクリプションで料金が発生するリソースを使いました。 チュートリアルを試してテストを完了したら、残しておきたくないリソースを無効にするか削除します。
このチュートリアルで作成したリソースをすべて削除するには、リソース グループを削除します。
[リソース グループ] を選択し、このチュートリアル用に作成したリソース グループを選択します。
[リソース グループ] ペインで、 [リソース グループの削除] を選択します。 リソース グループ名を入力するように求められたら、それを削除できます。 そこに含まれているすべてのリソースも削除されます。
次のステップ
- 「Event Grid を使用し IoT Hub のイベントに対応してアクションをトリガーする」で詳細を確認します。
- デバイス接続イベントおよびデバイス切断イベントの順序を設定する方法を確認します
- Event Grid で他にできることについて確認します。
サポートされている Logic App コネクタの完全な一覧については、
コネクタの概要に関するページを参照してください。