モノのインデックス作成の管理 - AWS IoT Core

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

モノのインデックス作成の管理

すべてのモノに対して作成されるインデックスは AWS_Things です。次のデータソースからインデックス化する対象を制御できます: AWS IoT レジストリデータ、AWS IoT Device Shadow データ、AWS IoT 接続性データ、および AWS IoT Device Defender 違反データ

モノのインデックス作成の有効化

update-indexing-configuration CLI コマンドまたは UpdateIndexingConfigurationAPIオペレーションを使用して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" } ] } }

モノのインデックス作成モード

インデックス作成設定では、デバイスのインデックス作成と検索を行うデータソースに応じて、さまざまなモノのインデックス作成モードを指定できます。

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

  • thingConnectivityIndexingMode: 属性は、モノの接続性データにインデックスを付けるかどうかを指定します。

  • deviceDefenderIndexingMode: 属性は、Device Defender 違反のデータにインデックスを付けるかどうかを指定します。

  • namedShadowIndexingMode: 属性は、名前付きシャドウデータにインデックスを付けるかどうかを指定します。フリートのインデックス作成設定に追加する名前付きシャドウを選択するには、namedShadowIndexingModeON に設定して、filter で名前付きのシャドウ名を指定します。

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

属性 有効値 レジストリ シャドウ 接続 DD 違反 名前付きシャドウ
thingIndexingMode OFF
REGISTRY
REGISTRY_AND_SHADOW
thingConnectivityIndexingMode 未指定。
OFF
STATUS
deviceDefenderIndexingMode 未指定。
OFF
VIOLATIONS
namedShadowIndexingMode 未指定。
OFF
ON

管理対象フィールドとカスタムフィールド

管理対象フィールド

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

カスタムフィールド

カスタムフィールドを作成してインデックスを作成し、属性、Device Shadow データ、および Device Defender 違反のデータを集計できます。customFields 属性は、フィールド名とデータ型のペアのリストです。データ型に基づいて、集計クエリを実行できます。選択するインデックス作成モードは、customFields で指定できるフィールドに影響します。例えば、REGISTRY インデックス作成モードを指定した場合、Thing Shadow からカスタムフィールドを指定することはできません。update-indexing-configuration CLI コマンドを使用して、カスタムフィールドを作成または更新できます (「インデックス作成設定例の更新」のコマンド例を参照してください)。詳細については、「Custom fields」を参照してください。

インデックス作成フィルター

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

namedShadowNames

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

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

geoLocations

フリートのインデックス作成設定に位置情報データを追加するには:

  • 位置情報データがクラシック (名前なし) シャドウに保存されている場合は、 thingIndexingMode を REGISTRY_AND_ に設定しSHADOW、 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 IoTAPIリファレンス IndexingFilter」の「」を参照してください。

インデックス作成の設定例を更新する

インデックス作成設定を更新するには、 AWS IoT update-indexing-configuration CLI コマンドを使用します。次の例では、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から使用することをお勧めします。スキーマフィールドには、設定したデータソースに応じて異なる値を指定できます。詳細については、「モノのインデックスの説明」を参照してください。

モノのインデックス作成設定の詳細を取得するには、 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 カスタムフィールドを削除する必要があります。インデックス作成設定にインデックス作成モードによってインデックス化されていないカスタムフィールドが含まれている場合、更新は失敗します。

モノのインデックスの説明

次のコマンドは、 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 構築されます。indexStatusBUILDING の状態の場合、インデックスに対してクエリを実行することはできません。モノのインデックスの schema はどのタイプのデータのインデックスが作成されるかを示します (REGISTRY_AND_SHADOW_AND_CONNECTIVITY_STATUS)。

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

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

Schema 説明
OFF データソースが設定またはインデックス化されていません。
REGISTRY レジストリデータがインデックス化されます。
REGISTRY_AND_SHADOW レジストリデータおよび名前のない (クラシック) シャドウデータがインデックス化されます。
REGISTRY_AND_CONNECTIVITY レジストリデータおよび接続性データがインデックス化されます。
REGISTRY_AND_SHADOW_AND_CONNECTIVITY_STATUS レジストリデータ、名前のない (クラシック) シャドウデータ、および接続性データがインデックス化されます。
MULTI_INDEXING_MODE

レジストリ、名前のない (クラシック) シャドウ、または接続性データに加えて、名前付きシャドウまたは Device Defender 違反のデータがインデックス化されます。

モノのインデックスのクエリ

search-index CLI コマンドを使用して、インデックス内のデータをクエリします。

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設定で有効) はブール値、タイムスタンプ、およびデバイスが に接続されているかどうか disconnectReason を示す を提供します AWS IoT Core。デバイスは 1556649874716のためにPOSIX、 時に"mything1"切断されました (falseCONNECTION_LOST。切断理由の詳細については、「ライフサイクルイベント」を参照してください。

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

デバイスがPOSIX時間 に接続"mything2"しました (true1556649855046

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

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

重要

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

制約と制限

以下は、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" } } } } }

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

{ "state": { "desired": { "one.two.three": "v2" } } }

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

シャドウメタデータ

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

未登録のデバイス

フリートインデックスは、接続 clientIdレジストリに登録されているモノの thingName と同じであるデバイスの接続ステータスをインデックス化します。

未登録シャドウ

UpdateThingShadow を使用して AWS IoT 、アカウントに登録されていないモノの名前を使用してシャドウを作成する場合、このシャドウのフィールドはインデックス化されません。これは、名前のないクラシックシャドウと名前付きシャドウの両方に適用されます。

数値

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

Null 値

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

最大値

集計クエリのカスタムフィールドの最大数は 5 です。

集計クエリで要求されるパーセンタイルの最大数は 100 です。

Authorization

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

アクション リソース

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)。

注記

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