チュートリアル: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 ターミナルを使用してすぐに作成できます。

  1. Azure portal にサインインします。

  2. ページの右上にある [Cloud Shell] ボタンを選択します。

    Screenshot of how to open the Azure Cloud Shell from the Azure portal.

  3. 次のコマンドを実行して、新しいリソース グループを作成します。

    az group create --name {your resource group name} --location westus
    
  4. 次のコマンドを実行して、IoT ハブを作成します。

    az iot hub create --name {your iot hub name} --resource-group {your resource group name} --sku S1 
    
  5. Cloud Shell ターミナルを最小化します。 このチュートリアルで後ほどまたシェルを使います。

ロジック アプリを作成します

次に、ロジック アプリを作成し、IoT ハブからの要求を処理する HTTP Event Grid トリガーを追加します。

ロジック アプリ リソースを作成する

  1. Azure portal で、 [リソースの作成] を選択し、検索ボックスに「logic app」と入力して、Enter キーを押します。 結果から [Logic App] を選択します。

    Screenshot of how to select the logic app from a list of resources.

  2. 次の画面で [作成] を選択します。

  3. ロジック アプリにサブスクリプション内で一意の名前を指定し、IoT ハブと同じサブスクリプション、リソース グループ、場所を選びます。 従量課金プランの種類を選びます。

    Screenshot of how to configure your logic app.

  4. [Review + create](レビュー + 作成) を選択します。

  5. 設定を確認し、 [作成] を選択します。

  6. リソースが作成されたら、 [リソースに移動] を選択します。

  7. Logic Apps デザイナーで、ページを下へスクロールして [テンプレート] を表示します。 ロジック アプリを最初から作成できるように、 [空のロジック アプリ] を選択します。

    Screenshot of the Logic App Designer templates.

トリガーを選択する

トリガーは、ロジック アプリを開始する特定のイベントです。 このチュートリアルでは、ワークフローを開始するトリガーは、HTTP 経由での要求の受信です。

  1. コネクタとトリガーの検索バーに、「HTTP」と入力します。

  2. 結果をスクロールし、トリガーとして [要求 - HTTP 要求の受信時] を選びます。

    Select HTTP request trigger

  3. サンプル ペイロードを使用してスキーマを生成する を選択します。

    Use sample payload

  4. 下の json をコピーし、プレースホルダーの値 <> を独自の値に置き換えます。

  5. "デバイス接続イベントのスキーマ" の 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 ヘッダーを要求に忘れずに含めてください" というポップアップ通知を受け取る場合があります。この指摘は無視しても安全なので、次のセクションに進みます。

アクションを作成する

アクションは、トリガーがロジック アプリのワークフローを開始した後に発生する手順です。 このチュートリアルのアクションは、メール プロバイダーからのメール通知の送信です。

  1. [新しいステップ] を選択します。 ウィンドウが表示され、アクションの選択を求められます。

  2. [Outlook] を探します。

  3. 電子メール プロバイダーに基づいて、一致するコネクタを検索して選択します。 このチュートリアルでは、Outlook.com を使用します。 他のメール プロバイダーの手順も同様です。 または、Office 365 Outlook を使ってサインインのステップをスキップします。

    Select email provider connector

  4. [メールの送信 (V2)] アクションを選択します。

  5. [サインイン] を選択して、ご使用の電子メール アカウントにサインインします。 このアプリがあなたの情報にアクセスすることを許可する場合は、 [はい] を選択します。

  6. 電子メール テンプレートを作成します。

    • 送信先: 通知メールを受信するメール アドレスを入力します。 このチュートリアルでは、テストの目的でアクセスできる電子メール アカウントを使用します。

    • Subject:件名のテキストを入力します。 [件名] テキストボックスをクリックすると、含める動的コンテンツを選択できます。 たとえば、このチュートリアルでは IoT Hub alert: {eventType} を使用します。 [動的なコンテンツ] が表示されない場合は、[動的なコンテンツの追加] ハイパーリンクを選んで、[動的なコンテンツ] ビューのオンとオフを切り替えます。

    eventType を選ぶと、これまでのメール フォームの出力が表示されます。 [メールの送信 (V2)] を選んで、メールの本文を編集します。

    Screenshot of the condensed body output form.

    • 本文:メールのテキストを記述します。 イベント データに基づく動的なコンテンツを含めるには、選択ツールから JSON プロパティを選びます。 動的コンテンツが表示されない場合、 [本文] テキスト ボックスの下にある [動的なコンテンツの追加] ハイパーリンクを選択します。 必要なフィールドが表示されない場合は、[動的コンテンツ] 画面の [その他] をクリックして、前のアクションのフィールドを含めます。

    メール テンプレートは次の例のようになります。

    Screenshot of how to create an event email in the template.

  7. Logic Apps デザイナーで [保存] を選択します。

HTTP の URL をコピーする

Logic Apps デザイナーを終了する前に、ロジック アプリがトリガーをリッスンする URL をコピーします。 この URL を使って、Event Grid を構成します。

  1. [HTTP 要求の受信時] トリガー構成ボックスをクリックして展開します。

  2. [HTTP POST の URL] の横にあるコピー ボタンを選んで値をコピーします。

    Copy the HTTP POST URL

  3. 次のセクションで参照できるように、この URL を保存します。

IoT Hub イベント用のサブスクリプションを構成する

このセクションでは、発生したらイベントを発行するように IoT Hub を構成します。

  1. Azure Portal で、お使いの IoT ハブに移動します。 Azure ダッシュボードから [IoT Hub] を選ぶことで、自分の IoT ハブを見つけることができます。その後、リソースの一覧から IoT ハブのインスタンスを選びます。

  2. イベントを選択します。

    Open the Event Grid details

  3. [イベント サブスクリプション] を選びます。

    Create new event subscription

  4. 次の値でイベント サブスクリプションを作成します。

    1. [イベント サブスクリプションの詳細] セクションで、次の手順に従います。

      1. イベント サブスクリプションの名前を指定します。
      2. [イベント スキーマ][イベント グリッド スキーマ] を選択します。
    2. [トピックの詳細] セクションで、次の手順に従います。

      1. [トピックの種類][IoT Hub] に設定されていることを確認します。
      2. [ソース リソース] フィールドの値として IoT ハブの名前が設定されていることを確認します。
      3. 自動的に作成されるシステム トピックの名前を入力します。 システム トピックについては、「システム トピックの概要」を参照してください。
    3. [イベントの種類] セクションで、次の手順に従います。

      1. [イベントの種類のフィルター] ドロップダウンを選択します。

      2. [Device Created](デバイスの作成完了) チェックボックスと [Device Deleted](デバイスの削除完了) チェックボックスをオフにし、[Device Connected](デバイスの接続完了) チェックボックスと [Device Disconnected](デバイスの切断完了) チェックボックスのみをオンにしておきます。

        select subscription event types

    4. [エンドポイントの詳細] セクションで、次の手順に従います。

      1. [webhook] として [エンドポイントのタイプ] を選択します。
      2. [エンドポイントの選択] をクリックし、ロジック アプリからコピーした URL を貼り付けて、選択内容を確認します。

      select endpoint url

      完了すると、ペインは次の例のようになります。

      Screenshot of your 'Create Event Subscription' page in the Azure portal.

  5. [作成] を選択します。

新しいデバイスの接続とテレメトリ送信をシミュレートする

Azure CLI を使用して簡単にデバイスの接続をシミュレートし、ロジック アプリをテストします。

  1. [Cloud Shell] ボタンを選んで、もう一度ターミナルを開きます。

  2. 次のコマンドを実行して、シミュレートされたデバイスの ID を作成します。

    az iot hub device-identity create --device-id simDevice --hub-name {YourIoTHubName}
    

    処理には 1 分かかる場合があります。 作成が済むと、コンソールに JSON の出力が表示されます。

  3. 次のコマンドを実行して、デバイスの IoT ハブへの接続とテレメトリの送信をシミュレートします。

    az iot device simulate -d simDevice -n {YourIoTHubName}
    
  4. シミュレートされたデバイスが IoT Hub に接続すると、"DeviceConnected" イベントを通知するメールを受け取ります。

  5. シミュレーションが完了すると、"DeviceDisconnected" イベントを通知するメールを受け取ります。

    Screenshot of the email you should receive.

リソースをクリーンアップする

このチュートリアルでは、Azure サブスクリプションで料金が発生するリソースを使いました。 チュートリアルを試してテストを完了したら、残しておきたくないリソースを無効にするか削除します。

このチュートリアルで作成したリソースをすべて削除するには、リソース グループを削除します。

  1. [リソース グループ] を選択し、このチュートリアル用に作成したリソース グループを選択します。

  2. [リソース グループ] ペインで、 [リソース グループの削除] を選択します。 リソース グループ名を入力するように求められたら、それを削除できます。 そこに含まれているすべてのリソースも削除されます。

次のステップ

サポートされている Logic App コネクタの完全な一覧については、

コネクタの概要に関するページを参照してください。