AWS IoT Device Defender デモ
重要
このデモは、非推奨の Amazon-FreeRTOS リポジトリでホストされています。新しいプロジェクトを作成するときは、ここから始めることをお勧めします。現在非推奨の Amazon-FreeRTOS リポジトリをベースにした既存の FreeRTOS プロジェクトが既にある場合は、「Amazon FreeRTOS Github リポジトリ移行ガイド」を参照してください。
序章
このデモでは、AWS IoT Device Defender に接続している AWS IoT Device Defender ライブラリの使用方法を示します。デモでは、coreMQTT ライブラリを使用して、AWS IoT MQTT ブローカーおよび coreJSON ライブラリとの TLS 経由の MQTT 接続 (相互認証) を確立し、AWS IoT Device Defender サービスから受信した応答を検証して解析します。デモでは、デバイスから収集されたメトリクスを使用して JSON 形式のレポートを作成する方法と、作成したレポートを AWS IoT Device Defender サービスに送信する方法を示します。デモでは、コールバック関数を coreMQTT ライブラリに登録して、AWS IoT Device Defender サービスからの応答を処理し、送信されたレポートが受け入れられたか拒否されたかを確認します。
注記
FreeRTOS デモをセットアップして実行するには、FreeRTOS の開始方法 の手順に従います。
機能
このデモでは、1 つのアプリケーションタスクを作成して、メトリクスを収集し、Device Defender レポートを JSON 形式で作成し、AWS IoT MQTT ブローカーへのセキュアな MQTT 接続を介して AWS IoT Device Defender サービスにレポートを送信する方法を説明します。デモには、標準のネットワークメトリクスとカスタムメトリクスが含まれています。カスタムメトリクスの場合、デモには以下が含まれます。
-
FreeRTOS タスク ID のリストを示す「
task_numbers」というメトリクス。このメトリクスのタイプは「数値のリスト」です。 -
デモアプリケーションタスクのスタックハイウォーターマークを示す「
stack_high_water_mark」というメトリクス。このメトリクスのタイプは「数値」です。
ネットワークメトリクスの収集方法は、使用している TCP/IP スタックによって異なります。FreeRTOS+TCP およびサポートされている lwIP 設定には、デバイスから実際のメトリクスを収集して AWS IoT Device Defender レポートでメトリクスを送信する、メトリクス収集の実装を提供しています。GitHub から、FreeRTOS+TCP
他の TCP/IP スタックを使用するボード向けに、すべてのネットワークメトリクスに対してゼロを返すメトリック収集関数のスタブ定義を提供しています。 で機能を実装し、ネットワークスタックが実際のメトリクスを送信するようにしてください。このファイルも GitHubfreertos/demos/device_defender_for_aws/metrics_collector/stub/metrics_collector.c
ESP32 の場合、デフォルトの lwIP 設定はコアロックを使用しないため、デモではスタブメトリクスが使用されます。参照 lwIP メトリクス収集の実装を使用する場合は、lwiopts.h に次のマクロを定義します。
#define LINK_SPEED_OF_YOUR_NETIF_IN_BPS 0 #define LWIP_TCPIP_CORE_LOCKING 1 #define LWIP_STATS 1 #define MIB2_STATS 1
以下に、デモを実行したときの出力例を示します。
ボードが FreeRTOS+TCP またはサポートされている lwIP 設定を使用していない場合、出力は次のようになります。
デモのソースコードは、 ディレクトリのダウンロード内、または GitHubfreertos/demos/device_defender_for_aws/
AWS IoT Device Defender トピックをサブスクライブする
subscribeToDefenderTopicsDEFENDER_API_JSON_ACCEPTED を使用して、受け入れた Device Defender レポートの応答を受信するトピック文字列を作成します。ここでは、マクロ DEFENDER_API_JSON_REJECTED を使用して、拒否した Device Defender レポートの応答を受信するトピック文字列を作成します。
デバイスメトリクスを収集する
collectDeviceMetricsmetrics_collector.h で定義されている関数を使用してネットワークメトリクスを収集します。送受信されたバイト数とパケット数、開いている TCP ポート、開いている UDP ポート、確立された TCP 接続に関するメトリクスが収集されます。
AWS IoT Device Defender レポートを生成する
generateDeviceMetricsReportreport_builder.h で定義されている関数を使用して Device Defender レポートを生成します。この関数は、ネットワークメトリックとバッファを取得し、AWS IoT Device Defender が要求する形式の JSON ドキュメントを作成し、指定されたバッファに書き込みます。AWS IoT Device Defender が想定している JSON ドキュメントの形式は、AWS IoT 開発者ガイドのデバイス側のメトリクスに記載されています。
AWS IoT Device Defender レポートを発行する
AWS IoT Device Defender レポートは、JSON AWS IoT Device Defender レポート発行用の MQTT トピック上に発行されます。レポートは、GitHub ウェブサイトのこのコードスニペットDEFENDER_API_JSON_PUBLISH を使用して作成されます。
応答を処理するコールバック
publishCallbackDefender_MatchTopic ライブラリの AWS IoT Device Defender API を使用して、受信した MQTT メッセージが AWS IoT Device Defender サービスからのものかどうかを確認します。メッセージが AWS IoT Device Defender サービスのものである場合は、受信した JSON レスポンスを解析し、レスポンス内のレポート ID を抽出します。その後、レポート ID は、レポート内に送信されたものと同じかどうか検証されます。