

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

# AWS IoT Device Defender デモ
<a name="dd-demo"></a>

**重要**  <a name="deprecation-message-demo"></a>
このデモは、非推奨の Amazon-FreeRTOS リポジトリでホストされています。新しいプロジェクトを作成するときは、[ここから始める](freertos-getting-started-modular.md)ことをお勧めします。現在非推奨の Amazon-FreeRTOS リポジトリをベースにした既存の FreeRTOS プロジェクトが既にある場合は、「[Amazon FreeRTOS Github リポジトリ移行ガイド](github-repo-migration.md)」を参照してください。

## 序章
<a name="dd-demo-introduction"></a>

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

**注記**  
FreeRTOS デモをセットアップして実行するには、[FreeRTOS の開始方法](freertos-getting-started.md) の手順に従います。

## 機能
<a name="dd-demo-functionality"></a>

このデモでは、メトリクスを収集し、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 レポートに送信するメトリクス収集実装を提供します。GitHub から、[FreeRTOS\+TCP](https://github.com/aws/amazon-freertos/blob/main/demos/device_defender_for_aws/metrics_collector/freertos_plus_tcp/metrics_collector.c) と [lwIP](https://github.com/aws/amazon-freertos/blob/main/demos/device_defender_for_aws/metrics_collector/lwip/metrics_collector.c) の実装を入手できます。

他の TCP/IP スタックを使用するボード向けに、すべてのネットワークメトリクスに対してゼロを返すメトリック収集関数のスタブ定義を提供しています。`{{freertos}}/demos/device_defender_for_aws/metrics_collector/stub/metrics_collector.c` で機能を実装し、ネットワークスタックが実際のメトリクスを送信するようにしてください。このファイルも [GitHub](https://github.com/aws/amazon-freertos/blob/main/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
```

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

![コンソールログ出力で DemoThing アプリケーションの MQTT 接続、発行、メモリ使用量イベントを示します。](http://docs.aws.amazon.com/ja_jp/freertos/latest/userguide/images/Defender_p4_supported.png)


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

![ログメッセージで、デモアプリケーションの MQTT 接続確立、トピックサブスクリプション試行、ペイロードの発行、パケット処理を示します。](http://docs.aws.amazon.com/ja_jp/freertos/latest/userguide/images/Defender_p4_unsupported.png)


デモのソースコードは、`{{freertos}}/demos/device_defender_for_aws/` ディレクトリのダウンロード内、または [GitHub](https://github.com/aws/amazon-freertos/tree/main/demos/device_defender_for_aws) ウェブサイトにあります。

### AWS IoT Device Defender トピックへのサブスクライブ
<a name="dd-demo-subscribing"></a>

[subscribeToDefenderTopics](https://github.com/aws/amazon-freertos/blob/main/demos/device_defender_for_aws/defender_demo.c#L514-L530) 関数は、MQTT トピックをサブスクライブして、発行された Device Defender レポートに対する応答を受信します。ここでは、マクロ `DEFENDER_API_JSON_ACCEPTED` を使用して、受け入れた Device Defender レポートの応答を受信するトピック文字列を作成します。ここでは、マクロ `DEFENDER_API_JSON_REJECTED` を使用して、拒否した Device Defender レポートの応答を受信するトピック文字列を作成します。

### デバイスメトリクスを収集する
<a name="dd-demo-collecting-metrics"></a>

[collectDeviceMetrics](https://github.com/aws/amazon-freertos/blob/main/demos/device_defender_for_aws/defender_demo.c#L376-L511) 関数は、`metrics_collector.h` で定義されている関数を使用してネットワークメトリクスを収集します。送受信されたバイト数とパケット数、開いている TCP ポート、開いている UDP ポート、確立された TCP 接続に関するメトリクスが収集されます。

### AWS IoT Device Defender レポートの生成
<a name="dd-demo-generating-report"></a>

[generateDeviceMetricsReport](https://github.com/aws/amazon-freertos/blob/main/demos/device_defender_for_aws/defender_demo.c#L552-L581) 関数は、`report_builder.h` で定義されている関数を使用して Device Defender レポートを生成します。この関数は、ネットワークメトリクスとバッファを取得し、 が期待する形式で JSON ドキュメントを作成し AWS IoT Device Defender 、指定されたバッファに書き込みます。で想定される JSON ドキュメントの形式 AWS IoT Device Defender は、 *AWS IoT デベロッパーガイド*の[デバイス側のメトリクス](https://docs.aws.amazon.com/iot/latest/developerguide/detect-device-side-metrics.html)で指定されています。

### AWS IoT Device Defender レポートの発行
<a name="dd-demo-publishing-report"></a>

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

### 応答を処理するコールバック
<a name="dd-demo-callback-handling"></a>

[publishCallback](https://github.com/aws/amazon-freertos/blob/main/demos/device_defender_for_aws/defender_demo.c#L302-L373) 関数は、受信する MQTT 発行メッセージを処理します。 AWS IoT Device Defender ライブラリの `Defender_MatchTopic` API を使用して、受信 MQTT メッセージが AWS IoT Device Defender サービスからのものであるかどうかを確認します。メッセージが AWS IoT Device Defender サービスからのものである場合、受信した JSON レスポンスを解析し、レスポンスでレポート ID を抽出します。その後、レポート ID は、レポート内に送信されたものと同じかどうか検証されます。