Amazon Web Services ブログ

AWS IoT Eventsの探知器モデルのトラブルシューティング方法

AWS IoT Eventsは先日、新しいトラブルシューティング機能を発表しました。この機能では、探知器モデルを発行しなくても、潜在的な構文エラー、構造上の問題、およびランタイムエラーがないかどうか、探知器モデルを自動的に分析できます。この記事では、AWS IoT Eventsの探知器モデルでこの新機能を使用する方法をご紹介します。

AWS IoT Eventsは、IoTセンサーやアプリケーションからのイベントを簡単に検出して応答することができるフルマネージドサービスです。AWS IoT Eventsの探知器モデルを使用すると、機器やデバイスフリートの障害や動作の変化を監視し、そのようなイベントが発生したときにアクションを起こすことができます。探知器モデルの詳細については、ガイド「Getting Started with the AWS IoT Events Console」を参照してください。

この新機能の提供開始前は、探知器モデルが期待通りに動作するかどうかを確認するために、お客様はまずサンプルデータを探知器モデルに送信していました。次に、DescribeDetector APIを実行して、探知器の状態が期待通りに変化したかどうかを確認していました。期待通りに探知器の状態が変化しなかった場合は、根本的な原因を特定し、探知器モデルの更新版を発行した後、再びサンプルデータを探知器モデルに送信します。このようなデバッグサイクルを、探知器モデルが目的の機能を達成するまで(あるいは時間切れになるまで)繰り返すことになります。このようなデバッグ作業は、特に複雑な探知器モデルの場合、時間がかかります。

デバッグに時間がかかる例を挙げてみましょう。この探知器モデルは、部屋の温度を継続的に監視し、必要に応じてHVACシステムの暖房または冷房モードをオンにして、温度を華氏68~72度に維持します。探知器は、平均温度を計算し、averageTemperatureという変数に格納します。
Diagram of HVAC detector model in AWS IoT Events console

この例の探知器モデルにサンプルデータを送信したところ、平均温度が再計算されていないことがわかります。探知器モデルのAmazon CloudWatchのログを確認しても、平均温度が再計算されない理由はわかりません。そこで、平均温度を再計算するために必要な探知器モデルの条件を以下の通り確認します。

($variable.resetMe == true) && ($input.temperatureInput.sensorData.temperature < 80 && $input.temperatureInput.sensorData.temperature > 60)

探知器が起動状態になったときに、変数 resetMe をStringデータ型の値である "true" に設定しました。何度か試行錯誤した結果、値 "true"(引用符に注意)がブール値である true と一致することはないことがわかりました。このため、条件($variable.resetMe == true)は常にfalseと評価されます。

AWS IoT Eventsの新しいトラブルシューティング機能は、resetMe 変数の警告を表示することで、このデータ型の不一致をより早くキャッチできます。この機能がなければ、例えば20の状態と50の変数を持つ、より大きな検出器モデルのデバッグは時間のかかる作業になります。この新機能では、探知器モデルを発行する前に、構文エラー(不適切な式やペイロードなど)、構造的な問題(ステートや入力トリガーの欠落など)、ランタイムエラー(データタイプの不一致、データの欠落、サービスリミットに達する可能性など)の可能性について、7つの異なる分析を行います。

探知器モデルのトラブルシューティングを始めるには

このステップ・バイ・ステップ・ウォークスルーは、先ほどの探知器モデルの例をデバッグするための以下のセクションで構成されています。

  1. 前提条件
  2. 入力の作成
  3. 探知器モデルの作成
  4. 探知器モデルのトラブルシューティング

前提条件

このユースケースでは、AWS IoT Eventsが利用可能な同じAWSリージョンにAWSアカウントを持っていることを確認してください。このユースケースでは、US East (N. Virginia) リージョンを使用しています。ただし、AWS IoT Eventsが利用可能な別のAWSリージョンを選択することもできます。

探知器モデルの入力を作成するには

以下の手順で、temperatureInputという名前の入力を作成します。

  1. 以下のJSONファイルを作成して保存してください。
    {
      "sensorId": 1,
      "areaId": 1,
      "sensorData" : {
        "temperature": 70
      }
    }
  2. 入力名には “temperatureInput”と入力します。
  3. JSONファイルのアップロードを選択します。
  4. ダイアログボックスでは、手順1で作成したJSONファイルを選択します。
  5. 作成を選択して、入力を作成します。
  6. 入力が正常に作成されると、以下のメッセージとともにAWS IoT Events 入力のコンソールページにリダイレクトされます。

Success flashbar that indicates you have successfully created an input

探知器モデルの作成

以下の手順で、areaDetectorModelという名前のドラフト探知器モデルを作成します。

  1. JSONファイルをダウンロードします。
  2. AWS IoT Eventsコンソールに移動し、探知器モデルを選択します。
  3. 探知器モデルの作成を選択すると、探知器モデルの作成コンソールページに移動します。
  4. 表示されたダイアログの左側のペインから探知器モデルのインポートを選択し、ステップ1でダウンロードした探知器モデルのJSONファイルを選択します。
    ※ 本探知モデルにはSNS通知を行うアクションが設定されており、ダミーのAmazon SNSのARNが設定されています。本トラブルシューティングを試すだけであれば書き換え不要ですが、実際に動作させる際にはこれらの書き換えが必要となります。
  5. 探知器モデルが正常に作成されると、キャンバスにリダイレクトされます。

Success flashbar that indicates you have successfully imported your detector model with the diagram of the HVAC detector model

探知器モデルのトラブルシューティング

以下の手順で、探知器モデルのトラブルシューティングを行ってください。

  1. 分析を実行を選択します。
    Figure highlighting the "Run analysis" button in the AWS IoT Events console
  2. 分析が完了し、結果が探知器モデル分析パネルに表示されるまで待ちます。互換性のないデータタイプの詳細を確認するには、警告を選択します。
    Figure showing the results from analyzing the detector model in the AWS IoT Events console. The results include a warning for data types used in your detector model. The warning message is "Incompatible data types [Boolean, String] used with $variable.resetMe. This may lead to a runtime error.
  3. この警告を修正するには、インポートされた探知器モデルでStart状態を選択します。
  4. 状態ペインのonEnterprepareを選択します。
  5. OnEnterイベントの追加ページで、最初の変数の設定アクションを展開します。
  6. 変数resetMeの値の割り当てを、String値の “true”からBoolean値のtrueに変更します。
    Figure showing a variable resetMe being assigned to the Boolean value, true, in the AWS IoT Events console
  7. すべてのアクションのリストを下にスクロールし、保存を選択します。
  8. 分析を再実行を選択します。
    Figure highlighting the "Rerun analysis" button in the AWS IoT Events console
  9. 解析が完了し、探知器モデルの解析パネルに結果が表示され、エラーや警告が表示されなくなるまで待ちます。
    Figure showing results from re-running analysis on the detector model in the AWS IoT Events console
  10. また、探知器モデル分析パネルのリストを下にスクロールして、resetMe変数のデータ型がBooleanになっていることを確認できます。
    An informative message from the AWS IoT Events console indicating "Inferred data types [Boolean] for $variable.resetMe

これで探知器モデルの発行が可能になりました。

最後に

この記事では、先日発表されたAWS IoT Eventsの新しいトラブルシューティング機能を使って、探知器モデルを最初に発行しなくても、潜在的な構文エラー、構造上の問題、ランタイムエラーを自動的に分析する方法を実演しました。

探知器モデルを発行する前にエラーを分析できるようになったので、次のようなユースケースでの使用を検討してみてください。

 

原文はこちら
翻訳はソリューションアーキテクト 渡邉が担当しました。