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.
In diesem Thema:
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. WennthingIndexingMode
aufOFF
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 SienamedShadowIndexingMode
alsON
fest und geben Sie Ihre benannten Schattennamen unterfilter
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 imgeoLocations
-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 imnamedShadowNames
-Filter hinzu und geben Sie Ihre Geolokalisierungsdaten imgeoLocations
-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
oderfalse
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 alsdesired.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 inthingName
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 |
---|---|
|
Ein Index-ARN (z. B. |
|
Ein Index-ARN (z. B. |
Anmerkung
Wenn Sie über die Berechtigungen verfügen, den Flottenindex abzufragen, können Sie auf Daten zu Objekten über die gesamte Flotte hinweg zugreifen.