

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

# フリートインデックス作成
<a name="iot-indexing"></a>

フリートインデックス作成を使用して、次のソースからデバイスのデータのインデックス作成、検索、集計を実行できます。[AWS IoT レジストリ](thing-registry.md)、[AWS IoT デバイスシャドウ](iot-device-shadows.md)、[AWS IoT 接続性](life-cycle-events.md)、[AWS IoT Device Management Software Package Catalog](software-package-catalog.md)、および [AWS IoT Device Defender](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/what-is-device-defender.html) 違反。デバイスのグループをクエリし、状態、接続性、デバイスの違反など、さまざまなデバイス属性の組み合わせに基づくデバイスレコードの統計情報を集計できます。フリートインデックス作成を使用すると、デバイスにおけるフリートの整理、調査、トラブルシューティングを実行できます。

フリートインデックス作成には、次の機能があります。

## インデックスの更新の管理
<a name="iot-indexing-manage-index-update"></a>

モノのグループ、モノのレジストリ、デバイスシャドウ、デバイスの接続性、デバイスの違反における更新をインデックス化するようにフリートインデックスを設定できます。フリートインデックス作成をアクティブにすると、 AWS IoT によりモノまたはモノのグループのインデックスが作成されます。`AWS_Things` はすべてのモノに対して作成されるインデックスで、`AWS_ThingGroups` はすべてのモノのグループが含まれるインデックスです。フリートインデックス作成がアクティブになると、インデックスに対してクエリを実行できます。たとえば、ハンドヘルドでバッテリー残量が 70% を超えるすべてのデバイスを見つけることができます。 は、最新のデータでインデックスを継続的に AWS IoT 更新します。詳細については、「[Managing fleet indexing](managing-fleet-index.md)」を参照してください。

## 特定のデバイスの接続ステータスのクエリ
<a name="querying-connectivity-status-for-specific-device"></a>

この API は、最新のデバイス固有の接続情報への低レイテンシーで高スループットのアクセスを提供します。詳細については、「[デバイスの接続ステータス」](https://docs.aws.amazon.com/iot/latest/developerguide/device-connectivity-status.html) を参照してください。

## データソース全体での検索
<a name="iot-indexing-search-data-source"></a>

[クエリ言語](query-syntax.md)に基づいてクエリ文字列を作成し、それを使用してデータソース全体を検索できます。また、フリートインデックス作成の設定でデータソースを設定して、インデックス作成の設定に検索するデータソースを含める必要があります。クエリ文字列には、検索したいモノが記述されます。クエリは、 AWS マネージドフィールド、カスタムフィールド、およびインデックス化されたデータソースからの任意の属性を使用して作成できます。フリートのインデックス作成をサポートするデータソースの詳細については、「[モノのインデックス作成の管理](managing-index.md)」を参照してください。

## 集計データのクエリ
<a name="iot-indexing-query-aggregate-data"></a>

デバイスで集計データを検索し、特定のフィールドに関連した検索クエリを使用して、統計情報、パーセンタイル、カーディナリティ、またはモノのリストを返すことができます。 AWS マネージドフィールドまたはフリートインデックス作成設定内のカスタムフィールドとして設定した属性で集計を実行できます。集計クエリの詳細については、「[集計データのクエリ](index-aggregate.md)」を参照してください。

## フリートメトリクスを使用した集計データのモニタリングとアラームの作成
<a name="iot-indexing-monitor-aggregate-date"></a>

フリートメトリクスを使用して CloudWatch に集計データを自動的に送信し、トレンドを分析し、事前定義されたしきい値に基づいてフリートの集計状態をモニタリングするためのアラームを作成できます。フリートメトリクスの詳細については、「[フリートメトリクス](iot-fleet-metrics.md)」を参照してください。

# フリートのインデックス作成の管理
<a name="managing-fleet-index"></a>

フリートインデックス作成では、モノのインデックス作成およびモノのグループのインデックス作成の 2 種類のインデックスを管理できます。

## モノのインデックス作成
<a name="thing-index"></a>

すべてのモノに対して作成されるインデックスは `AWS_Things` と呼ばれます。モノのインデックス作成では、次のデータソースがサポートされています。[AWS IoT レジストリ](thing-registry.md)データ、[AWS IoT デバイスシャドウ](iot-device-shadows.md)データ、[AWS IoT 接続性](life-cycle-events.md)データ、[AWS IoT Device Defender](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/what-is-device-defender.html) 違反データ。これらのデータソースをフリートのインデックス作成設定に追加することで、モノの検索、集計データのクエリを行い、検索クエリに基づく動的なモノのグループとフリートメトリクスを作成できます。

**Registry** は、モノの管理に役立つレジストリAWS IoT を提供します。レジストリデータをフリートのインデックス作成設定に追加して、モノの名前、説明、およびその他のレジストリ属性に基づいてデバイスを検索できます。レジストリの詳細については、「[レジストリによるモノの管理方法](thing-registry.md)」を参照してください。

**シャドウ** — [AWS IoT Device Shadow サービス](iot-device-shadows.md)では、デバイスの状態についてのデータの保存に役立つシャドウが提供されています。モノのインデックス作成では、名前のないクラシックシャドウおよび名前付きシャドウの両方がサポートされています。名前付きシャドウのインデックスを作成するには、名前付きシャドウの設定を有効にし、モノのインデックス作成設定でシャドウ名を指定します。デフォルトでは、1 つにつき最大 10 個のシャドウ名を追加できます AWS アカウント。シャドウ名数の上限を増やす方法については、「AWS 全般のリファレンス」の「[AWS IoT Device Management クォータ](https://docs.aws.amazon.com/general/latest/gr/iot_device_management.html#fleet-indexing-limits)」を参照してください。

インデックス作成のために名前付きシャドウを追加するには:
+ [AWS IoT コンソール](https://console.aws.amazon.com/iot/home)を使用する場合、**[Thing indexing]** (モノのインデックス作成) を有効化し、**[Add named shadows]** (名前付きシャドウの追加) を選択して、**[Named shadow selection]** (名前付きシャドウの選択) からシャドウの名前を追加します。
+  AWS Command Line Interface (AWS CLI) を使用する場合は、 `namedShadowIndexingMode` を に設定し`ON`、 でシャドウ名を指定します[https://docs.aws.amazon.com//iot/latest/apireference/API_IndexingFilter.html](https://docs.aws.amazon.com//iot/latest/apireference/API_IndexingFilter.html)。CLI コマンドの例を確認するには、「[モノのインデックス作成の管理](managing-index.md#enable-index)」を参照してください。

**重要**  
2022 年 7 月 20 日は、 AWS IoT Device Management フリートインデックス作成と AWS IoT Core 名前付きシャドウの統合の一般提供 (GA) リリースであり、違反 AWS IoT Device Defender を検出します。この一般提供版 (GA) リリースにより、ユーザーはシャドウ名を指定して、特定の名前付きシャドウにインデックスを付けることができます。2021 年 11 月 30 日から 2022 年 7 月 19 日までのこの機能のパブリックプレビュー期間中に、インデックス作成のために名前付きシャドウを追加した場合は、フリートのインデックス作成設定を再構成して特定のシャドウ名を選択することにより、インデックス作成コストを削減してパフォーマンスを最適化するようお勧めします。

 シャドウの詳細については、「[AWS IoT Device Shadow サービス](iot-device-shadows.md)」を参照してください。

**接続性** — デバイスの接続性に関するデータは、デバイスの接続ステータスを特定するのに役立ちます。この接続性に関するデータは、[ライフサイクルイベント](life-cycle-events.md)によって扱われます。クライアントが接続または切断すると、 は MQTT トピックにメッセージを含むライフサイクルイベント AWS IoT を発行します。接続または切断のメッセージは、接続ステータスの詳細を提供する JSON 要素のリストになります。デバイスの接続性についての詳細は、「[ライフサイクルイベント](life-cycle-events.md)」を参照してください。

**Device Defender 違反**データAWS IoT Device Defender を使用すると、セキュリティプロファイルで定義した通常の動作に対して異常なデバイス動作を特定できます。Security Profile には、予想される一連のデバイスの動作が含まれています。各動作では、デバイスにおける通常の動作を指定するメトリクスを使用します。Device Defender 違反の詳細については、「[AWS IoT Device Defender 検出](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/device-defender-detect.html)」を参照してください。

詳細については、「[モノのインデックス作成の管理](managing-index.md)」を参照してください。

## モノのグループのインデックス作成
<a name="thing-group-index"></a>

`AWS_ThingGroups` は、すべてのモノのグループが含まれるインデックスです。このインデックスを使用して、グループ名、説明、属性、すべての親グループ名に基づいてグループを検索することができます。

詳細については、「[モノのグループのインデックス作成の管理](thinggroup-index.md)」を参照してください。

## 管理対象フィールド
<a name="managed-field"></a>

マネージドフィールドには、モノ、モノのグループ、デバイスシャドウ、デバイス接続、Device Defender 違反に関連するデータが含まれます。 は、マネージドフィールドのデータ型 AWS IoT を定義します。 AWS IoT モノを作成するときに、各マネージドフィールドの値を指定します。例えば、モノの名前、モノのグループ、モノの説明はすべて管理対象フィールドです。フリートインデックス作成では、指定したインデックス作成モードに基づいて、管理対象フィールドがインデックス化されます。`customFields` では、管理対象フィールドを変更したり表示することはできません。詳細については、「[Custom fields](#custom-field)」を参照してください。

モノのインデックス作成の管理対象フィールドを次に示します。
+ レジストリの管理対象フィールド

  ```
  "managedFields" : [
    {name:thingId, type:String},
    {name:thingName, type:String},
    {name:registry.version, type:Number},
    {name:registry.thingTypeName, type:String},
    {name:registry.thingGroupNames, type:String},
  ]
  ```
+ 名前のないクラシックシャドウの管理対象フィールド

  ```
  "managedFields" : [
    {name:shadow.version, type:Number},
    {name:shadow.hasDelta, type:Boolean}
  ]
  ```
+ 名前付きシャドウの管理対象フィールド

  ```
  "managedFields" : [
    {name:shadow.name.shadowName.version, type:Number},
    {name:shadow.name.shadowName.hasDelta, type:Boolean}
  ]
  ```
+ モノの接続性の管理対象フィールド

  ```
  "managedFields" : [
    {name:connectivity.timestamp, type:Number},
    {name:connectivity.version, type:Number},
    {name:connectivity.connected, type:Boolean},
    {name:connectivity.disconnectReason, type:String}
  ]
  ```
+ Device Defender の管理フィールド

  ```
  "managedFields" : [
    {name:deviceDefender.violationCount, type:Number},
    {name:deviceDefender.securityprofile.behaviorname.metricName, type:String},
    {name:deviceDefender.securityprofile.behaviorname.lastViolationTime, type:Number},
    {name:deviceDefender.securityprofile.behaviorname.lastViolationValue, type:String},
    {name:deviceDefender.securityprofile.behaviorname.inViolation, type:Boolean}
  ]
  ```
+ モノのグループの管理対象フィールド

  ```
  "managedFields" : [
    {name:description, type:String},
    {name:parentGroupNames, type:String},
    {name:thingGroupId, type:String},
    {name:thingGroupName, type:String},
    {name:version, type:Number},
  ]
  ```

次の表は、検索できない管理フィールドです。


| データソース | 検索できない管理フィールド | 
| --- | --- | 
| レジストリ | registry.version | 
| 名前のないシャドウ | shadow.version | 
| 名前付きシャドウ | shadow.name.\$1.version | 
| Device Defender | deviceDefender.version | 
| モノのグループ | version | 

## カスタムフィールド
<a name="custom-field"></a>

モノの属性、Device Shadow データ、Device Defender 違反のデータを集計するには、カスタムフィールドを作成してそれらをインデックス化します。`customFields` 属性は、フィールド名とデータ型のペアのリストです。データ型に基づいて、集計クエリを実行できます。選択するインデックス作成モードは、`customFields` で指定できるフィールドに影響します。例えば、`REGISTRY` インデックス作成モードを指定した場合、Thing Shadow からカスタムフィールドを指定することはできません。[update-indexing-configuration](https://docs.aws.amazon.com/cli/latest/reference/iot/update-indexing-configuration.html) CLI コマンドを使用して、カスタムフィールドを作成または更新できます ([Updating indexing configuration examples](managing-index.md#update-index-examples) のコマンド例を参照してください)。
+ **カスタムフィールド名**

モノおよび モノのグループ属性のカスタムフィールド名は `attributes.` で始まり、属性名が続きます。名前のないシャドウのインデックス作成がオンの場合、モノのカスタムフィールド名は `shadow.desired` または `shadow.reported` で始まり、名前のないシャドウデータの値名が続きます。名前付きシャドウのインデックス作成がオンの場合、モノのカスタムフィールド名は `shadow.name.*.desired.` または `shadow.name.*.reported.` で始まり、名前付きシャドウデータの値が続きます。Device Defender 違反のインデックス作成がオンの場合、モノのカスタムフィールド名は `deviceDefender.` で始まり、Device Defender 違反のデータの値が続きます。

プレフィックスに続く属性名またはデータの値名には、英数字、— (ハイフン)、\$1 (アンダースコア) のみを使用できます。スペースを含めることはできません。

設定内のカスタムフィールドとインデックス化される値のタイプに不整合がある場合、フリートインデックス作成では集計クエリの不整合値が無視されます。CloudWatch ログは、集約クエリの問題のトラブルシューティングに役立ちます。詳細については、「[フリートインデックス作成サービスの集計クエリのトラブルシューティング](fleet-indexing-troubleshooting.md#aggregation-troubleshooting)」を参照してください。
+ **カスタムフィールドの型**

カスタムフィールドのタイプには、次の値がサポートされています: `Number`、`String`、`Boolean`

# モノのインデックス作成の管理
<a name="managing-index"></a>

すべてのモノに対して作成されるインデックスは `AWS_Things` です。次のデータソースからインデックス化する対象を制御できます。[AWS IoT レジストリ](thing-registry.md)データ、[AWS IoT デバイスシャドウ](iot-device-shadows.md)データ、[AWS IoT 接続性](life-cycle-events.md)データ、および [AWS IoT Device Defender](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/what-is-device-defender.html) 違反データ。

**Topics**
+ [モノのインデックス作成の有効化](#enable-index)
+ [モノのインデックスの説明](#describe-index)
+ [モノのインデックスのクエリ](#search-index)
+ [制約と制限](#index-limitations)
+ [Authorization](#query-auth)

## モノのインデックス作成の有効化
<a name="enable-index"></a>

[update-indexing-configuration](https://docs.aws.amazon.com/cli/latest/reference/iot/update-indexing-configuration.html) CLI コマンドまたは [UpdateIndexingConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateIndexingConfiguration.html) API オペレーションを使用して、`AWS_Things` インデックスを作成し、その設定を管理できます。`--thing-indexing-configuration` (`thingIndexingConfiguration`) パラメータを使用すると、インデックス化されるデータの種類 (レジストリ、シャドウ、デバイスの接続性データ、Device Defender 違反のデータなど) を管理できます。

`--thing-indexing-configuration` パラメータは、次の構造を持つ文字列を取ります。

```
{
  "thingIndexingMode": "OFF"|"REGISTRY"|"REGISTRY_AND_SHADOW",
  "thingConnectivityIndexingMode": "OFF"|"STATUS",
  "deviceDefenderIndexingMode": "OFF"|"VIOLATIONS",
  "namedShadowIndexingMode": "OFF"|"ON",
  "managedFields": [
    {
      "name": "string",
      "type": "Number"|"String"|"Boolean"
    }, 
    ...
  ], 
  "customFields": [
    { 
      "name": "string",
      "type": "Number"|"String"|"Boolean" 
    },
    ...
  ],
  "filter": {
     "namedShadowNames": [ "string" ],
     "geoLocations": [
        {
            "name": "String",
            "order": "LonLat|LatLon"
        }
    ]
  }
}
```

### モノのインデックス作成モード
<a name="index-mode"></a>

インデックス作成設定では、デバイスのインデックス作成と検索を行うデータソースに応じて、さまざまなモノのインデックス作成モードを指定できます。
+ `thingIndexingMode`: レジストリまたはシャドウがインデックス作成されているかどうかを制御します。`thingIndexingMode` が `OFF` に設定されている場合、モノのインデックス作成は無効になります。
+ `thingConnectivityIndexingMode`: 属性は、モノの接続性データにインデックスを付けるかどうかを指定します。
+ `deviceDefenderIndexingMode`: 属性は、Device Defender 違反のデータにインデックスを付けるかどうかを指定します。
+ `namedShadowIndexingMode`: 属性は、名前付きシャドウデータにインデックスを付けるかどうかを指定します。フリートのインデックス作成設定に追加する名前付きシャドウを選択するには、`namedShadowIndexingMode` を `ON` に設定して、[https://docs.aws.amazon.com//iot/latest/apireference/API_IndexingFilter.html](https://docs.aws.amazon.com//iot/latest/apireference/API_IndexingFilter.html) で名前付きのシャドウ名を指定します。

次の表は、各インデックス作成モードの有効な値と、各値に対してインデックス化されたデータソースを示しています。


****  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/managing-index.html)

### 管理対象フィールドとカスタムフィールド
<a name="managed-custom-field"></a>

**管理対象フィールド**

マネージドフィールドには、モノ、モノのグループ、デバイスシャドウ、デバイス接続、Device Defender 違反に関連するデータが含まれます。 は、マネージドフィールドのデータ型 AWS IoT を定義します。 AWS IoT  モノを作成するときに、各管理対象フィールドの値を指定します。例えば、モノの名前、モノのグループ、モノの説明はすべて管理対象フィールドです。フリートインデックス作成では、指定したインデックス作成モードに基づいて、管理対象フィールドがインデックス化されます。`customFields` では、管理対象フィールドを変更したり表示することはできません。

**カスタムフィールド**

カスタムフィールドを作成してインデックスを作成し、属性、Device Shadow データ、および Device Defender 違反のデータを集計できます。`customFields` 属性は、フィールド名とデータ型のペアのリストです。データ型に基づいて、集計クエリを実行できます。選択するインデックス作成モードは、`customFields` で指定できるフィールドに影響します。例えば、`REGISTRY` インデックス作成モードを指定した場合、Thing Shadow からカスタムフィールドを指定することはできません。[update-indexing-configuration](https://docs.aws.amazon.com/cli/latest/reference/iot/update-indexing-configuration.html) CLI コマンドを使用して、カスタムフィールドを作成または更新できます ([Updating indexing configuration examples](#update-index-examples) のコマンド例を参照してください)。詳細については、「[Custom fields](managing-fleet-index.md#custom-field)」を参照してください。

### インデックス作成フィルター
<a name="thing-indexing-filter"></a>

インデックス作成フィルターは、名前付きシャドウと位置情報データに追加の選択を提供します。

**`namedShadowNames`**

フリートのインデックス作成設定に追加する名前付きシャドウを追加するには、`namedShadowIndexingMode` を `ON` に設定して、`namedShadowNames` フィルターで名前付きのシャドウ名を指定します。

**例**

```
"filter": {
     "namedShadowNames": [ "namedShadow1", "namedShadow2" ]
}
```

`geoLocations`

フリートのインデックス作成設定に位置情報データを追加するには: 
+ 位置情報データがクラシック (名前なし) シャドウに保存されている場合は、`thingIndexingMode` を REGISTRY\$1AND\$1SHADOW に設定し、`geoLocations` フィルターで位置情報データを指定します。

  次のフィルター例では、クラシック (名前なし) シャドウ内の geoLocation オブジェクトを指定します。

  ```
  "filter": {
       "geoLocations": [
          {
              "name": "shadow.reported.location",
              "order": "LonLat"
          }
       ]
    }
  ```
+ 位置情報データが名前付きシャドウに保存されている場合は、`namedShadowIndexingMode` を ON に設定し、シャドウ名を `namedShadowNames` フィルターに追加し、位置情報データを `geoLocations` フィルターに指定します。

  以下のフィルター例では、名前付きシャドウ (`nameShadow1`) 内の geoLocation オブジェクトを指定します。

  ```
  "filter": {
       "namedShadowNames": [ "namedShadow1" ],
       "geoLocations": [
          {
              "name": "shadow.name.namedShadow1.reported.location",
              "order": "LonLat"
          }
       ]
    }
  ```

詳細については、「*AWS IoT** API リファレンス*」の「[IndexingFilter](https://docs.aws.amazon.com/iot/latest/apireference/API_IndexingFilter.html)」を参照してください。

### インデックス作成の設定例を更新する
<a name="update-index-examples"></a>

インデックス作成設定を更新するには、 **update-indexing-configuration** CLI コマンド を使用します AWS IoT 。次の例では、**update-indexing-configuration** の使用方法を示します。

短い構文:

```
aws iot update-indexing-configuration --thing-indexing-configuration \
'thingIndexingMode=REGISTRY_AND_SHADOW, deviceDefenderIndexingMode=VIOLATIONS, 
namedShadowIndexingMode=ON,filter={namedShadowNames=[thing1shadow]}, thingConnectivityIndexingMode=STATUS,
customFields=[{name=attributes.version,type=Number},
{name=shadow.name.thing1shadow.desired.DefaultDesired, type=String}, {name=shadow.desired.power, type=Boolean}, 
{name=deviceDefender.securityProfile1.NUMBER_VALUE_BEHAVIOR.lastViolationValue.number, type=Number}]'
```

JSON 構文:

```
aws iot update-indexing-configuration --cli-input-json \ '{
          "thingIndexingConfiguration": { "thingIndexingMode": "REGISTRY_AND_SHADOW",
          "thingConnectivityIndexingMode": "STATUS", 
          "deviceDefenderIndexingMode": "VIOLATIONS",
          "namedShadowIndexingMode": "ON",
          "filter": { "namedShadowNames": ["thing1shadow"]},
          "customFields": [ { "name": "shadow.desired.power", "type": "Boolean" }, 
          {"name": "attributes.version", "type": "Number"}, 
          {"name": "shadow.name.thing1shadow.desired.DefaultDesired", "type": "String"}, 
          {"name": "deviceDefender.securityProfile1.NUMBER_VALUE_BEHAVIOR.lastViolationValue.number", "type": Number} ] } }'
```

このコマンドでは、出力が生成されません。

モノのインデックスのステータスを確認するには、`describe-index` CLI コマンドを実行します。

```
aws iot describe-index --index-name "AWS_Things"
```

`describe-index` コマンドの出力は以下のようになります。

```
{
    "indexName": "AWS_Things",
    "indexStatus": "ACTIVE",
    "schema": "MULTI_INDEXING_MODE"
}
```

**注記**  
フリートインデックス作成でのフリートインデックスの更新には、しばらく時間がかかる場合があります。使用する前に `indexStatus` が ACTIVE になるまで待つことをお勧めします。スキーマフィールドには、設定したデータソースに応じて異なる値を指定できます。詳細については、「[モノのインデックスの説明](#describe-index)」を参照してください。

モノのインデックス設定についての詳細を取得するには、`get-indexing-configuration` CLI コマンドを実行します。

```
aws iot get-indexing-configuration
```

`get-indexing-configuration` コマンドの出力は以下のようになります。

```
{
    "thingIndexingConfiguration": {
        "thingIndexingMode": "REGISTRY_AND_SHADOW",
        "thingConnectivityIndexingMode": "STATUS",
        "deviceDefenderIndexingMode": "VIOLATIONS",
        "namedShadowIndexingMode": "ON",
        "managedFields": [
            {
                "name": "connectivity.disconnectReason",
                "type": "String"
            },
            {
                "name": "registry.version",
                "type": "Number"
            },
            {
                "name": "thingName",
                "type": "String"
            },
            {
                "name": "deviceDefender.violationCount",
                "type": "Number"
            },
            {
                "name": "shadow.hasDelta",
                "type": "Boolean"
            },
            {
                "name": "shadow.name.*.version",
                "type": "Number"
            },
            {
                "name": "shadow.version",
                "type": "Number"
            },
            {
                "name": "connectivity.version",
                "type": "Number"
            },
            {
                "name": "connectivity.timestamp",
                "type": "Number"
            },
            {
                "name": "shadow.name.*.hasDelta",
                "type": "Boolean"
            },
            {
                "name": "registry.thingTypeName",
                "type": "String"
            },
            {
                "name": "thingId",
                "type": "String"
            },
            {
                "name": "connectivity.connected",
                "type": "Boolean"
            },
            {
                "name": "registry.thingGroupNames",
                "type": "String"
            }
        ],
        "customFields": [
            {
                "name": "shadow.name.thing1shadow.desired.DefaultDesired",
                "type": "String"
            },

            {
                "name": "deviceDefender.securityProfile1.NUMBER_VALUE_BEHAVIOR.lastViolationValue.number",
                "type": "Number"
            },
            {
                "name": "shadow.desired.power",
                "type": "Boolean"
            },
            {
                "name": "attributes.version",
                "type": "Number"
            }
        ], 
        "filter": {
              "namedShadowNames": [
                  "thing1shadow"
              ]
          }
      },
    "thingGroupIndexingConfiguration": {
        "thingGroupIndexingMode": "OFF"
    }
}
```

カスタムフィールドを更新するには、`update-indexing-configuration` コマンドを実行します。例は次のとおりです。

```
aws iot update-indexing-configuration --thing-indexing-configuration
          'thingIndexingMode=REGISTRY_AND_SHADOW,customFields=[{name=attributes.version,type=Number},{name=attributes.color,type=String},{name=shadow.desired.power,type=Boolean},{name=shadow.desired.intensity,type=Number}]'
```

このコマンドは、インデックス作成設定 `shadow.desired.intensity` に追加されました。

**注記**  
カスタムフィールドのインデックス作成設定が更新されると、すべての既存のカスタムフィールドが上書きされます。**update-indexing-configuration** を呼び出すときは、必ずすべてのカスタムフィールドを指定してください。

インデックスを再構築したら、新しく追加したフィールドに集計クエリを使用して、レジストリデータ、シャドウデータ、およびモノの接続ステータスについてのデータを検索できます。

インデックス作成モードを変更する場合、新しいインデックス作成モードを使用して、すべてのカスタムフィールドが有効であることを確認してください。例えば、`shadow.desired.temperature` というカスタムフィールドを使用して `REGISTRY_AND_SHADOW` モードを開始する場合、インデックス作成モードを `REGISTRY` に変更する前に `shadow.desired.temperature` カスタムフィールドを削除する必要があります。インデックス作成設定にインデックス作成モードによってインデックス化されていないカスタムフィールドが含まれている場合、更新は失敗します。

## モノのインデックスの説明
<a name="describe-index"></a>

次のコマンドは、**describe-index** CLI コマンドを使用して現在のモノのインデックスのステータスを取得する方法を示しています。

```
aws iot describe-index --index-name "AWS_Things"
```

コマンドのレスポンスは次のようになります。

```
{
    "indexName": "AWS_Things", 
    "indexStatus": "BUILDING", 
    "schema": "REGISTRY_AND_SHADOW_AND_CONNECTIVITY_STATUS"
}
```

初めてフリートインデックスを作成すると、 はインデックス AWS IoT を構築します。`indexStatus` が `BUILDING` の状態の場合、インデックスに対してクエリを実行することはできません。モノのインデックスの `schema` はどのタイプのデータのインデックスが作成されるかを示します (`REGISTRY_AND_SHADOW_AND_CONNECTIVITY_STATUS`)。

インデックスの設定を変更すると、インデックスが再構築されます。このプロセス中の `indexStatus` は `REBUILDING` です。再構築中に､モノのインデックスのデータに対してクエリを実行できます。たとえば、インデックスの再構築中にインデックス設定を `REGISTRY` から `REGISTRY_AND_SHADOW` に変更した場合、最新の更新を含むレジストリデータのクエリを行うことができます。ただし、再構築が完了するまで Shadow データのクエリを行うことはできません。インデックスの作成または再構築に要する時間は、データの量によって異なります。

スキーマフィールドには、設定したデータソースに応じて、さまざまな値を表示できます。次の表には、さまざまなスキーマの値と対応する説明が記載されています。


| Schema | 説明 | 
| --- | --- | 
| VOFF | データソースが設定またはインデックス化されていません。 | 
| REGISTRY | レジストリデータがインデックス化されます。 | 
| REGISTRY\$1AND\$1SHADOW | レジストリデータおよび名前のない (クラシック) シャドウデータがインデックス化されます。 | 
| REGISTRY\$1AND\$1CONNECTIVITY | レジストリデータおよび接続性データがインデックス化されます。 | 
| REGISTRY\$1AND\$1SHADOW\$1AND\$1CONNECTIVITY\$1STATUS | レジストリデータ、名前のない (クラシック) シャドウデータ、および接続性データがインデックス化されます。 | 
| MULTI\$1INDEXING\$1MODE | レジストリ、名前のない (クラシック) シャドウ、または接続性データに加えて、名前付きシャドウまたは Device Defender 違反のデータがインデックス化されます。 | 

## モノのインデックスのクエリ
<a name="search-index"></a>

インデックスのデータにクエリを実行するには、CLI の **search-index** コマンドを使用します。

```
aws iot search-index --index-name "AWS_Things" --query-string
          "thingName:mything*"
```

```
{  
    "things":[{  
         "thingName":"mything1",
         "thingGroupNames":[  
            "mygroup1"
         ],
         "thingId":"a4b9f759-b0f2-4857-8a4b-967745ed9f4e",
         "attributes":{  
            "attribute1":"abc"
         },
         "connectivity": { 
            "connected":false,
            "timestamp":1556649874716,
            "disconnectReason": "CONNECTION_LOST"
         }         
    },
    {  
        "thingName":"mything2",
        "thingTypeName":"MyThingType",
        "thingGroupNames":[  
            "mygroup1",
            "mygroup2"
        ],
        "thingId":"01014ef9-e97e-44c6-985a-d0b06924f2af",
        "attributes":{  
            "model":"1.2",
            "country":"usa"
        },
        "shadow":{  
            "desired":{  
                "location":"new york",
                "myvalues":[3, 4, 5]
            },
            "reported":{  
                "location":"new york",
                "myvalues":[1, 2, 3],
                "stats":{  
                    "battery":78
                }
            },
            "metadata":{  
                 "desired":{  
                       "location":{  
                            "timestamp":123456789
                        },
                       "myvalues":{  
                             "timestamp":123456789
                       }
                  },
                  "reported":{  
                        "location":{  
                             "timestamp":34535454
                         },
                        "myvalues":{  
                             "timestamp":34535454
                        },
                        "stats":{  
                             "battery":{  
                                   "timestamp":34535454
                             }
                        }
                 }
            },
            "version":10,
            "timestamp":34535454
        },
        "connectivity": { 
            "connected":true,
            "timestamp":1556649855046
        }        
    }],
    "nextToken":"AQFCuvk7zZ3D9pOYMbFCeHbdZ+h=G"
}
```

この JSON レスポンスでは、`"connectivity"`は、 (`thingConnectivityIndexingMode=STATUS` 設定で有効にされるように) デバイスが AWS IoT Coreに接続されているかどうかを示すブール値、タイムスタンプ、あるいは、disconnectReason をを提供します。デバイス `"mything1"` は、POSIX 時間 `1556649874716` に`CONNECTION_LOST`のために切断されました (`false`)。切断理由の詳細については、「[ライフサイクルイベント](life-cycle-events.md)」を参照してください。

```
"connectivity": { 
    "connected":false,
    "timestamp":1556649874716, 
    "disconnectReason": "CONNECTION_LOST"
}
```

デバイス`"mything2"` は、POSIX 時間 `1556649855046`に接続されました (`true`)。

```
"connectivity": { 
    "connected":true,
    "timestamp":1556649855046
}
```

タイムスタンプは、エポックからの経過をミリ秒単位で提供されるため、`1556649855046` は、2019 年 4 月 30 日火曜日の午後 6 時 44 分 15. 046秒 (UTC) を表します。

**重要**  
デバイスが約 1 時間切断されていた場合、`"timestamp"`値と接続ステータスの`"disconnectReason"`値が無くなっている可能性があります。

## 制約と制限
<a name="index-limitations"></a>

以下は、`AWS_Things` の制約と制限です。

**複合型のシャドウフィールド**  
シャドウフィールドは、シンプルな型 (配列を含まない JSON オブジェクトやシンプルな型で全体が構成されている配列など) である場合のみインデックス化されます。「シンプルな型」とは、文字列、数値、または、`true` あるいは `false` を意味します。例えば、次のシャドウステータスについては、フィールド `"palette"` の値は復号型の項目を含む配列であるためインデックス化されません。`"colors"` フィールドの値は、配列の各値が文字列であるため、インデックス化されます。  

```
{
    "state": {
        "reported": {
            "switched": "ON",
            "colors": [ "RED", "GREEN", "BLUE" ],
            "palette": [
                {
                    "name": "RED", 
                    "intensity": 124
                },
                {
                    "name": "GREEN", 
                    "intensity": 68
                },
                {
                    "name": "BLUE", 
                    "intensity": 201
                }
            ]
        }
    }
}
```

**ネストされたシャドウフィールドの名前**  
ネストされたシャドウフィールドの名前は、ピリオド (.) で区切られた文字列として保存されます。たとえば、シャドウドキュメントがあるとします。  

```
{
  "state": {
    "desired": {
      "one": {
        "two": {
          "three": "v2"
        }
      }
    }    
  }
}
```
フィールドの名前 `three` は `desired.one.two.three` として保存されます。また、シャドウドキュメントがある場合、次のように保存されます。  

```
{
  "state": {
    "desired": {
      "one.two.three": "v2"
    }    
  }
}
```
両方が `shadow.desired.one.two.three:v2` のクエリに一致します。ベストプラクティスとして、シャドウフィールドの名前にはピリオドを使用しないでください。

**シャドウメタデータ**  
シャドウのメタデータセクションのフィールドはインデックス化されますが、これが行われるのは、シャドウの `"state"` セクションの対応するフィールドがインデックス化される場合のみです。(前の例では、シャドウのメタデータセクションの `"palette"` フィールドもインデックス化されません。)

**未登録のデバイス**  
フリートインデックスは、接続 `clientId` が[レジストリ](https://docs.aws.amazon.com//iot/latest/developerguide/thing-registry.html)に登録されているモノの `thingName` と同じであるデバイスの接続ステータスをインデックス化します。

**未登録シャドウ**  
[UpdateThingShadow](https://docs.aws.amazon.com/iot/latest/apireference/API_iotdata_UpdateThingShadow.html) を使用して AWS IoT 、アカウントに登録されていないモノの名前を使用してシャドウを作成する場合、このシャドウのフィールドはインデックス化されません。これは、名前のないクラシックシャドウと名前付きシャドウの両方に適用されます。

**数値**  
レジストリまたはシャドウデータがサービスによって数値として認識される場合、そのようにインデックス化されます。数値の範囲および比較演算子を含むクエリを作成できます (例: `"attribute.foo<5"` または `"shadow.reported.foo:[75 TO 80]"`)。数値として認識されるには、データの値が有効なリテラルタイプの JSON 番号である必要があります。値は、範囲 -2^53...2^53-1 の整数、オプションの指数関数表記を使用した倍精度浮動小数点、またはそのような値のみを含む配列の一部である必要があります。

**Null 値**  
Null 値はインデックス化されません。

**最大値**  
集計クエリのカスタムフィールドの最大数は 5 です。  
集計クエリで要求されるパーセンタイルの最大数は 100 です。

## Authorization
<a name="query-auth"></a>

次のように、 AWS IoT ポリシーアクションでモノインデックスを Amazon リソースネーム (ARN) として指定できます。


****  

| Action | リソース | 
| --- | --- | 
|  `iot:SearchIndex`  |  インデックス ARN (例: `arn:aws:iot:your-aws-regionyour-aws-account:index/AWS_Things`)。  | 
|  `iot:DescribeIndex`  |  インデックス ARN (例: `arn:aws:iot:your-aws-region:index/AWS_Things`)。  | 

**注記**  
フリートインデックスに対してクエリを実行するアクセス許可があるユーザーは、フリート全体でモノのデータにアクセスできます。

# モノのグループのインデックス作成の管理
<a name="thinggroup-index"></a>

`AWS_ThingGroups` は、すべてのモノのグループが含まれるインデックスです。このインデックスを使用して、グループ名、説明、属性、すべての親グループ名に基づいてグループを検索することができます。

## モノのグループのインデックス作成の有効化
<a name="enable-group-index"></a>

[UpdateIndexingConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateIndexingConfiguration.html) API の `thing-group-indexing-configuration` 設定を使用して、`AWS_ThingGroups` インデックスを作成し、その設定を管理できます。[GetIndexingConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_GetIndexingConfiguration.html) API を使用して、現在のインデックス作成設定を取得できます。

モノのグループのインデックス作成設定を更新するには、**update-indexing-configuration** CLI コマンドを使用します。

```
aws iot update-indexing-configuration --thing-group-indexing-configuration thingGroupIndexingMode=ON
```

次のように、1 つのコマンドでモノとモノのグループのインデックス作成の両方の設定を更新することもできます。

```
aws iot update-indexing-configuration --thing-indexing-configuration thingIndexingMode=REGISTRY --thing-group-indexing-configuration thingGroupIndexingMode=ON
```

次に示すのは、`thingGroupIndexingMode` の有効な値です。

VOFF  
インデックスの作成/インデックスの削除がありません。

ON  
`AWS_ThingGroups` インデックスを作成または設定します。

現在のモノおよびモノのグループのインデックス作成設定を取得するには、**get-indexing-configuration** CLI コマンドを実行します。

```
aws iot get-indexing-configuration
```

コマンドのレスポンスは次のようになります。

```
{
   "thingGroupIndexingConfiguration": {
        "thingGroupIndexingMode": "ON"
    }
}
```

## グループインデックスの説明
<a name="describe-group-index"></a>

現在の `AWS_ThingGroups` インデックスのステータスを取得するには、**describe-index** CLI コマンドを使用します。

```
aws iot describe-index --index-name "AWS_ThingGroups"
```

コマンドのレスポンスは次のようになります。

```
{
   "indexStatus": "ACTIVE", 
   "indexName": "AWS_ThingGroups", 
   "schema": "THING_GROUPS"
}
```

 AWS IoT は、インデックスを初めて作成するときにインデックスを構築します。`indexStatus` が `BUILDING` の場合、インデックスに対してクエリを実行することはできません。

## モノのグループのインデックスのクエリ
<a name="search-group-index"></a>

インデックスのデータにクエリを実行するには、**search-index** CLI コマンドを使用します。

```
aws iot search-index --index-name "AWS_ThingGroups" --query-string "thingGroupName:mythinggroup*"
```

## Authorization
<a name="query-thinggroup-auth"></a>

次のように、 AWS IoT ポリシーアクションでモノのグループのインデックスをリソース ARN として指定できます。


****  

| Action | リソース | 
| --- | --- | 
|  `iot:SearchIndex`  |  インデックス ARN (例: `arn:aws:iot:your-aws-region:index/AWS_ThingGroups`)。  | 
|  `iot:DescribeIndex`  |  インデックス ARN (例: `arn:aws:iot:your-aws-region:index/AWS_ThingGroups`)。  | 

# デバイス接続ステータスのクエリ
<a name="device-connectivity-status"></a>

AWS IoT フリートインデックス作成は個々のデバイス接続クエリをサポートしているため、特定のデバイスの接続ステータスと関連メタデータを効率的に取得できます。この機能は、既存のフリート全体のインデックス作成およびクエリ機能を補完します。

## 仕組み
<a name="w2aac37c21b5"></a>

デバイス接続クエリのサポートは、最適化された単一デバイス接続ステータスの取得に使用することができます。この API は、最新のデバイス固有の接続情報への低レイテンシーで高スループットのアクセスを提供します。接続インデックス作成を有効にすると、標準クエリとして課金されるこのクエリ API にアクセスできます。詳細については、「[AWS IoT Device Management 料金表](https://aws.amazon.com/iot-device-management/pricing/#:~:text=Search%20queries%20(per%2010%2C000%20queries))」を参照してください。

## 機能
<a name="w2aac37c21b7"></a>

デバイス接続クエリのサポートにより、次のことが可能になります。

1. `thingName` を使用して、特定のデバイスの現在の接続状態 (接続または切断) をクエリする。

1. 以下を含む追加の接続メタデータを取得する。

   1. 切断の理由

   1. 最新の接続または切断イベントのタイムスタンプ。

**注記**  
フリートインデックスは、接続 `clientId` が[レジストリ](https://docs.aws.amazon.com/iot/latest/developerguide/thing-registry.html)に登録されているモノの `thingName` と同じであるデバイスの接続ステータスをインデックス化します。

## 利点
<a name="w2aac37c21b9"></a>

1. **低レイテンシー:** 最新のデバイス接続状態を反映し、IoT Core からの接続状態の変化を反映するための低レイテンシーを提供します。IoT Core は、デバイスから切断リクエストを受信すると即時に、または切断リクエストを送信せずにデバイスが切断された場合に、デバイスを切断状態と見なします。IoT Core は、クライアントが切断されたと判断されるまで、設定されたキープアライブ時間の 1.5 倍を待機します。接続ステータス API は、通常 IoT Core がデバイスの接続状態の変更を判定してから 1 秒以内にこれらの変更を反映します。

1. **高スループット:** デフォルトでは 350 トランザクション/秒 (TPS) をサポートしており、リクエストに応じてより高い値に調整できます。

1. **データ保持: **フリートインデックス作成 (FI) ConnectivityIndexing モードが有効で、モノが削除されていない場合に、イベントデータを無期限に保存します。接続インデックス作成を無効にすると、レコードは保持されません。

**注記**  
この API の起動前に接続ステータスインデックス作成が有効になっている場合、フリートインデックス作成は API の起動後に接続ステータスの変更の追跡を開始し、それらの変更に基づいて更新されたステータスを反映します。

## 前提条件
<a name="w2aac37c21c11"></a>

デバイス接続クエリのサポートを使用するには:

1. [AWS アカウントをセットアップする](https://docs.aws.amazon.com/iot/latest/developerguide/setting-up.html)

1. 任意のリージョン AWS IoT Core の にデバイスをオンボードして登録する

1. 接続インデックス作成を使用して、[フリートインデックス作成を有効にする](https://docs.aws.amazon.com/iot/latest/developerguide/managing-index.html)

**注記**  
接続インデックス作成が既に有効になっている場合は、追加のセットアップは必要ありません。

詳細な手順については、「[AWS IoT デベロッパーガイド](https://docs.aws.amazon.com/iot/latest/developerguide/setting-up.html)」を参照してください。

## 例
<a name="w2aac37c21c13"></a>

```
aws iot get-thing-connectivity-data --thing-name myThingName
```

```
{
   "connected": true,
   "disconnectReason": "NONE",
   "thingName": "myThingName",
   "timestamp": "2024-12-19T10:00:00.000000-08:00"
}
```
+ `thingName`: リクエストで示されるデバイスの名前。これは、 AWS IoT Coreへの接続に使用される clientId とも一致します。
+ `disconnectReason`: 切断の理由。接続されたデバイスでは NONE になります。
+ `connected`: ブール値の true は、このデバイスが現在接続されていることを示します。
+ `timestamp`: デバイスの直近の切断をミリ秒単位で表すタイムスタンプ。

```
aws iot get-thing-connectivity-data --thing-name myThingName
```

```
{
   "connected": false,
   "disconnectReason": "CLIENT_INITIATED_DISCONNECT",
   "thingName": "myThingName",
   "timestamp": "2024-12-19T10:30:00.000000-08:00"
}
```
+ `thingName`: リクエストで示されるデバイスの名前。これは、 AWS IoT Coreへの接続に使用される clientId とも一致します。
+ `disconnectReason`: 切断の理由は CLIENT\$1INITIATED\$1DISCONNECT であり、クライアントが切断 AWS IoT Core することを示すことを示します。
+ `connected`: ブール値の false は、このデバイスが現在切断されていることを示します。
+ `timestamp`: デバイスの直近の切断をミリ秒単位で表すタイムスタンプ。

```
aws iot get-thing-connectivity-data --thing-name neverConnectedThing
```

```
{
   "connected": false,
   "disconnectReason": "UNKNOWN",
   "thingName": "neverConnectedThing"
}
```
+ `thingName`: リクエストで示されるデバイスの名前。これは、 AWS IoT Coreへの接続に使用される clientId とも一致します。
+ `disconnectReason`: 切断の理由。一度も接続されていないデバイスの場合、またはフリートインデックス作成に最後の切断理由が保存されていないデバイスの場合、「UNKNOWN」になります。
+ `connected`: ブール値の false は、このデバイスが現在切断されていることを示します。
+ `timestamp`: 一度も接続されていないデバイスの場合、またはフリートインデックス作成に最後のタイムスタンプが保存されていないデバイスの場合は、タイムスタンプは返されません。

# 集計データのクエリ
<a name="index-aggregate"></a>

AWS IoT には`GetStatistics`、デバイスフリートで集計データを検索`GetBucketsAggregation`できる 4 つの APIs (`GetCardinality`、`GetPercentiles`、、) が用意されています。

**注記**  
 集約 API の値が不足しているか、予期しない値になっているという問題については、[フリートインデックス作成トラブルシューティングガイド](fleet-indexing-troubleshooting.md)を参照してください。

## GetStatistics
<a name="get-statistics"></a>

[GetStatistics](https://docs.aws.amazon.com/iot/latest/apireference/API_GetStatistics.html) API および **get-statistics** CLI コマンドは、指定された集計フィールドのカウント、平均、合計、最小、最大、平方和、分散、および標準偏差を返します。

**get-statistics** CLI コマンドでは、以下のパラメータを使用します。

`index-name`  
検索を実行するインデックスの名前。デフォルト値は `AWS_Things` です。

`query-string`  
インデックスを検索するために使用されるクエリ。を指定`"*"`して、 内のすべてのインデックス付きモノの数を取得できます AWS アカウント。

`aggregationField`  
(オプション) 集計するフィールド。このフィールドは、**update-indexing-configuration** を呼び出すときに定義される管理フィールドまたはカスタムフィールドである必要があります。集計フィールドを指定しない場合、`registry.version` が集計フィールドとして使用されます。

`query-version`  
使用するクエリのバージョン。デフォルト値は `2017-09-30` です。

集計フィールドのタイプは、返される統計に影響します。

### 文字列値を使用した GetStatistics
<a name="string-aggregation"></a>

文字列フィールドを集計する場合、`GetStatistics` を呼び出すと、クエリに一致する属性を持つデバイスの数が返されます。以下に例を示します。

```
aws iot get-statistics --aggregation-field 'attributes.stringAttribute'
            --query-string '*'
```

このコマンドは、`stringAttribute` という名前の属性を含むデバイスの数を返します。

```
{
  "statistics": {
    "count": 3
  }
}
```

### ブール値を使用した GetStatistics
<a name="boolean-aggregation"></a>

ブール値の集計フィールドを使用して `GetStatistics` を呼び出すと、次のようになります。
+ AVERAGE は、クエリに一致するデバイスの割合です。
+ MINIMUM は、次の規則に従って 0 または 1 です。
  + 集計フィールドのすべての値が `false` の場合、MINIMUM は 0 です。
  + 集計フィールドのすべての値が `true` の場合、MINIMUM は 1 です。
  + 集計フィールドの値が `false` と `true` の混合である場合、MINIMUM は 0 です。
+ MAXIMUM は、次の規則に従って 0 または 1 です。
  + 集計フィールドのすべての値が `false` の場合、MAXIMUM は 0 です。
  + 集計フィールドのすべての値が `true` の場合、MAXIMUM は 1 です。
  + 集計フィールドの値が `false` と `true` の混合である場合、MAXIMUM は 1 です。
+ SUM は、ブール値に相当する整数の合計です。
+ COUNT は、クエリ文字列条件に一致し、有効な集計フィールド値を含むモノの数です。

### 数値を使用した GetStatistics
<a name="numerical-aggregation"></a>

`GetStatistics` を呼び出してタイプ `Number` の集計フィールドを指定すると、`GetStatistics` は次の値を返します。

数  
クエリ文字列条件に一致し、有効な集計フィールドの値を含むモモノの数。

平均  
クエリに一致する数値の平均。

sum  
クエリに一致する数値の合計。

minimum  
クエリに一致する数値のうち最小の値。

maximum  
クエリに一致する数値のうち最大値。

sumOfSquares  
クエリに一致する数値の二乗の合計。

分散  
クエリに一致する数値の分散。値の集合の分散は、集合の平均値からの各値の差の二乗の平均です。

stdDeviation  
クエリに一致する数値の標準偏差。値のセットの標準偏差は、値がどの程度広がっているかを示す尺度です。

次の例は、数値カスタムフィールドを使用して **get-statistics** を呼び出す方法を示しています。

```
aws iot get-statistics --aggregation-field 'attributes.numericAttribute2'
            --query-string '*'
```

```
{
  "statistics": {
    "count": 3,
    "average": 33.333333333333336,
    "sum": 100.0,
    "minimum": -125.0,
    "maximum": 150.0,
    "sumOfSquares": 43750.0,
    "variance": 13472.22222222222,
    "stdDeviation": 116.06990230986766
  }
}
```

数値集計フィールドの場合、フィールド値が最大倍精度値を超えた場合、統計値は空です。

## GetCardinality
<a name="get-cardinality"></a>

[GetCardinality](https://docs.aws.amazon.com/iot/latest/apireference/API_GetCardinality.html) API および **get-cardinality** CLI コマンドは、クエリに一致する一意の値の概算数を返します。たとえば、バッテリー残量が 50% 未満のデバイスの数を調べるとします。

```
aws iot get-cardinality --index-name AWS_Things --query-string "batterylevel
          > 50" --aggregation-field "shadow.reported.batterylevel"
```

このコマンドは、バッテリー残量が 50% を超えるものの数を返します。

```
{
    "cardinality": 100
}
```

`cardinality` は、一致するフィールドがない場合でも、常に **get-cardinality** によって返されます。以下に例を示します。

```
aws iot get-cardinality --query-string "thingName:Non-existent*"
          --aggregation-field "attributes.customField_STR"
```

```
{
    "cardinality": 0
}
```

**get-cardinality** CLI コマンドでは、以下のパラメータを使用します。

`index-name`  
検索を実行するインデックスの名前。デフォルト値は `AWS_Things` です。

`query-string`  
インデックスを検索するために使用されるクエリ。を指定`"*"`して、 内のすべてのインデックス付きモノの数を取得できます AWS アカウント。

`aggregationField`  
集計するフィールド。

`query-version`  
使用するクエリのバージョン。デフォルト値は `2017-09-30` です。

## GetPercentiles
<a name="get-percentiles"></a>

[GetPercentiles](https://docs.aws.amazon.com/iot/latest/apireference/API_GetPercentiles.html) API および **get-percentiles** CLI コマンドは、クエリに一致する集計値をパーセンタイルグループにグループ化します。デフォルトのパーセンタイルのグループ化は 1,5,25,50,75,95,99 ですが、`GetPercentiles` を呼び出すときに独自のグループを指定することもできます。この関数は、指定された各パーセンタイルグループ (またはデフォルトのパーセンタイルグループ) の値を返します。パーセンタイルグループ「1」には、クエリに一致する値の約 1% に含まれる集計フィールド値が含まれます。パーセンタイルグループ「5」には、クエリに一致する値の約 5% で発生する集計フィールド値が含まれます。結果は近似値になります。クエリに一致する値が多いほど、パーセンタイルの値が正確になります。

次に、**get-percentiles** CLI コマンドを呼び出す例を示します。

```
aws iot get-percentiles --query-string "thingName:*" --aggregation-field
          "attributes.customField_NUM" --percents 10 20 30 40 50 60 70 80 90 99
```

```
{
    "percentiles": [
        {
            "value": 3.0,
            "percent": 80.0
        },
        {
            "value": 2.5999999999999996,
            "percent": 70.0
        },
        {
            "value": 3.0,
            "percent": 90.0
        },
        {
            "value": 2.0,
            "percent": 50.0
        },
        {
            "value": 2.0,
            "percent": 60.0
        },
        {
            "value": 1.0,
            "percent": 10.0
        },
        {
            "value": 2.0,
            "percent": 40.0
        },
        {
            "value": 1.0,
            "percent": 20.0
        },
        {
            "value": 1.4,
            "percent": 30.0
        },
        {
            "value": 3.0,
            "percent": 99.0
        }
    ]
}
```

次のコマンドは、一致するドキュメントがない場合に **get-percentiles** から返される出力を示します。

```
aws iot get-percentiles --query-string "thingName:Non-existent*"
          --aggregation-field "attributes.customField_NUM"
```

```
{
    "percentiles": []
}
```

**get-percentile** CLI コマンドでは、以下のパラメータを使用します。

`index-name`  
検索を実行するインデックスの名前。デフォルト値は `AWS_Things` です。

`query-string`  
インデックスを検索するために使用されるクエリ。を指定`"*"`して、 内のすべてのインデックス付きモノの数を取得できます AWS アカウント。

`aggregationField`  
集計するフィールド。`Number` 型である必要があります。

`query-version`  
使用するクエリのバージョン。デフォルト値は `2017-09-30` です。

`percents`  
(オプション) このパラメータを使用して、カスタムのパーセンタイルグループを指定できます。

## GetBucketsAggregation
<a name="get-buckets"></a>

[GetBucketsAggregation](https://docs.aws.amazon.com/iot/latest/apireference/API_GetBucketsAggregation.html)API および**get-buckets-aggregation**CLIコマンドは、バケットのリストとクエリ文字列条件に一致するものの合計数を返します。

以下の例は、get-buckets-aggregation CLIコマンドの呼び出し方を示しています。

```
aws iot get-buckets-aggregation --query-string '*' --index-name AWS_Things --aggregation-field 'shadow.reported.batterylevelpercent' --buckets-aggregation-type 'termsAggregation={maxBuckets=5}'
```

このコマンドは、次のサンプル出力を返します。

```
{
    "totalCount": 20,
    "buckets": [
        {
            "keyValue": "100",
            "count": 12
        },
        {
            "keyValue": "90",
            "count": 5
        },
        {
            "keyValue": "75",
            "count": 3
        }
    ]
}
```

get-buckets-aggregation CLI コマンドでは、以下のパラメータを使用します。

`index-name`  
検索を実行するインデックスの名前。デフォルト値は `AWS_Things` です。

`query-string`  
インデックスを検索するために使用されるクエリ。を指定`"*"`して、 内のすべてのインデックス付きモノの数を取得できます AWS アカウント。

`aggregation-field`  
集計するフィールド。

`buckets-aggregation-type`  
レスポンスの形の基本的な制御と実行するバケット集計タイプ。

## Authorization
<a name="index-aggregate-authorization"></a>

次のように、 AWS IoT ポリシーアクションでモノのグループのインデックスをリソース ARN として指定できます。


| Action | リソース | 
| --- | --- | 
|  `iot:GetStatistics`  |  インデックス ARN (例: `arn:aws:iot:your-aws-region:index/AWS_Things` または `arn:aws:iot:your-aws-region:index/AWS_ThingGroups`)。  | 

# クエリ構文
<a name="query-syntax"></a>

フリートインデックス作成では、クエリ構文を使用してクエリを指定します。

## サポートされている機能
<a name="supported-query-syntax"></a>

クエリ構文では次の機能がサポートされています。
+ 規約とフレーズ
+ フィールド検索
+ プレフィックス検索
+ 範囲検索
+ ブール演算子 `AND`、`OR`、`NOT` および `–`。検索結果から項目を除外するにはハイフンを使用します (例: `thingName:(tv* AND -plasma)`)。
+ グループ化
+ フィールドのグループ分け
+ 特殊文字のエスケープ (*╲* など)
+ 先頭ワイルドカードの使用は、1 つのクエリにつき 1 つのクエリ用語に制限されます。例えば、同一のクエリ内で、`thingName:*my` と `thingGroupNames:*echo` の両方を検索することはできません。先頭ワイルドカードを含むクエリの最大クエリ長は 100 文字です。
**注記**  
 フリートインデックス作成クエリ API の制限が 1 秒あたり 30 リクエストを超えるアカウントは、先行ワイルドカードクエリ条件を使用する場合にスロットリングの対象となります。この 30 requests-per-secondの制限は、すべてのフリートインデックス作成クエリ APIs のアカウントレベルで適用されます。

## サポートされていない 機能
<a name="unsupported-query-syntax"></a>

クエリ構文では次の機能がサポートされていません。
+ 正規表現
+ ブースト
+ ランキング
+ あいまい検索
+ 近接検索
+ ソート
+ 集約
+ 特殊文字: ```、`@`、`#`、`%`、`\`、`/`、`'`、`;`、および `,`。`,` はジオクエリでのみサポートされています。

## 注意事項
<a name="query-syntax-limitations"></a>

クエリ言語に関する注意事項がいくつかあります。
+ デフォルトの演算子は AND です。`"thingName:abc thingType:xyz"` のクエリは `"thingName:abc AND thingType:xyz"` と同等です。
+ フィールドが指定されていない場合、 はすべてのレジストリ、Device Shadow、および Device Defender フィールドで用語 AWS IoT を検索します。
+ すべてのフィールド名で大文字と小文字が区別されます。
+ 検索では大文字と小文字は区別されません｡ 単語は、Java の `Character.isWhitespace(int)` で定義されているように空白文字で区切られます。
+ Device Shadow データ (名前のないシャドウおよび名前付きシャドウ) のインデックス作成には、報告されたセクション、目的のセクション、デルタおよびメタデータのセクションが含まれます。
+ デバイスシャドウおよびレジストリのバージョンは検索不可能ですが、レスポンスには存在します｡
+ クエリの語の最大数は 12 です。
+ 特殊文字 `,` は、ジオクエリでのみサポートされています。

# モノのクエリの例
<a name="example-queries"></a>

クエリ構文を使用して、クエリ文字列にクエリを指定します。クエリは、[https://docs.aws.amazon.com/iot/latest/apireference/API_SearchIndex.html](https://docs.aws.amazon.com/iot/latest/apireference/API_SearchIndex.html) API に渡されます。次の表に、クエリ文字列の例を示します。


| クエリ文字列 | 結果 | 
| --- | --- | 
|  abc  |  レジストリ、シャドウ (従来の名前のないシャドウと名前付きシャドウ)、またはデバイスディフェンダー違反フィールドで「abc」をクエリします。  | 
|  thingName:myThingName  |  「myThingName」という名前のモノをクエリします｡  | 
|  thingName:my\$1  |  「my」で始まる名前のモノをクエリします｡  | 
|  thingName:\$1my  |  「my」で終わる名前のモノをクエリします｡ 先頭ワイルドカードの使用は、1 つのクエリにつき 1 つのクエリ用語に制限されます。先頭ワイルドカードを含むクエリの最大クエリ長は 100 文字です。  | 
|  thingName:\$1my\$1  |  部分文字列「my」を含むモノをクエリします。先頭ワイルドカードの使用は、1 つのクエリにつき 1 つのクエリ用語に制限されます。先頭ワイルドカードを含むクエリの最大クエリ長は 100 文字です。  | 
|  thingName:ab?  |  「aba」、「abb」、「abc」など、名前に「ab」と追加で 1 つの文字を加えたモノをクエリします。  | 
|  thingTypeName:aa  |  「aa」タイプに関連付けられているモノをクエリします。  | 
|  thingGroupNames:a  | 親モノグループまたは請求グループ名「a」を持つモノのクエリ。 | 
|  thingGroupNames:a\$1  | パターン「a\$1」に一致する親モノグループまたは請求グループ名を持つモノのクエリ。 | 
|  attributes.myAttribute:75  |  値が 75 の「myAttribute」という属性を持つモノをクエリします。  | 
|  attributes.myAttribute:[75 TO 80]  |  値が数値範囲 (75—80) 内にある「myAttribute」という属性を持つモノをクエリします。  | 
|  attributes.myAttribute:\$175 TO 80]  |  値が数値範囲 (>75 および <=80) 内にある「myAttribute」という属性を持つモノをクエリします。  | 
|  attributes.serialNumber:["abcd" TO "abcf"]  |  値が英数字の文字列範囲内にある「serialNumber」という属性を持つモノをクエリします。このクエリは、値が「abcd」、「abce」、または「abcf」の「serialNumber」属性を持つモノを返します。  | 
|  attributes.myAttribute:i\$1t |  値が「i」で、その後に任意の文字数、そして「t」が続く「myAttribute」という属性を持つモノをクエリします。  | 
|  attributes.attr1:abc AND attributes.attr2<5 NOT attributes.attr3>10  |  ブール式を使用して､用語の組み合わせとなるモノをクエリします。このクエリは、値が「abc」の属性「attr1」、値が 5 未満の属性「attr2」､および値が 10 以下の属性「attr3」のモノを返します。  | 
|  shadow.hasDelta:true  |  デルタ要素を持つ名前のないシャドウを持つモノをクエリします。  | 
|  NOT attributes.model:legacy  |  「model」という属性が「legacy」でないモノをクエリします。  | 
|  shadow.reported.stats.battery:\$170 TO 100\$1 (v2 OR v3) NOT attributes.model:legacy  |  以下を持つモノをクエリします。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/example-queries.html)  | 
|  shadow.reported.myvalues:2  |  Shadow の reported セクションの `myvalues` 配列の値に 2 が含まれているモノをクエリします｡  | 
|  shadow.reported.location:\$1 NOT shadow.desired.stats.battery:\$1  |  以下を持つモノをクエリします。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/example-queries.html)  | 
|  shadow.name.<shadowName>.hasDelta:true  |  指定された名前とデルタ要素のシャドウを持つモノをクエリします。  | 
|  shadow.name.<shadowName>.desired.filament:\$1  |  指定された名前および目的のフィラメントプロパティのシャドウを持つモノをクエリします。  | 
|  shadow.name.<shadowName>.reported.location:\$1  |  名前付きシャドウの報告されたセクションに `location` 属性が存在し、指定された名前のシャドウを持つモノをクエリします。  | 
|  connectivity.connected:true  |  接続されているすべてのデバイスに対するクエリです。  | 
|  connectivity.connected:false  | 切断されたすべてのデバイスに対するクエリです。 | 
|  connectivity.connected:true AND connectivity.timestamp : [1557651600000 TO 1557867600000]  | 特定の範囲 (1557651600000～1557867600000) 内の接続タイムスタンプを持つ、接続されているすべてのデバイスに対するクエリです。タイムスタンプはエポックからのミリ秒単位で指定されます。 | 
|  connectivity.connected:false AND connectivity.timestamp : [1557651600000 TO 1557867600000]  | 特定の範囲 (1557651600000 ～ 1557867600000) 内の切断タイムスタンプを持つ、切断されているすべてのデバイスに対するクエリです。タイムスタンプはエポックからのミリ秒単位で指定されます。 | 
|  connectivity.connected:true AND connectivity.timestamp > 1557651600000  | 特定の範囲 (1557651600000 より大) 内の接続タイムスタンプを持つ、接続されているすべてのデバイスに対するクエリです。タイムスタンプはエポックからのミリ秒単位で指定されます。 | 
|  connectivity.connected:\$1  | 接続情報があるすべてのデバイスに対するクエリです。 | 
|  connectivity.disconnectReason:\$1  | connectivity.disconnectReason のあるすべてのデバイスに対するクエリです。 | 
|  connectivity.disconnectReason:CLIENT\$1INITIATED\$1DISCONNECT  | CLIENT\$1INITIATED\$1DISCONNECTが原因で切断されたすべてのデバイスのクエリです。 | 
|  deviceDefender.violationCount:[0 TO 100]  | 数値範囲 (0—100) 内の Device Defender 違反のカウント値を持つモノをクエリします。 | 
|  deviceDefender.<device-SecurityProfile>.disconnectBehavior.inViolation:true  | セキュリティプロファイル device-SecurityProfile で定義されているように、動作 disconnectBehavior に違反しているモノをクエリします。inViolation:false は有効なクエリではないことに注意してください。 | 
|  deviceDefender.<device-SecurityProfile>.disconnectBehavior.lastViolationValue.number>2  | 最新の違反のイベント値が 2 より大きく、セキュリティプロファイル device-SecurityProfile で定義されているように動作 disconnectBehavior に違反しているモノをクエリします。 | 
|  deviceDefender.<device-SecurityProfile>.disconnectBehavior.lastViolationTime>1634227200000  |  指定したエポックタイムの後に最新の違反イベントがあり、セキュリティプロファイル device-SecurityProfile で定義されているように動作 `disconnectBehavior` に違反しているモノをクエリします。  | 
|  shadow.name.gps-tracker.reported.coordinates:geo\$1distance,47.6204,-122.3491,15.5km | 47.6204,-122.3491 の座標から 15.5 km の半径距離内にあるモノをクエリします。このクエリ文字列は、位置データが名前付きシャドウに保存されている場合に適用されます。 | 
|  shadow.reported.coordinates:geo\$1distance,47.6204,-122.3491,15.5km | 47.6204,-122.3491 の座標から 15.5 km の半径距離内にあるモノをクエリします。このクエリ文字列は、位置データがクラシックシャドウに保存されている場合に適用されます。 | 

# モノのグループのクエリの例
<a name="example-thinggroup-queries"></a>

クエリは、クエリ構文を使用してクエリ文字列に指定され、[https://docs.aws.amazon.com/iot/latest/apireference/API_SearchIndex.html](https://docs.aws.amazon.com/iot/latest/apireference/API_SearchIndex.html) API に渡されます。次の表に、クエリ文字列の例を示します。


| クエリ文字列 | 結果 | 
| --- | --- | 
|  abc  |  任意のフィールドでの「abc」のクエリ  | 
|  thingGroupName:myGroupThingName  |  「myGroupThingName」という名前のモノのグループをクエリします｡  | 
|  thingGroupName:my\$1  |  「my」で始まる名前のモノのグループをクエリします｡  | 
|  thingGroupName:ab?  |  名前に「ab」と 1 つの追加文字 (例：「aba」、「abb」、「abc」など)を加えたモノのグループをクエリします)。  | 
|  attributes.myAttribute:75  |  値が 75 の「myAttribute」という属性を持つモノのグループをクエリします。  | 
|  attributes.myAttribute:[75 TO 80]  |  値が数値範囲 (75–80) の「myAttribute」という属性を持つモノのグループをクエリします。  | 
|  attributes.myAttribute:[75 TO 80]  |  値が数値範囲 (>75 および =80) の「myAttribute」という属性を持つモノのグループをクエリします。  | 
|  attributes.myAttribute:["abcd" TO "abcf"]  |  値が英数字の文字列範囲内にある「myAttribute」という属性を持つモノのグループをクエリします。このクエリは、値が「abcd」、「abce」、または「abcf」の「serialNumber」属性を持つモノのグループを返します。  | 
|  attributes.myAttribute:i\$1t  |  「myAttribute」という属性を持つモノのグループを検索します。値は「i」で、その後に任意の文字数が続き、その後に「t」が続きます。  | 
|  attributes.attr1:abc AND attributes.attr2<5 NOT attributes.attr3>10  |  ブール式を使用して､用語の組み合わせとなるモノのグループをクエリします。このクエリは、値が「abc」の属性「attr1」、値が 5 未満の属性「attr2」､および値が 10 以下の属性「attr3」をモノのグループを返します。  | 
|  NOT attributes.myAttribute:cde  |  「myAttribute」という属性が「cde」でないモノのグループをクエリします。  | 
|  parentGroupNames:(myParentThingGroupName)  |   親グループ名が「myParentThingGroupName」に一致するモノのグループのクエリ。  | 
|  parentGroupNames:(myParentThingGroupName OR myRootThingGroupName)  |  親グループ名が「myParentThingGroupName」または「myRootThingGroupName」に一致するモノのグループのクエリ。  | 
|  parentGroupNames:(myParentThingGroupNa\$1)  |  親グループ名の先頭が「myParentThingGroupNa」のモノのグループのクエリ。  | 

# 位置データのインデックス作成
<a name="location-indexing-geoquery"></a>

[AWS IoT フリートのインデックス作成](https://docs.aws.amazon.com//iot/latest/developerguide/iot-indexing.html)を使用して、デバイスの最後に送信された位置データのインデックスを作成し、ジオクエリを使用してデバイスを検索できます。この機能は、位置追跡や近接検索などのデバイスモニタリングと管理のユースケースを解決します。位置インデックス作成は、他のフリートインデックス作成機能と同様に機能し、[モノのインデックス作成](managing-fleet-index.md)で を指定する追加の設定で機能します。

一般的なユースケースには、目的の地理的境界内に位置するデバイスを検索および集約する、インデックス作成されたデータソースから、デバイスのメタデータと状態に関連するクエリ用語を使用して、位置固有のインサイトを取得する、結果を特定の地理的エリアにフィルタリングするなどの詳細なビューを提供し、フリートモニタリングマップ内のレンダリングの遅延を減らし、最後に報告されたデバイスの位置を追跡する、目的の境界制限外のデバイスを特定し、[フリートメトリクス](iot-fleet-metrics.md)を使用してアラームを生成するなどがあります。位置インデックス作成とジオクエリを開始するには、「[入門チュートリアル](location-indexing-tutorial.md)」を参照してください。

## サポートされているデータ形式
<a name="location-indexing-format"></a>

AWS IoT フリートインデックス作成は、次の位置データ形式をサポートしています。

1. 

**座標参照システムのよく知られたテキスト表現**

   [地理情報 - 座標参照システム形式のよく知られたテキスト表現](https://docs.ogc.org/is/12-063r5/12-063r5.html)の形式に従う文字列。例として、`"POINT(long lat)"` を使用できます。

1. 

**座標を表す文字列**

   `"latitude, longitude"` または `"longitude, latitude"` の形式の文字列。`"longitude, latitude"` を使用する場合は、`geoLocations` で `order` も指定する必要があります。例として、`"41.12,-71.34"` を使用できます。

1. 

**lat (緯度）、lon (経度) キーのオブジェクト**

   この形式は、クラシックシャドウと名前付きシャドウに適用されます。サポートされるキー: `lat`、`latitude`、`lon`、`long`、`longitude`。例として、`{"lat": 41.12, "lon": -71.34}` を使用できます。

1. 

**座標を表す配列**

   形式が `[lat,lon]` または `[lon,lat]` の配列。[GeoJSON](https://geojson.org/) の座標 (クラシックシャドウと名前付きシャドウに適用) と同じ形式 `[lon,lat]` を使用する場合は、`geoLocations` で `order` も指定する必要があります。

   例としては、次のようなものがあります。

   ```
   {
     "location": {
       "coordinates": [
         **Longitude**,
         **Latitude**
       ],
       "type": "Point",
       "properties": {
         "country": "United States",
         "city": "New York",
         "postalCode": "*****",
         "horizontalAccuracy": 20,
         "horizontalConfidenceLevel": 0.67,
         "state": "New York",
         "timestamp": "2023-01-04T20:59:13.024Z"
       }
     }
   }
   ```

## 位置データのインデックス作成方法
<a name="location-indexing-steps"></a>

次の手順では、位置データのインデックス作成の設定を更新し、ジオクエリを使用してデバイスを検索する方法を示します。

1. 

**位置情報データが保存されている場所を把握する**

   現在、フリートのインデックス作成は、クラシックシャドウまたは名前付きシャドウに保存されている位置データのインデックス作成をサポートしています。

1. 

**サポートされている位置データ形式を使用する**

   位置データ形式が[サポートされているデータ形式](#location-indexing-format) のいずれかに従っていることを確認します。

1. 

**インデックス作成の設定の更新**

   少なくとも、モノ (レジストリ) インデックス作成の設定を有効にします。また、位置データを含むクラシックシャドウまたは名前付きシャドウでインデックス作成を有効にする必要があります。モノのインデックス作成を更新するときは、インデックス作成の設定に位置情報データを含める必要があります。

1. 

**ジオクエリを作成して実行する**

   ユースケースに応じて、ジオクエリを作成して実行し、デバイスを検索します。作成するジオキューは、[クエリ構文](https://docs.aws.amazon.com//iot/latest/developerguide/query-syntax.html)に従う必要があります。[ジオクエリの例](#location-indexing-geoqueries) にいくつかの例があります。

## モノのインデックス作成を設定する
<a name="location-indexing-configuration"></a>

位置データのインデックスを作成するには、インデックス作成の設定を更新し、位置データを含める必要があります。位置データが保存されている場所に応じて、手順に従ってインデックス作成の設定を更新します。

### クラシックシャドウに保存されている位置データ
<a name="location-indexing-shadow-configuration"></a>

位置データがクラシックシャドウに保存されている場合は、`thingIndexingMode` を `REGISTRY_AND_SHADOW` に設定し、[https://docs.aws.amazon.com//iot/latest/apireference/API_IndexingFilter.html](https://docs.aws.amazon.com//iot/latest/apireference/API_IndexingFilter.html) の `geoLocations` フィールド (`name` および `order`) に位置データを指定する必要があります。

次のモノのインデックス作成の設定例では、位置データパス `shadow.reported.coordinates` を `name`、 `LonLat` を `order` として指定します。

```
{
	"thingIndexingMode": "REGISTRY_AND_SHADOW",
	"filter": {
		"geoLocations": [
			{
				"name": "shadow.reported.coordinates",
				"order": "LonLat"
			}
		]
	}
}
```
+ `thingIndexingMode`

  インデックス作成モードは、レジストリまたはシャドウがインデックス作成されているかどうかを制御します。`thingIndexingMode` が `OFF` に設定されている場合、モノのインデックス作成は無効になります。

  クラシックシャドウに保存されている位置データをインデックス作成するには、`thingIndexingMode` を `REGISTRY_AND_SHADOW` に設定する必要があります。詳細については、「[モノのインデックス作成モード](managing-index.md#index-mode)」を参照してください。
+ `filter`

  インデックス作成フィルターは、名前付きシャドウと位置情報データに追加の選択を提供します。詳細については、「[インデックス作成フィルター](managing-index.md#thing-indexing-filter)」を参照してください。
+ `geoLocations`

  インデックス作成のために選択した位置情報ターゲットのリスト。インデックス作成の位置情報ターゲットのデフォルトの最大数は `1` です。制限の引き上げをリクエストするには、「[AWS IoT Device Management クォータ](https://docs.aws.amazon.com//general/latest/gr/iot_device_management.html#fleet-indexing-limits)」を参照してください。
+ `name`

  位置情報ターゲットフィールドの名前。`name` の値は、シャドウの位置データパス (`shadow.reported.coordinates`) にすることができます。
+ `order`

  位置情報ターゲットフィールドの順序。有効な値: `LatLon` および `LonLat`。`LatLon` は緯度と経度を意味し、`LonLat` は経度と緯度を意味します。このフィールドはオプションです。デフォルト値は `LatLon` です。

### 名前付きシャドウに保存されている位置データ
<a name="location-indexing-named-shadow-configuration"></a>

位置データが名前付きシャドウに保存されている場合は、`namedShadowIndexingMode` を `ON`に設定し、名前付きシャドウ名 (複数可) を [https://docs.aws.amazon.com//iot/latest/apireference/API_IndexingFilter.html](https://docs.aws.amazon.com//iot/latest/apireference/API_IndexingFilter.html) の `namedShadowNames` フィールドに追加し、[https://docs.aws.amazon.com//iot/latest/apireference/API_IndexingFilter.html](https://docs.aws.amazon.com//iot/latest/apireference/API_IndexingFilter.html) の `geoLocations` フィールドに位置データパスを指定します。

次のモノのインデックス作成の設定例では、位置データパス `shadow.name.namedShadow1.reported.coordinates` を `name`、 `LonLat` を `order` として指定します。

```
{
	"thingIndexingMode": "REGISTRY",
	"namedShadowIndexingMode": "ON",
	"filter": {
		"namedShadowNames": [
			"namedShadow1"
		],
		"geoLocations": [
			{
				"name": "shadow.name.namedShadow1.reported.coordinates",
				"order": "LonLat"
			}
		]
	}
}
```
+ `thingIndexingMode`

  インデックス作成モードは、レジストリまたはシャドウがインデックス作成されているかどうかを制御します。`thingIndexingMode` が `OFF` に設定されている場合、モノのインデックス作成は無効になります。

  名前付きシャドウに保存されている位置データのインデックスを作成するには、`thingIndexingMode` を `REGISTRY` (または `REGISTRY_AND_SHADOW`) に設定する必要があります。詳細については、「[モノのインデックス作成モード](managing-index.md#index-mode)」を参照してください。
+ `filter`

  インデックス作成フィルターは、名前付きシャドウと位置情報データに追加の選択を提供します。詳細については、「[インデックス作成フィルター](managing-index.md#thing-indexing-filter)」を参照してください。
+ `geoLocations`

  インデックス作成のために選択した位置情報ターゲットのリスト。インデックス作成の位置情報ターゲットのデフォルトの最大数は `1` です。制限の引き上げをリクエストするには、「[AWS IoT Device Management クォータ](https://docs.aws.amazon.com//general/latest/gr/iot_device_management.html#fleet-indexing-limits)」を参照してください。
+ `name`

  位置情報ターゲットフィールドの名前。`name` の値は、シャドウの位置データパス (`shadow.name.namedShadow1.reported.coordinates`) にすることができます。
+ `order`

  位置情報ターゲットフィールドの順序。有効な値: `LatLon` および `LonLat`。`LatLon` は緯度と経度を意味し、`LonLat` は経度と緯度を意味します。このフィールドはオプションです。デフォルト値は `LatLon` です。

## ジオクエリの例
<a name="location-indexing-geoqueries"></a>

位置データのインデックス作成の設定が完了したら、ジオクエリを実行してデバイスを検索します。ジオクエリを他のクエリ文字列と組み合わせることもできます。詳細については、「[クエリ構文](query-syntax.md)」および「[モノのクエリの例](example-queries.md)」を参照してください。

**クエリの例 1**

この例では、位置データが名前付きシャドウ `gps-tracker` に保存されていることを前提としています。このコマンドの出力は、座標 (47.6204,-122.3491) を持つ中心点から 15.5 km の半径距離内にあるデバイスのリストです。

```
aws iot search-index --query-string \
"shadow.name.gps-tracker.reported.coordinates:geo_distance,47.6204,-122.3491,15.5km"
```

**クエリの例 2**

この例では、位置データがクラシックシャドウに保存されていることを前提としています。このコマンドの出力は、座標 (47.6204,-122.3491) を持つ中心点から 15.5 km の半径距離内にあるデバイスのリストです。

```
aws iot search-index --query-string \
"shadow.reported.coordinates:geo_distance,47.6204,-122.3491,15.5km"
```

**クエリの例 3**

この例では、位置データがクラシックシャドウに保存されていることを前提としています。このコマンドの出力は、接続されておらず、座標 (47.6204、-122.3491) を持つ中心点から 15.5 km の半径距離外にあるデバイスのリストです。

```
aws iot search-index --query-string \
"connectivity.connected:false AND (NOT shadow.reported.coordinates:geo_distance,47.6204,-122.3491,15.5km)"
```

# 入門チュートリアル
<a name="location-indexing-tutorial"></a>

このチュートリアルでは、[フリートのインデックス作成](iot-indexing.md)を使用して[位置データのインデックス作成](location-indexing-geoquery.md)方法を示します。簡単にするために、デバイスを表すモノを作成し、位置データを名前付きシャドウに保存し、位置インデックス作成のモノインデックス設定を更新し、サンプルジオクエリを実行して半径境界内のデバイスを検索します。

このチュートリアルの完了には 15 分ほどかかります。

**Topics**
+ [前提条件](#location-indexing-tutorial-prerequisites)
+ [モノとシャドウを作成する](#location-indexing-create-resources)
+ [モノのインデックス作成を設定する](#location-indexing-update-configuration)
+ [ジオクエリの実行](#location-indexing-run-geoquery)

## 前提条件
<a name="location-indexing-tutorial-prerequisites"></a>
+ [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) の最新バージョンをインストールします。
+ [位置インデックス作成とジオクエリ](https://docs.aws.amazon.com/iot/latest/developerguide/location-indexing-geoquery.html)、[モノのインデックス作成の管理](https://docs.aws.amazon.com/iot/latest/developerguide/managing-index.html)、および[クエリ構文](https://docs.aws.amazon.com/iot/latest/developerguide/query-syntax.html)を理解しておいてください。

## モノとシャドウを作成する
<a name="location-indexing-create-resources"></a>

デバイスを表すモノと、その位置データを保存する名前付きシャドウを作成します (座標 47.61564、-122.33584)。

1. 次のコマンドを実行して、Bike-1 という名前のバイクを表すモノを作成します。を使用してモノを作成する方法の詳細については AWS CLI、「 *AWS CLI**リファレンス*」の[「Create-thing](https://docs.aws.amazon.com//cli/latest/reference/iot/create-thing.html)」を参照してください。

   ```
   aws iot create-thing --thing-name "Bike-1" \
   --attribute-payload '{"attributes": {"model":"OEM-2302-12", "battery":"35", "acqDate":"06/09/23"}}'
   ```

   このコマンドの出力は以下のようになります。

   ```
   {
       "thingName": "Bike-1",
       "thingArn": "arn:aws:iot:us-east-1:123456789012:thing/Bike-1",
       "thingId": "df9cf01d-b0c8-48fe-a2e2-e16cff6b23df"
   }
   ```

1. 次のコマンドを実行して、Bike-1 の位置データ (座標 47.61564、-122.33584) を保存する名前付きシャドウを作成します。を使用して名前付きシャドウを作成する方法の詳細については AWS CLI、「 *AWS CLI**リファレンス*」の[update-thing-shadow](https://docs.aws.amazon.com//cli/latest/reference/iot-data/update-thing-shadow.html)」を参照してください。

   ```
   aws iot-data update-thing-shadow \
   --thing-name Bike-1 \
   --shadow-name Bike1-shadow \
   --cli-binary-format raw-in-base64-out \
   --payload '{"state":{"reported":{"coordinates":{"lat": 47.6153, "lon": -122.3333}}}}' \
   "output.txt" \
   ```

   このコマンドでは、出力が生成されません。作成した名前付きシャドウを表示するには、[list-named-shadows-for-thing](https://docs.aws.amazon.com//cli/latest/reference/iot-data/list-named-shadows-for-thing.html) CLI コマンドを実行します。

   ```
   aws iot-data list-named-shadows-for-thing --thing-name Bike-1
   ```

   このコマンドの出力は以下のようになります。

   ```
   {
       "results": [
           "Bike1-shadow"
       ],
       "timestamp": 1699574309
   }
   ```

## モノのインデックス作成を設定する
<a name="location-indexing-update-configuration"></a>

位置データのインデックスを作成するには、モノのインデックス作成設定を更新して、位置データを含める必要があります。このチュートリアルでは、位置情報データは名前付きシャドウに保存されるため、`thingIndexingMode` を `REGISTRY` (最小要件で) に設定し、`namedShadowIndexingMode` を `ON` に設定して、位置情報データを設定に追加します。この例では、名前付きシャドウの名前とシャドウの位置データパスを `filter` に追加する必要があります。

1. コマンドを実行して、位置インデックスの作成のインデックス作成設定を更新します。

   ```
   aws iot update-indexing-configuration --cli-input-json '{
   "thingIndexingConfiguration": { "thingIndexingMode": "REGISTRY",
   "thingConnectivityIndexingMode": "OFF",
   "deviceDefenderIndexingMode": "OFF",
   "namedShadowIndexingMode": "ON",
   "filter": {
       "namedShadowNames": ["Bike1-shadow"],
       "geoLocations":[{
           "name":"shadow.name.Bike1-shadow.reported.coordinates"
       }]
   },
   "customFields": [
   { "name":"attributes.battery",
   "type":"Number"}] } }'
   ```

    コマンドでは、出力が生成されません。更新が完了するまで少し時間を要する場合があります。ステータスを確認するには、[describe-index](https://docs.aws.amazon.com//cli/latest/reference/iot/describe-index.html) CLI コマンドを実行します。`indexStatus` が `ACTIVE` と表示された場合は、モノのインデックスの更新が完了しました。

1. コマンドを実行して、インデックス作成の設定を確認します。この手順は省略可能です。

   ```
   aws iot get-indexing-configuration
   ```

   出力は次のようになります。

   ```
   {
       "thingIndexingConfiguration": {
           "thingIndexingMode": "REGISTRY",
           "thingConnectivityIndexingMode": "OFF",
           "deviceDefenderIndexingMode": "OFF",
           "namedShadowIndexingMode": "ON",
           "managedFields": [
               {
                   "name": "shadow.name.*.hasDelta",
                   "type": "Boolean"
               },
               {
                   "name": "registry.version",
                   "type": "Number"
               },
               {
                   "name": "registry.thingTypeName",
                   "type": "String"
               },
               {
                   "name": "registry.thingGroupNames",
                   "type": "String"
               },
               {
                   "name": "shadow.name.*.version",
                   "type": "Number"
               },
               {
                   "name": "thingName",
                   "type": "String"
               },
               {
                   "name": "thingId",
                   "type": "String"
               }
           ],
           "customFields": [
               {
                   "name": "attributes.battery",
                   "type": "Number"
               }
           ],
           "filter": {
               "namedShadowNames": [
                   "Bike1-shadow"
               ],
               "geoLocations": [
                   {
                       "name": "shadow.name.Bike1-shadow.reported.coordinates",
                       "order": "LatLon"
                   }
               ]
           }
       },
       "thingGroupIndexingConfiguration": {
           "thingGroupIndexingMode": "OFF"
       }
   }
   ```

## ジオクエリの実行
<a name="location-indexing-run-geoquery"></a>

これで、モノのインデックスの作成設定を更新して、位置データを含めました。ジオクエリを作成して実行し、目的の検索結果を取得できるかどうかを確認してください。ジオクエリは、[クエリ構文](query-syntax.md)に従う必要があります。[ジオクエリの例](location-indexing-geoquery.md#location-indexing-geoqueries) に有用なジオクエリの例があります。

次のコマンド例では、ジオクエリ `shadow.name.Bike1-shadow.reported.coordinates:geo_distance,47.6204,-122.3491,15.5km` を使用して、座標 (47.6204,-122.3491) を使用して中心点から 15.5 km の半径距離内にあるデバイスを検索します。

```
aws iot search-index --query-string "shadow.name.Bike1-shadow.reported.coordinates:geo_distance,47.6204,-122.3491,15.5km"
```

座標「lat」: 47.6153、「lon」: -122.3333 にデバイスがあり、これはは中心点から 15.5 km の距離以内となるため、このデバイス (Bike-1) を出力で確認できます。出力は次のようになります。

```
{
    "things": [
        {
            "thingName": "Bike-1",
            "thingId": "df9cf01d-b0c8-48fe-a2e2-e16cff6b23df",
            "attributes": {
                "acqDate": "06/09/23",
                "battery": "35",
                "model": "OEM-2302-12"
            },
            "shadow": "{\"reported\":{\"coordinates\":{\"lat\":47.6153,\"lon\":-122.3333}},\"metadata\":{\"reported\":{\"coordinates\":{\"lat\":{\"timestamp\":1699572906},\"lon\":{\"timestamp\":1699572906}}}},\"hasDelta\":false,\"version\":1}"
        }
    ]
}
```

詳細については、「[位置データのインデックス作成](location-indexing-geoquery.md)」を参照してください。

# フリートメトリクス
<a name="iot-fleet-metrics"></a>

フリートメトリクスは、デバイスのデータのインデックス作成、検索、集計を可能にするマネージドサービスである[フリートインデックス作成](iot-indexing.md)の機能です AWS IoT。フリートメトリクスを使用すると、[CloudWatch](https://console.aws.amazon.com/cloudwatch/) でフリートデバイスの集約状態を経時的にモニタリングできます。これには特定期間におけるフリートデバイスの切断率、または平均的なバッテリーレベルの変化の確認などが含まれます。

フリートメトリクスを使用することによって、[集計クエリ](index-aggregate.md)が構築できます。クエリからの結果は、傾向を分析し、アラームを作成するためのメトリクスとして [CloudWatch](https://console.aws.amazon.com/cloudwatch/) に継続的に出力されます。モニタリングタスクでは、異なるタイプ([**Statistics**](統計）、[**Cardinality**]（濃度）、および[**Percentile**](パーセンタイル)）の集計クエリが指定できます。将来の再使用のために、フリートメトリクスを作成するためのすべての集計クエリを保存することができます。

# 入門チュートリアル
<a name="fleet-metrics-get-started"></a>

このチュートリアルでは、センサーの温度を監視し、潜在的な異常を検出するために、[フリートメトリクス](iot-fleet-metrics.md)を作成します。フリートメトリクスを作成するときは、華氏80度を超える温度を持つセンサーの数を検出する[集計クエリ](index-aggregate.md)を定義します。クエリが 60 秒ごとに実行され、クエリ結果が CloudWatch に出力されるように指定します。そうすると、高温リスクの可能性があるセンサーの数を確認し、アラームを設定する事ができます。このチュートリアルを完了するには、[AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)を使用します。

このチュートリアルの学習内容は次のとおりです。
+ [セットアップする](#fleet-metrics-tutorial-setup)
+ [フリートメトリクスを作成します](#fleet-metrics-tutorial-create)
+ [CloudWatch でメトリクスを表示する](#fleet-metrics-tutorial-view-data)
+ [リソースをクリーンアップする](#fleet-metrics-tutorial-delete-fleet-metrics)

このチュートリアルの完了には 15 分ほどかかります。

## 前提条件
<a name="fleet-metrics-tutorial-prerequisites"></a>
+ [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)の最新バージョンをインストールします
+ [集計データのクエリ](https://docs.aws.amazon.com/iot/latest/developerguide/index-aggregate.html)について理解する
+ [Amazon CloudWatch メトリクスの使用](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html)について理解する 

## セットアップする
<a name="fleet-metrics-tutorial-setup"></a>

フリートメトリクスを使用するには、フリートインデックス作成を有効にします。指定されたデータソースと関連付けられた設定を持つモノ、またはモノのグループに対してフリートのインデックス作成を有効にするには、「[モノのインデックス作成の管理](managing-index.md#enable-index)」と「[モノのグループのインデックス作成の管理](thinggroup-index.md#enable-group-index)」にある手順に従ってください。

**をセットアップするには**

1. 次のコマンドを実行して、フリートインデックス作成を有効にし、検索元のデータソースを指定します。

   ```
   aws iot update-indexing-configuration \
   --thing-indexing-configuration "thingIndexingMode=REGISTRY_AND_SHADOW,customFields=[{name=attributes.temperature,type=Number},{name=attributes.rackId,type=String},{name=attributes.stateNormal,type=Boolean}],thingConnectivityIndexingMode=STATUS" \
   ```

   前の CLI コマンドの例は、`AWS_Things` インデックスを使用して、フリートインデックス作成に、レジストリーデータ、シャドウデータ、およびモノの接続ステータスの検索サポートをさせます。

   設定の変更が完了するまで数分かかることがあります。フリートメトリクスを作成する前に、フリートインデックス作成が有効になっていることを確認してください。

   フリートインデックスが有効になっているかどうかを確認するには、次の CLI コマンドを実行します：

   ```
   aws --region us-east-1 iot describe-index --index-name "AWS_Things"
   ```

   詳細については、「[モノのインデックス作成を有効にする](managing-index.md#enable-index)」をご覧ください。

1. 次のbashスクリプトを実行して、10個のものを作成し、それらを記述します。

   ```
   # Bash script. Type `bash` before running in other shells.
   
   Temperatures=(70 71 72 73 74 75 47 97 98 99)
   Racks=(Rack1 Rack1 Rack2 Rack2 Rack3 Rack4 Rack5 Rack6 Rack6 Rack6)
   IsNormal=(true true true true true true false false false false)
   
   for ((i=0; i < 10; i++))
   do
     thing=$(aws iot create-thing --thing-name "TempSensor$i" --attribute-payload attributes="{temperature=${Temperatures[@]:$i:1},rackId=${Racks[@]:$i:1},stateNormal=${IsNormal[@]:$i:1}}")
     aws iot describe-thing --thing-name "TempSensor$i"
   done
   ```

   このスクリプトは、10 個のセンサーを表す 10 個のものを作成します。それぞれのモノは、次の表で説明されているよう`temperature`、`rackId`、 および`stateNormal`の属性を持っています。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/fleet-metrics-get-started.html)

   このスクリプトの出力には、10 個の JSON ファイルが含まれています。JSON ファイルのうちの 1 つが次のようになります。

   ```
   {
       "version": 1, 
       "thingName": "TempSensor0", 
       "defaultClientId": "TempSensor0", 
       "attributes": {
           "rackId": "Rack1", 
           "stateNormal": "true", 
           "temperature": "70"
       }, 
       "thingArn": "arn:aws:iot:region:account:thing/TempSensor0", 
       "thingId": "example-thing-id"
   }
   ```

   詳細については、「[モノの作成](https://docs.aws.amazon.com/iot/latest/developerguide/thing-registry.html#create-thing)」を参照してください。

## フリートメトリクスを作成します
<a name="fleet-metrics-tutorial-create"></a>

**フリートメトリクスを作成します**

1. 次のコマンドを実行して、*high\$1temp\$1FM*という名前のフリーメトリクスを作成します。CloudWatch で華氏 80 度を超える温度を持つセンサーの数を監視するフリートメトリクスを作成します。

   ```
   aws iot create-fleet-metric --metric-name "high_temp_FM" --query-string "thingName:TempSensor* AND attributes.temperature >80" --period 60 --aggregation-field "attributes.temperature" --aggregation-type name=Statistics,values=count
   ```

   –-メトリクス名 

   データ型 – 文字列 `--metric-name`パラメーターは、フリートメトリクス名を指定します。この例では、*high\$1temp\$1FM*という名前のフリートメトリクス を作成しています。

   --query <string>

   データ型 – 文字列 `--query-string`パラメーターは、クエリ文字列を指定します。この例でクエリ文字列は、*TempSensor* で始まる名前が付けられたすべてのモノと、温度が華氏 80 度を超えるすべてのモノをクエリすることを意味します。詳細については、「[クエリ構文](query-syntax.md)」を参照してください。

   –-期間 

   データ型: 整数 `--period`パラメーターは、集計データを取得する時間を秒単位で指定します。この例では、作成するフリートメトリクスが 60 秒ごとに集計データを取得するように指定します。

   –aggregation-field

   データ型:文字列 `--aggregation-field`パラメーターは、評価する属性を指定します。この例では、温度属性を評価します。

   –-aggregation-type

   `--aggregation-type`パラメーターは、フリートメトリクスに表示する統計概要を指定します。モニタリングタスクでは、異なる集計タイプ ([**Statistics**] (統計)、[**Cardinality**] (濃度)、および [**Percentile**] (パーセンタイル)の集計クエリプロパティをカスタマイズできます。この例では、集計タイプ [**統計**] に [**数**] を指定して、クエリに一致する属性を持つデバイス、つまり、*TempSensor* で始まる名前が付けられており、温度が華氏 80 度を超えるデバイスの数を返します。詳細については、「[集計データのクエリ](index-aggregate.md)」をご覧ください。

   このコマンドの出力は以下のようになります。

   ```
   {
       "metricArn": "arn:aws:iot:region:111122223333:fleetmetric/high_temp_FM", 
       "metricName": "high_temp_FM"
   }
   ```
**注記**  
CloudWatch でデータポイントが表示されるまでに時間がかかることがあります。

   フリートメトリクスの作成方法については、「[フリートメトリクスの管理](managing-fleet-metrics.md)」を参照してください。。

   フリートメトリックスを作成できない場合は、「[フリートメトリクスのトラブルシューティング](fleet-indexing-troubleshooting.md#fleet-metrics-troubleshooting)」を参照してください。

1. (オプション) 次のコマンドを実行して、*high\$1temp\$1FM*という名前のフリートメトリクスを記述します。

   ```
   aws iot describe-fleet-metric --metric-name "high_temp_FM"
   ```

   このコマンドの出力は以下のようになります。

   ```
   {
       "queryVersion": "2017-09-30", 
       "lastModifiedDate": 1625249775.834, 
       "queryString": "*", 
       "period": 60, 
       "metricArn": "arn:aws:iot:region:111122223333:fleetmetric/high_temp_FM", 
       "aggregationField": "registry.version", 
       "version": 1, 
       "aggregationType": {
           "values": [
               "count"
           ], 
           "name": "Statistics"
       }, 
       "indexName": "AWS_Things", 
       "creationDate": 1625249775.834, 
       "metricName": "high_temp_FM"
   }
   ```

## CloudWatch でフリートメトリクスを表示する
<a name="fleet-metrics-tutorial-view-data"></a>

フリートメトリクスを作成したら、CloudWatch コンソールでメトリクスデータを表示できます。このチュートリアルでは、*TempSensor* で始まる名前が付けられており、温度が華氏 80 度を超えるセンサーの数を示すメトリクスが表示されます。

**CloudWatch でデータポイントを表示するには**

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

1. 左側の [CloudWatch] メニューで、[**メトリクス**] をクリックしてサブメニューを展開し、[**すべてのメトリクス**] を選びます。これにより、上半分はグラフが表示され、下半分は4つのタブ付きセクションが表示されたページが開きます。

1. 最初のタブ付きセクション[**すべてのメトリクス**] には、グループで表示できるすべてのメトリクスが一覧表示されます。[**loTFleetMetrics**] を選びます。これにはすべてのフリートメトリクスが含まれます。

1. [**All metrics**] (すべてのメトリクス) タブの [**Aggregation type**] (集計タイプ) セクションで、[**Aggregation type**] (集計タイプ) を選択して、作成したすべてのフリートメトリクスを表示します。

1. フリート指標を選択して、[**Aggregation type**](集計タイプ)セクションの左側にグラフを表示します。**[メトリクス名]** の左に、値　*カウント*が表示されます。これは、このチュートリアルの「[フリートメトリクスを作成する](#fleet-metrics-tutorial-create)」セクションで指定された集約タイプの値です。

1. [**All metrics**](すべてのメトリクス) タブの右にある[**Graphed metrics**](グラフ化したメトリクス）という名前の2番目のタブを選び、前のステップで選んだフリートメトリクスを表示します。

   以下の通り、華氏 80 度以上の温度を持つセンサーの数を表示するグラフを確認できます。  
![\[AWS IoT フリートメトリクス\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/fm-metric-in-cloudwatch.png)
**注記**  
CloudWatchの[**Period**]（期間）属性のデフォルトは 5 分です。これは、CloudWatch に表示されているデータポイント間の時間間隔です。必要に応じて、[**Period**](期間)設定を変更する事ができます。

1. （オプション）メトリクスアラームを設定できます。

   1. 左側の CloudWatch メニューで、[**アラーム**] をクリックしてサブメニューを展開し、[**すべてのアラーム**] を選びます。

   1. [**Alarms**](アラーム) ページで、右上のコーナーの [**Create alarm** ] (アラームを作成する)を選びます。コンソールの[**Create alarm**](アラームを作成する)の指示に従って、必要に応じてアラームを作成します。詳細については、「[Using Amazon CloudWatch alarms](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)」(Amazon CloudWatch アラームを使用する) を参照してください。

詳細については、[[Using Amazon CloudWatch metrics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html)](Amazon CloudWatch メトリクスを使う) を参照してください。

CloudWatch でデータポイントが表示されない場合は、[[Troubleshooting fleet metrics](fleet-indexing-troubleshooting.md#fleet-metrics-troubleshooting)](フリートメトリクスのトラブルシューティング）を参照してください。。

## クリーンアップ
<a name="fleet-metrics-tutorial-delete-fleet-metrics"></a>

**フリートメトリクスを削除するには**

**delete-fleet-metric**CLI コマンドを使用して、フリートメトリクスを削除します。

*high\$1temp\$1FM* という名前のフリートメトリクスを削除するには、次のコマンドを実行します。

```
aws iot delete-fleet-metric --metric-name "high_temp_FM"
```

**モノをクリーンアップするには**

**delete-thing** CLIコマンドを使用してモノを削除します。

作成した 10 個のモノを削除するには、次のスクリプトを実行します。

```
# Bash script. Type `bash` before running in other shells.

for ((i=0; i < 10; i++))
do
  thing=$(aws iot delete-thing --thing-name "TempSensor$i")
done
```

**CloudWatch でメトリクスをクリーンアップするには**

CloudWatch は、メトリクスの削除をサポートしません。メトリクスは、保持スケジュールに基づいて期限切れになります。詳細については、「[Amazon CloudWatch メトリクスを使用する](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html)」を参照してください。

# フリートのメトリクスの管理
<a name="managing-fleet-metrics"></a>

このトピックでは、 AWS IoT コンソールと AWS CLI を使用してフリートメトリクスを管理する方法について説明します。

**Topics**
+ [フリートメトリクスの管理 (コンソール)](#managing-fleet-metrics-console)
+ [フリートのメトリクスの管理 (CLI)](#managing-fleet-metrics-cli)
+ [IoT リソースのタグ付けを承認する](#managing-fleet-metrics-policy)

## フリートメトリクスの管理 (コンソール)
<a name="managing-fleet-metrics-console"></a>

以下のセクションでは、 AWS IoT コンソールを使用してフリートメトリクスを管理する方法を示します。フリートメトリックスを作成する前に、関連するデータソースでフリートインデックス作成が有効になっていることを確認してください。

### フリートインデックス作成を有効にする
<a name="setup-steps-console"></a>

フリートインデックス作成がすでに有効になっている場合は、このセクションをスキップしてください。

フリートのインデックス作成を有効にしていない場合は、次の手順に従ってください。

1. [https://console.aws.amazon.com/iot/](https://console.aws.amazon.com/iot/) で AWS IoT コンソールを開きます。

1.  AWS IoT メニューで、**設定** を選択します。

1. 詳細設定を表示するには、[**Settings**](設定)ページで、[**Fleet indexing**](フリートインデックスを作成する)セクションまでスクロールダウンします。

1. フリートインデックス作成設定を更新するには、[**Fleet indexing**](フリートインデックスの作成)セクションで、[**Manage indexing**](インデックス作成の管理)を選択します。

1. [**Manage fleet indexing**] (フリートインデックス作成の管理) ページで、必要に基づいてフリートインデックス作成の設定を更新します。
   + **設定**

     モノのインデックス作成を有効にするには、[**Thing indexing]**(モノのインデックス作成)をオンにして、インデックスを作成するデータソースを選択します。

     モノグループのインデックス作成を有効にするには、[**Thing group indexing**](モノグループのインデックス作成)をオンに切り替えます。
   + **集約のカスタムフィールド - *オプション***

     カスタムフィールドは、フィールド名とフィールドタイプのペアのリストです。

     カスタムフィールドのペアを追加するには、**[Add New field**](新しいフィールドを追加)を選びます。`attributes.temperature` のようなカスタムフィールド名を入力してから、[**Field type**] (フィールドタイプ) メニューからフィールドタイプを選択します。カスタムフィールド名は `attributes.` で始まり、[モノの集計クエリ](https://docs.aws.amazon.com/iot/latest/developerguide/index-aggregate.html)を実行するための属性として保存されることに注意してください。

     設定を更新して保存するには、[**Update**](更新)を選びます。

### フリートメトリクスを作成します
<a name="create-fleet-metrics-console"></a>

1. [https://console.aws.amazon.com/iot/](https://console.aws.amazon.com/iot/) で AWS IoT コンソールを開きます。

1.  AWS IoT メニューで、**管理**を選択し、**フリートメトリクス**を選択します。

1. [**Fleet metrics**] (フリートメトリクス) ページで, [**Create fleet metric**] (フリートメトリクスの作成) をクリックして、作成ステップを完了します。

1. ステップ 1で、[**Configure fleet metrics**](フリートメトリクス)を設定します。
   + **Query**(クエリ)セクションで、集約検索を実行したいモノまたは、モノのグループを指定するクエリ文字列を入力します。クエリ文字列は、属性と値で構成されます。[**Properties**] (プロパティ) には、使用したい属性を選びます。あるいは、リストに属性が表示されていない場合は、フィールドに属性を入力します。`:`の後に値を入力してください。クエリ文字列の例として、`thingName:TempSensor*`があります。入力するクエリ文字列ごとに、キーボードの**Enter**を押します。複数のクエリ文字列を入力する場合は、それらの間に、**and**、**or**、**and not**、または **or not** を選択してそれらの関係を指定します。
   + **[レポートのプロパティ]** で、**[インデックス名]**、**[集計タイプ]**、**[集計フィールド]** をそれぞれのリストから選択します。次に、[**Select data**](データの選択)で集計したいデータを選択します。そこでは、複数のデータ値を選択できます。
   + **[Next]** (次へ) を選択します。

1. ステップ 2で、[**Specify fleet metric properties**](フリートメトリクスプロパティを指定)
   + [**Fleet metric name**](フリートメトリクス)フィールドに、作成しているフリートメトリクスの名前を入力します。
   + [**Description-*optional***](説明 - オプション)フィールドに、作成しているフリートメトリクスの説明を入力します。このフィールドはオプションです。
   + [**Hours**](時間)および[**Minutes**](分)フィールドに、フリートメトリクスがCloudWatchにデータを送信する時間（頻度）を入力します。
   + [**次へ**] を選択します。

1. ステップ3の [**Review and create**](確認と作成)
   + ステップ 1 とステップ 2 の設定を確認します。設定を編集するには、[**Edit**](編集)を選びます。
   + [**Create fleet metric**](フリートメトリクスの作成)を選びます。

作成に成功すると、[**Fleet metric**](フリートメトリクス)ページで、フリートメトリックスがリスト化されます。

### フリートメトリクスを更新します
<a name="update-fleet-metrics-console"></a>

1. [**フリートメトリクス**] ページで、更新したいフリートメトリクスを選択します。

1. [**Fleet Details**](フリートの詳細) タブで、[**Edit**]（編集）を選びます。これにより、作成ステップが開き、3 つのステップのいずれかでフリートメトリクスを更新する事ができます。

1. フリートメトリクスの更新が完了したら、[**Update fleet metric**](フリートメトリクスの更新)を選択します。

### フリートメトリクスを削除する
<a name="delete-fleet-metrics-console"></a>

1. [**フリートメトリクス**] ページで、削除したいフリートメトリクスを選びます。

1. フリートメトリクスの詳細を表示する次のページで、[**Delete**](削除)を選びます。

1. ダイアログボックスで、削除を確認するフリートメトリクスの名前を入力します。

1. [**Delete**](削除) を選びます。このステップは、フリートメトリクスを永続的に削除します。

## フリートのメトリクスの管理 (CLI)
<a name="managing-fleet-metrics-cli"></a>

以下のセクションでは、 を使用してフリートメトリクス AWS CLI を管理する方法を示します。フリートメトリクスを作成する前に、関連するデータソースおよび設定と一緒に、フリートインデックス作成が有効になっていることを確認してください。モノまたはモノのグループのフリートのインデックス作成を有効にするために、[[Managing thing indexing](managing-index.md#enable-index)](モノのインデックス化管理)または[[Managing thing group indexing](thinggroup-index.md#enable-group-index)](モノのグループインデックス化管理)の手順に従ってください。

### フリートメトリクスを作成します
<a name="create-fleet-metrics"></a>

フリートメトリクスを作成するには、create-fleet-metric CLI コマンドを使用できます。

```
aws iot create-fleet-metric --metric-name "YourFleetMetricName" --query-string "*" --period 60 --aggregation-field "registry.version" --aggregation-type name=Statistics,values=sum
```

このコマンドの出力には、フリートメトリクスの名前と Amazon リソースネーム (ARN) が含まれます。出力は次のようになります。

```
{
    "metricArn": "arn:aws:iot:us-east-1:111122223333:fleetmetric/YourFleetMetricName", 
    "metricName": "YourFleetMetricName"
}
```

### フリートメトリクスを一覧表示します
<a name="list-fleet-metrics"></a>

list-fleet-metric CLI コマンドを使用して、アカウント内のすべてのフリートメトリクスを一覧表示できます。

```
aws iot list-fleet-metrics
```

このコマンドの出力には、すべてのフリートのメトリクスが含まれます。出力は次のようになります。

```
{
    "fleetMetrics": [
        {
            "metricArn": "arn:aws:iot:us-east-1:111122223333:fleetmetric/YourFleetMetric1", 
            "metricName": "YourFleetMetric1"
        }, 
        {
            "metricArn": "arn:aws:iot:us-east-1:111122223333:fleetmetric/YourFleetMetric2", 
            "metricName": "YourFleetMetric2"
        }
    ]
}
```

### フリートのメトリクスを説明する
<a name="describe-fleet-metrics"></a>

describe-fleet-metric CLI コマンドを使用して、フリートメトリクスに関するより詳細な情報を表示できます。

```
aws iot describe-fleet-metric --metric-name "YourFleetMetricName"
```

コマンドの出力には、指定されたフリートメトリクスに関する詳細情報が含まれます。出力は次のようになります。

```
{
    "queryVersion": "2017-09-30", 
    "lastModifiedDate": 1625790642.355, 
    "queryString": "*", 
    "period": 60, 
    "metricArn": "arn:aws:iot:us-east-1:111122223333:fleetmetric/YourFleetMetricName", 
    "aggregationField": "registry.version", 
    "version": 1, 
    "aggregationType": {
        "values": [
            "sum"
        ], 
        "name": "Statistics"
    }, 
    "indexName": "AWS_Things", 
    "creationDate": 1625790642.355, 
    "metricName": "YourFleetMetricName"
}
```

### フリートメトリクスを更新します
<a name="update-fleet-metrics"></a>

フリートメトリクスを更新するには、update-fleet-metric CLI コマンドを使用できます。

```
aws iot update-fleet-metric --metric-name "YourFleetMetricName" --query-string "*" --period 120 --aggregation-field "registry.version" --aggregation-type name=Statistics,values=sum,count --index-name AWS_Things
```

update-fleet-メトリクスコマンドは、出力を生成しません。describe-fleet-メトリクス CLI コマンドを使用して、結果を表示できます。

```
{
    "queryVersion": "2017-09-30", 
    "lastModifiedDate": 1625792300.881, 
    "queryString": "*", 
    "period": 120, 
    "metricArn": "arn:aws:iot:us-east-1:111122223333:fleetmetric/YourFleetMetricName", 
    "aggregationField": "registry.version", 
    "version": 2, 
    "aggregationType": {
        "values": [
            "sum", 
            "count"
        ], 
        "name": "Statistics"
    }, 
    "indexName": "AWS_Things", 
    "creationDate": 1625792300.881, 
    "metricName": "YourFleetMetricName"
}
```

### フリートメトリクスを削除する
<a name="delete-fleet-metrics"></a>

delete-fleet-metric CLI コマンドを使用してフリートメトリクスを削除します。

```
aws iot delete-fleet-metric --metric-name "YourFleetMetricName"
```

このコマンドは、削除が成功した場合、または存在しないフリートメトリクスを指定した場合、出力を生成しません。

詳細については、「[フリートメトリクスのトラブルシューティング](fleet-indexing-troubleshooting.md#fleet-metrics-troubleshooting)」をご覧ください。

## IoT リソースのタグ付けを承認する
<a name="managing-fleet-metrics-policy"></a>

作成、変更、または使用できるフリートメトリクスをより適切に制御するために、フリートメトリクスにタグをアタッチすることができます。

 AWS マネジメントコンソール または を使用して作成したフリートメトリクスにタグを付けるには AWS CLI、IAM ポリシーに `iot:TagResource`アクションを含めて、ユーザーアクセス許可を付与する必要があります。IAM ポリシーに `iot:TagResource` が含まれていない場合、タグを使用してフリートメトリクスを作成するアクションは `AccessDeniedException` エラーを返します。

リソースへのタグ付けに関する一般情報については、「[AWS IoT リソースのタグ付け](https://docs.aws.amazon.com//iot/latest/developerguide/tagging-iot.html)」を参照してください。

### IAM ポリシーの例
<a name="managing-fleet-metrics-policy-example"></a>

フリートメトリクスの作成時にタグ付けのアクセス許可を付与する IAM ポリシーの例を参照してください。

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Action": [
				"iot:TagResource"
			],
			"Effect": "Allow",
			"Resource": [
				"arn:aws:iot:*:*:fleetmetric/*"
			]
		},
		{
			"Action": [
				"iot:CreateFleetMetric"
			],
			"Effect": "Allow",
			"Resource": [
				"arn:aws:iot:*:*:index/*",
				"arn:aws:iot:*:*:fleetmetric/*"
			]
		}
	]
}
```

詳細については、[AWS IoTのアクション、リソース、および条件キー](https://docs.aws.amazon.com//service-authorization/latest/reference/list_awsiot.html)を参照してください。