Verwalten der Objektindizierung - AWS IoT Core

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwalten der Objektindizierung

AWS_Things ist der Index für all Ihre Objekte. Sie können aus den folgenden Datenquellen steuern, was indexiert werden soll: AWS IoT Registrierungsdaten, AWS IoT Device Schatten-Daten, AWS IoT Konnektivitätsdaten und Daten zu AWS IoT Device DefenderVerstößen.

Aktivieren der Objektindizierung

Sie verwenden den update-indexing-configurationCLI-Befehl oder die UpdateIndexingConfigurationAPI-Operation, um den AWS_Things Index zu erstellen und seine Konfiguration zu steuern. Mit dem Parameter --thing-indexing-configuration (thingIndexingConfiguration) können Sie steuern, welche Art von Daten indiziert werden (z. B. Registrierungs-, Schatten- und Gerätekonnektivitätsdaten).

Der Parameter --thing-indexing-configuration nimmt eine Zeichenfolge mit der folgenden Struktur an:

{ "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" } ] } }

Objektindizierungsmodus.

Sie können in Ihrer Indizierungskonfiguration verschiedene Indizierungsmodi angeben, je nachdem, aus welchen Datenquellen Sie Geräte indizieren und durchsuchen möchten:

  • thingIndexingMode: Steuert, ob Registry oder Schatten indexiert ist. Wenn thingIndexingMode auf OFF eingestellt ist, ist die Indizierung von Objekten deaktiviert.

  • thingConnectivityIndexingMode: Gibt an, ob die Objektkonnektivitätsdaten indiziert sind.

  • deviceDefenderIndexingMode: Gibt an, ob Device Defender-Daten, die Verstöße verletzen, indexiert werden.

  • namedShadowIndexingMode: Gibt an, ob benannte Schatten-Daten indexiert werden. Um benannte Schatten auszuwählen, die zu Ihrer Flottenindizierungskonfiguration hinzugefügt werden sollen, legen Sie namedShadowIndexingMode als ON fest und geben Sie Ihre benannten Schattennamen unter filter an.

Die folgende Tabelle zeigt die gültigen Werte für jeden Indizierungsmodus und die Datenquelle, die für jeden Wert indexiert ist.

Attribut Zulässige Werte Registrierung Shadow Konnektivität DD-Verstöße Benannter Schatten
thingIndexingMode OFF
REGISTRY
REGISTRY_AND_SHADOW
thingConnectivityIndexingMode Nicht angegeben.
OFF
STATUS
deviceDefenderIndexingMode Nicht angegeben.
OFF
Verstöße
namedShadowIndexingMode Nicht angegeben.
OFF
ON

Verwaltete Felder und benutzerdefinierte Felder

Verwaltete Felder

Verwaltete Felder enthalten Daten, die mit Dingen, Dinggruppen, Geräteschatten, Gerätekonnektivität und Device Defender-Verstößen verknüpft sind. AWS IoT definiert den Datentyp in verwalteten Feldern. Beim Erstellen eines IoT-Objekts geben Sie die Werte jedes verwalteten Felds an. Beispielsweise sind Objektnamen, Objektgruppen und Objektbeschreibungen alles verwaltete Felder. Der Flottenindizierungsservice indiziert verwaltete Felder basierend auf dem von Ihnen angegebenen Indizierungsmodus: Verwaltete Felder können nicht geändert oder in customFields angezeigt werden.

Benutzerdefinierte Felder

Sie können Attribute, Device Schatten-Daten und Daten zu Device Defender-Verstößen aggregieren, indem Sie benutzerdefinierte Felder erstellen, um sie zu indizieren. Das Attribut customFields ist eine Liste von Feld- und Datentyppaaren. Sie können Aggregationsabfragen auf der Grundlage des Datentyps durchführen. Der von Ihnen gewählte Indizierungsmodus wirkt sich auf Felder aus, in denen Sie angeben können. customFields Wenn Sie beispielsweise den Indizierungsmodus REGISTRY angeben, können Sie kein Feld aus einem Schattenobjekt angeben. Sie können den update-indexing-configurationCLI-Befehl verwenden, um die benutzerdefinierten Felder zu erstellen oder zu aktualisieren (einen Beispielbefehl finden Sie unter Beispiele zur Aktualisierung der Indexierungskonfiguration). Weitere Informationen zu RDS CUstom finden Sie unter .

Indizierungsfilter

Der Indexfilter bietet zusätzliche Auswahlmöglichkeiten für benannte Schatten und Geolokalisierungsdaten.

namedShadowNames

Um Ihrer Flottenindizierungskonfiguration benannte Schatten hinzuzufügen, legen Sie namedShadowIndexingMode als ON fest und geben Sie Ihre benannten Schattennamen im namedShadowNames-Filter an.

Beispiel

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

geoLocations

So fügen Sie Ihrer Flottenindexierungskonfiguration Geolokalisierungsdaten hinzu:

  • Wenn Ihre Geolokalisierungsdaten in einem klassischen (unbenannten) Schatten gespeichert sind, legen Sie thingIndexingMode auf REGISTRY_AND_SHADOW fest und geben Sie Ihre Geolokalisierungsdaten im geoLocations-Filter an.

    Der folgende Beispielfilter spezifiziert ein GeoLocation-Objekt in einem klassischen (unbenannten) Schatten:

    "filter": { "geoLocations": [ { "name": "shadow.reported.location", "order": "LonLat" } ] }
  • Wenn Ihre Geolokalisierungsdaten in einem benannten Schatten gespeichert sind, setzen Sie namedShadowIndexingMode auf ON, fügen Sie den Schattennamen im namedShadowNames-Filter hinzu und geben Sie Ihre Geolokalisierungsdaten im geoLocations-Filter an.

    Der folgende Beispielfilter spezifiziert ein GeoLocation-Objekt in einem benannten Schatten (nameShadow1):

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

Weitere Informationen finden Sie in IndexingFilterder AWS IoTAPI-Referenz.

Aktualisieren von Konfigurationsbeispielen für die Indexierung

Verwenden Sie den AWS IoT update-indexing-configuration CLI-Befehl, um Ihre Indizierungskonfiguration zu aktualisieren. Im folgenden Beispiel wird gezeigt, wie update-indexing-configuration verwendet wird.

Kurze Syntax:

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-Syntax:

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} ] } }'

Dieser Befehl liefert keine Ausgabe.

Führen Sie den describe-index CLI-Befehl aus, um den Status des Dingindexes zu überprüfen:

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

Die Ausgabe des Befehls describe-index sieht wie folgt aus:

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

Es kann einen Moment dauern, bis der Flottenindex bei der Flottenindizierung aktualisiert ist. Wir empfehlen, mit der Verwendung zu warten, bis die indexStatus Anzeige AKTIV angezeigt wird. Je nachdem, welche Datenquellen Sie konfiguriert haben, können Sie im Schemafeld unterschiedliche Werte angeben. Weitere Informationen finden Sie unter Beschreiben eines Objektindizents.

Führen Sie den get-indexing-configuration CLI-Befehl aus, um die Konfigurationsdetails für die Indexierung Ihres Objekts abzurufen:

aws iot get-indexing-configuration

Die Ausgabe des Befehls get-indexing-configuration sieht wie folgt aus:

{ "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" } }

Um die benutzerdefinierten Felder zu aktualisieren, können Sie den update-indexing-configuration Befehl ausführen. Das Beispiel ist wie folgt:

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}]'

Dieser Befehl hat der Indizierungskonfiguration shadow.desired.intensity hinzugefügt.

Anmerkung

Beim Aktualisieren der benutzerdefinierten Felder in der Indizierungskonfiguration werden alle vorhandenen benutzerdefinierten Felder überschrieben. Achten Sie darauf, beim Aufrufen von update-indexing-configuration alle benutzerdefinierten Felder anzugeben.

Nachdem der Index neu erstellt wurde, können Sie Aggregationsabfrage für die neu hinzugefügten Felder, Registrierungsdaten, Schattendaten und Statusdaten der Objektkonnektivität verwenden.

Stellen Sie beim Ändern des Indizierungsmodus sicher, dass alle benutzerdefinierten Felder im neuen Indizierungsmodus gültig sind. Wenn Sie beispielsweise im Modus REGISTRY_AND_SHADOW mit dem benutzerdefinierten Feld shadow.desired.temperature beginnen, müssen Sie das benutzerdefinierte Feld shadow.desired.temperature löschen, bevor Sie den Indizierungsmodus in REGISTRY ändern. Wenn Ihre Indizierungskonfiguration benutzerdefinierte Felder enthält, die nicht vom Indizierungsmodus indiziert werden, schlägt die Aktualisierung fehl.

Beschreiben eines Objektindex

Der folgende Befehl zeigt, wie Sie den CLI-Befehl describe-index zum Abrufen des aktuellen Status des Objektindizes verwenden.

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

Die Ausgabe des Befehls sieht wie folgt aus:

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

Wenn Sie zum ersten Mal eine Fleet-Indizierung durchführen, wird Ihr Index AWS IoT erstellt. Sie können den Index nicht abfragen, wenn sich indexStatus im Status BUILDING befindet. Das schema für den Objektindex zeigt an, welche Art von Daten (REGISTRY_AND_SHADOW_AND_CONNECTIVITY_STATUS) indiziert werden.

Wenn die Konfiguration für Ihren Index geändert wird, wird der Index neu erstellt. Der indexStatus während dieses Vorgangs lautet REBUILDING. Sie können Abfragen für Daten im Objektindex ausführen, während er erstellt wird. Wenn Sie beispielsweise die Indexkonfiguration von REGISTRY in REGISTRY_AND_SHADOW ändern, während der Index neu erstellt wird, können Sie Registrierungsdaten abfragen, einschließlich der aktuellen Updates. Sie können die Schattendaten jedoch erst abfragen, wenn die Wiederherstellung abgeschlossen ist. Die benötigte Zeit zum Erstellen oder Neuerstellen des Index hängt von der Menge an Daten ab.

Abhängig von den Datenquellen, die Sie konfiguriert haben, können Sie im Schemafeld unterschiedliche Werte sehen. Die folgende Tabelle zeigt die verschiedenen Schemawerte und die entsprechenden Beschreibungen:

Schema Beschreibung
OFF Es sind keine Datenquellen konfiguriert oder indexiert.
REGISTRY (Nur Registrierungsdaten werden indiziert.)
REGISTRY_AND_SHADOW (Registrierungsdaten und Schatten-Daten werden indiziert.)
REGISTRY_AND_CONNECTIVITY Registrierungsdaten und Konnektivitätsdaten sind indexiert.
REGISTRY_AND_SHADOW_AND_CONNECTIVITY_STATUS Registrierungsdaten, unbenannte (klassische) Schattendaten und Konnektivitätsdaten werden indexiert.
MULTI_INDEXING_MODE

Daten zu Verletzungen durch benannte Schatten- oder Device Defender-Angriffe werden zusätzlich zu Registrierungsdaten, unbenannten (klassischen) Schatten- oder Konnektivitätsdaten indexiert.

Abfragen des Objektindex

Verwenden Sie den CLI-Befehl search-index zum Abfragen von Daten im 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" }

Die JSON-Antwort "connectivity" (aktiviert durch die thingConnectivityIndexingMode=STATUS-Einstellung) gibt einen booleschen Wert und einen Zeitstempel aus, woran zu erkennen ist, ob das Gerät mit dem AWS IoT Core verbunden ist. Das Gerät "mything1" wurde (false) zur POSIX-Zeit aufgrund von CONNECTION_LOST getrennt: Weitere Informationen zu den Gründen für die Unterbrechung der Verbindung finden Sie unter Lifecycle-Ereignisse.

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

Das Gerät "mything2" wurde (true) zur POSIX-Zeit 1556649855046 verbunden:

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

Da Zeitstempel in Millisekunden seit der Epoche angegeben werden, stellt 1556649855046 6:44:15.046 PM am Dienstag, 30. April 2019 (GMT), dar.

Wichtig

Wenn ein Gerät etwa eine Stunde lang getrennt war, fehlt möglicherweise der "timestamp"-Wert und der "disconnectReason"-Wert des Konnektivitätsstatus.

Beschränkungen und Einschränkungen

Dies sind die Einschränkungen und Begrenzungen für AWS_Things.

Schatten-Felder mit komplexen Typen

Ein Schattenfeld wird nur indiziert, wenn der Wert des Felds einfach ist, ein JSON-Objekt, das kein Array enthält, oder ein Array, das vollständig aus einfachen Typen besteht. Mit „einfacher Typ“ ist eine Zeichenfolge, eine Zahl oder eines der Literale true oder false gemeint. Beispielsweise angesichts des folgenden Schattenzustands wird der Wert des Feldes "palette" nicht indiziert, da es sich um ein Array handelt, das Elemente komplexen Typs enthält. Der Wert des Feldes "colors" wird indiziert, da jeder Wert im Array eine Zeichenfolge ist.

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

Die Namen verschachtelter Schattenfelder werden als Zeichenfolge mit Punkt als Trennzeichen (.) gespeichert. Beispielsweise bei einem Schattendokument:

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

Der Name des Feldes three wird als desired.one.two.three gespeichert. Wenn Sie auch ein Schattendokument wie das folgende haben:

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

Beide entsprechen einer Abfrage für shadow.desired.one.two.three:v2. Eine bewährte Methode besteht darin, keine Punkte in Schattenfeldnamen zu verwenden.

Schatten-Metadaten

Ein Feld in einem Schatten-Metadatenbereich wird indiziert, aber nur dann, wenn das entsprechende Feld in dem "state"-Abschnitt des Shadow indiziert ist. (Im vorherigen Beispiel wird das Feld "palette" im Metadatenbereich des Schattens auch nicht indiziert.)

Alle nicht registrierten Geräte

Die Flottenindizierung indexiert den Konnektivitätsstatus für ein Gerät, dessen Verbindung clientId mit der eines in thingName der Registrierung registrierten Geräts übereinstimmt.

Nicht registrierte Schatten

Wenn Sie früher UpdateThingShadoweinen Shadow mit einem Dingnamen erstellen, der nicht in Ihrem AWS IoT Konto registriert wurde, werden Felder in diesem Shadow nicht indexiert. Dies gilt sowohl für den klassischen unbenannten Schatten als auch für den benannten Schatten.

Numerische Werte

Wenn Registrierungs- oder Schattendaten von dem Service als numerischer Wert erkannt werden, werden sie als solche indiziert. Sie können Abfragen erstellen, die Bereiche und Vergleichsoperatoren für numerische Werte umfassen (beispielsweise "attribute.foo<5" oder "shadow.reported.foo:[75 TO 80]"). Um als numerisch erkannt zu werden, muss es sich bei dem Wert der Daten um eine gültige JSON-Nummer vom Literaltyp handeln. Um als numerisch erkannt zu werden, muss der Wert der Daten ein gültiges JSON-Literal des Typs „Zahl“ (eine Ganzzahl von -2^53...2^53-1 oder ein Gleitkomma mit doppelter Genauigkeit und optionaler Exponentialnotation) oder Teil eines Arrays sein, das ausschließlich solche Werte enthält.

Null-Werte

Null-Werte werden nicht indiziert.

Maximale Werte

Maximale Anzahl von benutzerdefinierten Felder für Aggregationsabfragen ist 5.

Maximale Anzahl von angeforderten Perzentilen für Aggregationsabfragen ist 100.

Autorisierung

Sie können den Things-Index in einer AWS IoT Richtlinienaktion wie folgt als Amazon-Ressourcennamen (ARN) angeben.

Aktion Ressource

iot:SearchIndex

Ein Index-ARN (z. B. arn:aws:iot:your-aws-regionyour-aws-account:index/AWS_Things).

iot:DescribeIndex

Ein Index-ARN (z. B. arn:aws:iot:your-aws-region:index/AWS_Things).

Anmerkung

Wenn Sie über die Berechtigungen verfügen, den Flottenindex abzufragen, können Sie auf Daten zu Objekten über die gesamte Flotte hinweg zugreifen.