AWS IoT Device Defender デモ - 無料RTOS

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS IoT Device Defender デモ

重要

このデモは、非推奨の Amazon-FreeRTOS リポジトリでホストされています。新しいプロジェクトを作成するときは、ここから始めることをお勧めします。現在非推奨の Amazon-FreeRTOS リポジトリをベースにした既存の FreeRTOS プロジェクトが既にある場合は、「Amazon-FreeRTOS Github リポジトリ移行ガイド」を参照してください。

序章

このデモでは、 AWS IoT Device Defender ライブラリを使用して に接続する方法を示しますAWS IoT Device Defender。このデモでは、coreMQTT ライブラリを使用して MQTT ブローカーへの TLS 経由 AWS IoT の MQTT 接続 (相互認証) を確立し、coreJSON ライブラリを使用して AWS IoT Device Defender サービスから受信したレスポンスを検証および解析します。このデモでは、デバイスから収集されたメトリクスを使用して JSON 形式のレポートを作成する方法と、構築されたレポートを AWS IoT Device Defender サービスに送信する方法を示します。このデモでは、coreMQTT ライブラリにコールバック関数を登録して、送信されたレポートが承諾されたか拒否されたかを確認するために、 AWS IoT Device Defender サービスからのレスポンスを処理する方法も示します。

注記

FreeRTOS デモをセットアップして実行するには、無料利用開始RTOS の手順に従います。

機能

このデモでは、メトリクスを収集し、JSON 形式でデバイスディフェンダーレポートを構築し、MQTT AWS IoT ブローカーへの安全な MQTT 接続を介して AWS IoT Device Defender サービスに送信する方法を示す単一のアプリケーションタスクを作成します。デモには、標準のネットワークメトリクスとカスタムメトリクスが含まれています。カスタムメトリクスの場合、デモには以下が含まれます。

  • FreeRTOS タスク ID のリストを示す「task_numbers」というメトリクス。このメトリクスのタイプは「数値のリスト」です。

  • デモアプリケーションタスクのスタックハイウォーターマークを示す「stack_high_water_mark」というメトリクス。このメトリクスのタイプは「数値」です。

ネットワークメトリクスの収集方法は、使用している TCP/IP スタックによって異なります。FreeRTOS +TCP およびサポートされている lwIP 設定では、デバイスから実際のメトリクスを収集し、 AWS IoT Device Defender レポートで送信するメトリクス収集の実装を提供します。 FreeRTOS +TCP および lwIP の実装は、 で確認できます GitHub。

他の TCP/IP スタックを使用するボード向けに、すべてのネットワークメトリクスに対してゼロを返すメトリック収集関数のスタブ定義を提供しています。freertos/demos/device_defender_for_aws/metrics_collector/stub/metrics_collector.c で機能を実装し、ネットワークスタックが実際のメトリクスを送信するようにしてください。このファイルは、 GitHubウェブサイトでも入手できます。

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

以下に、デモを実行したときの出力例を示します。

DemoThing アプリケーションの MQTT 接続、公開、メモリ使用量イベントを示すコンソールログ出力。

ボードが FreeRTOS+TCP またはサポートされている lwIP 設定を使用していない場合、出力は次のようになります。

デモアプリケーションの MQTT 接続確立、トピックサブスクリプション試行、ペイロードの発行、パケット処理を示すログメッセージ。

デモのソースコードは、 freertos/demos/device_defender_for_aws/ ディレクトリまたはGitHubウェブサイトでダウンロードできます。

AWS IoT Device Defender トピックのサブスクライブ

subscribeToDefenderTopics 関数は、公開された Device Defender レポートへの応答を受信する MQTT トピックをサブスクライブします。ここでは、マクロ DEFENDER_API_JSON_ACCEPTED を使用して、受け入れた Device Defender レポートの応答を受信するトピック文字列を作成します。ここでは、マクロ DEFENDER_API_JSON_REJECTED を使用して、拒否した Device Defender レポートの応答を受信するトピック文字列を作成します。

デバイスメトリクスを収集する

collectDeviceMetrics 関数は、 で定義されている関数を使用してネットワークメトリクスを収集しますmetrics_collector.h。送受信されたバイト数とパケット数、開いている TCP ポート、開いている UDP ポート、確立された TCP 接続に関するメトリクスが収集されます。

AWS IoT Device Defender レポートの生成

generateDeviceMetricsレポート関数は、 で定義された関数を使用してデバイスディフェンダーレポートを生成しますreport_builder.h。この関数は、ネットワークメトリクスとバッファを受け取り、 が期待する形式で JSON ドキュメントを作成し AWS IoT Device Defender 、提供されたバッファに書き込みます。で想定される JSON ドキュメントの形式 AWS IoT Device Defender は、 AWS IoT デベロッパーガイド「デバイス側のメトリクス」で指定されています。

AWS IoT Device Defender レポートの発行

AWS IoT Device Defender レポートは、JSON AWS IoT Device Defender レポートを発行するための MQTT トピックで発行されます。レポートは、 GitHub ウェブサイトのこのコードスニペットに示すようにDEFENDER_API_JSON_PUBLISH、マクロ を使用して構築されます。 https://github.com/aws/amazon-freertos/blob/main/demos/device_defender_for_aws/defender_demo.c#L691-L695

応答を処理するコールバック

publishCallback 関数は、受信する MQTT 発行メッセージを処理します。 AWS IoT Device Defender ライブラリの Defender_MatchTopic API を使用して、受信 MQTT メッセージが AWS IoT Device Defender サービスからのものであるかどうかを確認します。メッセージがサービスからのものである場合 AWS IoT Device Defender 、受信した JSON レスポンスを解析し、レスポンス内のレポート ID を抽出します。その後、レポート ID は、レポート内に送信されたものと同じかどうか検証されます。