Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Gérer l'indexation d'objet
AWS_Things
est l'index créé pour l'ensemble de vos objets. Vous pouvez contrôler les éléments à indexer à partir des sources de données suivantes : données de AWS IoT
registre, données AWS IoT Device Shadow, données de AWS IoT connectivité et données de AWS IoT Device Defenderviolations.
Dans cette rubrique :
Activation de l'indexation d'objet
Vous utilisez la commande update-indexing-configurationCLI ou l'opération UpdateIndexingConfigurationAPI pour créer l'AWS_Things
index et contrôler sa configuration. En utilisant le paramètre --thing-indexing-configuration
(thingIndexingConfiguration
), vous contrôlez le type de données (par exemple, les données de registre, shadow, de connectivité des appareils et les données de violations de Device Defender) qui sont indexées.
Le paramètre --thing-indexing-configuration
prend une chaîne avec la structure suivante :
{ "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" } ] } }
Modes d'indexation d’objets
Vous pouvez définir différents modes d'indexation d'objets dans votre configuration d'indexation, en fonction des sources de données que vous souhaitez indexer et à partir desquelles vous souhaitez rechercher des appareils :
-
thingIndexingMode
: Contrôle si le registre ou shadow sont indexés. LorsquethingIndexingMode
est défini surOFF
, l'indexation des objets est désactivée.
-
thingConnectivityIndexingMode
: Indique si les données de connectivité d'objets sont indexées.
-
deviceDefenderIndexingMode
: Indique si les données relatives aux violations de Device Defender sont indexées. -
namedShadowIndexingMode
: Indique si les données fictives nommées sont indexées. Pour sélectionner des shadows nommées à ajouter à la configuration d'indexation de votre flotte, configureznamedShadowIndexingMode
comme étantON
et spécifiez les noms de vos shadows nommées dansfilter
.
Le tableau ci-dessous indique les valeurs valides pour chaque mode d'indexation et la source de données indexée pour chaque valeur.
Attribut | Valeurs valides | Registre | Shadow | Connectivité | Violations du DD | Shadow nommé |
---|---|---|---|---|---|---|
thingIndexingMode |
OFF | |||||
REGISTRY | ✓ | |||||
REGISTRY_AND_SHADOW | ✓ | ✓ | ||||
thingConnectivityIndexingMode |
Non spécifié. | |||||
OFF | ||||||
STATUS | ✓ | |||||
deviceDefenderIndexingMode |
Non spécifié. | |||||
OFF | ||||||
VIOLATIONS | ✓ | |||||
namedShadowIndexingMode |
Non spécifié. | |||||
OFF | ||||||
ON | ✓ |
Champs gérés et champs personnalisés
Champs gérés
Les champs gérés contiennent des données associées aux objets, aux groupes d'objets, aux ombres des appareils, à la connectivité des appareils et aux violations de Device Defender. AWS IoT définit le type de données dans les champs gérés. Vous spécifiez les valeurs de chaque champ géré lorsque vous créez un objet AWS IoT
. Par exemple, les noms d'objets, les groupes d'objets et les descriptions d'objets sont tous des champs gérés. L'indexation de flotte indexe les champs gérés en fonction du mode d'indexation que vous spécifiez. Les champs gérés ne peuvent pas être modifiés ni s'afficher dans customFields
.
Champs personnalisés
Vous pouvez agréger les attributs des objets, les données de Device Shadow et les données relatives aux violations de Device Defender en créant des champs personnalisés pour les indexer. L'attribut customFields
est une liste de paires de noms de champs et de types de données. Vous pouvez effectuer des requêtes d'agrégation en fonction du type de données. Le mode d'indexation que vous choisissez et qui affecte les champs peut être spécifié dans customFields
. Par exemple, si vous spécifiez le mode d'indexation REGISTRY
, vous ne pouvez pas spécifier un champ personnalisé à partir d'une shadow d'objet. Vous pouvez utiliser la commande update-indexing-configurationCLI pour créer ou mettre à jour les champs personnalisés (voir un exemple de commande dans la section Mise à jour des exemples de configuration d'indexation). Pour plus d’informations, consultez Champs personnalisés.
Filtre d'indexation
Le filtre d'indexation fournit des sélections supplémentaires pour les shadows nommées et les données de géolocalisation.
namedShadowNames
Pour sélectionner des shadows nommées à ajouter à la configuration d'indexation de votre flotte, configurez namedShadowIndexingMode
comme étant ON
et spécifiez les noms de vos shadows nommées dans namedShadowNames
.
Exemple
"filter": { "namedShadowNames": [ "namedShadow1", "namedShadow2" ] }
geoLocations
Pour ajouter des données de géolocalisation à la configuration d'indexation de votre flotte :
-
Si vos données de géolocalisation sont stockées dans une shadow classique (sans nom), définissez
thingIndexingMode
REGISTRY_AND_SHADOW et spécifiez vos données de géolocalisation dans le filtregeoLocations
.L'exemple de filtre ci-dessous spécifie un objet GeoLocation dans une shadow classique (sans nom) :
"filter": { "geoLocations": [ { "name": "shadow.reported.location", "order": "LonLat" } ] }
-
Si vos données de géolocalisation sont stockées dans une shadow nommée,
namedShadowIndexingMode
réglez-la sur ON, ajoutez le nom de shadow dans le filtrenamedShadowNames
et spécifiez vos données de géolocalisation dans le filtregeoLocations
.L'exemple de filtre ci-dessous spécifie un objet geoLocation dans une shadow nommée (
nameShadow1
) :"filter": { "namedShadowNames": [ "namedShadow1" ], "geoLocations": [ { "name": "shadow.name.namedShadow1.reported.location", "order": "LonLat" } ] }
Pour plus d'informations, consultez le IndexingFilterGuide de référence des AWS IoTAPI.
Mise à jour des exemples de configuration d'indexation
Pour mettre à jour votre configuration d'indexation, utilisez la commande AWS IoT update-indexing-configuration CLI. Les exemples suivants montrent comment utiliser update-indexing-configuration.
Syntaxe courte :
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}]'
Syntaxe 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} ] } }'
Cette commande ne produit aucune sortie.
Pour vérifier l'état de l'index des objets, exécutez la commande CLI describe-index
:
aws iot describe-index --index-name "AWS_Things"
La sortie de la commande describe-index
ressemble à ce qui suit :
{ "indexName": "AWS_Things", "indexStatus": "ACTIVE", "schema": "MULTI_INDEXING_MODE" }
Note
L'indexation de flotte peut prendre un certain temps pour mettre à jour l'indice de flotte. Nous vous recommandons d'attendre que le indexStatus
affiche ACTIVE avant de l'utiliser. Le champ de schéma peut contenir différentes valeurs en fonction des sources de données que vous avez configurées. Pour plus d'informations, consultez Description d’un index d'objet.
Pour obtenir les détails de configuration de l'indexation de votre appareil, exécutez la commande CLI get-indexing-configuration
:
aws iot get-indexing-configuration
La sortie de la commande get-indexing-configuration
ressemble à ce qui suit :
{ "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" } }
Pour mettre à jour les champs personnalisés, vous pouvez exécuter la commande update-indexing-configuration
. Un exemple se présente comme suit :
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}]'
Cette commande a ajouté shadow.desired.intensity
à la configuration d'indexation.
Note
La mise à jour de la configuration d'indexation des champs personnalisés remplace tous les champs personnalisés existants. Assurez-vous de spécifier tous les champs personnalisés lorsque vous appelez update-indexing-configuration.
Une fois l'index régénéré, vous pouvez utiliser une requête d'agrégation sur les champs nouvellement ajoutés et faire des recherches dans les données de registre, les données de shadow et les données de statut de connectivité d'objet.
Lorsque vous modifiez le mode d'indexation, assurez-vous que tous vos champs personnalisés sont valides à l'aide du nouveau mode d'indexation. Par exemple, si vous commencez par le mode REGISTRY_AND_SHADOW
avec un champ personnalisé appelé, shadow.desired.temperature
, vous devez supprimer le champ personnalisé shadow.desired.temperature
avant de remplacer le mode d'indexation par REGISTRY
. Si votre configuration d'indexation contient des champs personnalisés qui ne sont pas indexés par le mode d'indexation, la mise à jour échoue.
Description d'un index d'objets
La commande suivante montre comment utiliser la commande d'interface de ligne de commande describe-index pour extraire l'état actuel de l'index d'objets.
aws iot describe-index --index-name "AWS_Things"
La réponse de la commande peut ressembler à ce qui suit :
{ "indexName": "AWS_Things", "indexStatus": "BUILDING", "schema": "REGISTRY_AND_SHADOW_AND_CONNECTIVITY_STATUS" }
La première fois que vous indexez une flotte, votre AWS IoT index est créé. Lorsque indexStatus
est dans l'état BUILDING
, vous ne pouvez pas interroger l'index. Le schema
de l'index d'objets indique le type de données (REGISTRY_AND_SHADOW_AND_CONNECTIVITY_STATUS
) qui est indexé.
Si vous modifiez la configuration de votre index, ce dernier est recréé. Lors de ce processus, l'indexStatus
est REBUILDING
. Vous pouvez exécuter des requêtes sur les données de l'index d’objets pendant sa régénération. Par exemple, si vous faites passer la configuration d'index de REGISTRY
à REGISTRY_AND_SHADOW
, pendant sa régénération, vous pouvez interroger les données de registre, y compris les dernières mises à jour. Toutefois, vous ne pouvez pas interroger les données des shadows tant que la reconstruction n'est pas terminée. Le temps nécessaire pour créer ou recréer l'index dépend de la quantité de données.
Vous pouvez voir différentes valeurs dans le champ de schéma en fonction des sources de données que vous avez configurées. Le tableau suivant affiche les différentes valeurs de schéma et les descriptions correspondantes :
Schema | Description |
---|---|
OFF | Aucune source de données n'est configurée ou indexée. |
REGISTRY | Les données du registre sont indexées. |
REGISTRY_AND_SHADOW | Les données du registre et les données shadow sans nom (classiques) sont indexées. |
REGISTRY_ET_CONNECTIVITÉ_ | Les données de registre et les données de connectivité sont indexées. |
REGISTRY_AND_SHADOW_AND_CONNECTIVITY_STATUS REGISTRY_AND_CONNECTIVITY_STATUS | Les données de registre, les données shadow sans nom (classiques) et les données de connectivité sont indexées. |
MULTI_INDEXING_MODE | Les données relatives aux violations de Named Shadow ou Device Defender sont indexées, en plus des données de registre, shadow anonyme (classique) ou de connectivité. |
Interrogation d'un index d'objets
Utilisez la commande de l'interface de ligne de commande search-index pour interroger les données dans l'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" }
Dans la réponse JSON "connectivity"
(telle qu'activée par le paramètre thingConnectivityIndexingMode=STATUS
), fournit une valeur booléenne, un horodatage et un déconnecterReason qui indique si l'appareil est connecté à AWS IoT Core. L’appareil "mything1"
déconnecté (false
) à l'heure POSIX 1556649874716
à cause de CONNECTION_LOST
. Pour plus d’informations sur les motifs de déconnexion, consultez Événements du cycle de vie.
"connectivity": { "connected":false, "timestamp":1556649874716, "disconnectReason": "CONNECTION_LOST" }
L'appareil "mything2"
connecté (true
) à l'heure POSIX 1556649855046
:
"connectivity": { "connected":true, "timestamp":1556649855046 }
Les horodatages sont indiqués en millisecondes depuis l'époque Unix, donc 1556649855046
représente 6:44:15.046 PM le mardi 30 avril 2019 (UTC).
Important
Si un appareil a été déconnecté pendant environ une heure, la valeur "timestamp"
et la valeur "disconnectReason"
de l'état de connectivité peuvent être manquantes.
Restrictions et limitations
Les restrictions et limitations pour AWS_Things
sont les suivantes.
- Champs Shadow de types complexes
-
Un champ shadow est indexé uniquement si la valeur du champ est un type simple, tel qu’un objet JSON qui ne contient pas de tableau ou un tableau qui se compose entièrement de types simples. (Un type simple représente une chaîne, un nombre ou un des littéraux
true
oufalse
.) Par exemple, étant donné l'état du shadow suivant, la valeur du champ"palette"
n’est pas indexée, car il s'agit d'un tableau dont les éléments ont des types complexes. La valeur du champ"colors"
est indexée, car chaque valeur du tableau est une chaîne.{ "state": { "reported": { "switched": "ON", "colors": [ "RED", "GREEN", "BLUE" ], "palette": [ { "name": "RED", "intensity": 124 }, { "name": "GREEN", "intensity": 68 }, { "name": "BLUE", "intensity": 201 } ] } } }
- Noms de champs shadow imbriqués
-
Les noms des champs shadow imbriqués sont stockés sous la forme d'une chaîne délimitée par un point (.). Par exemple, soit un document shadow :
{ "state": { "desired": { "one": { "two": { "three": "v2" } } } } }
Le nom du champ
three
est stocké sous la formedesired.one.two.three
. Si vous disposez également d'un document shadow, il est stocké comme ceci :{ "state": { "desired": { "one.two.three": "v2" } } }
Ils correspondent tous deux à une requête pour
shadow.desired.one.two.three:v2
. Conformément aux bonnes pratiques, n'utilisez pas de points dans les noms de champs shadow. - Métadonnées de shadow
-
Un champ d'une section de métadonnées de shadow est indexé, à l'unique condition que le champ correspondant dans la section
"state"
du shadow soit indexé. (Dans l'exemple précédent, le champ"palette"
de la section des métadonnées du shadow n’est pas indexé non plus.) - Appareils non enregistrés
- Shadows non enregistrés
-
Si vous créez une ombre en utilisant un nom d'objet qui n'a pas été enregistré dans votre AWS IoT compte, les champs de cette ombre ne sont pas indexés. UpdateThingShadow Cela s'applique à la fois à la shadow classique anonyme et nommée.
- Valeur numériques
-
Si des données de registre ou de shadow sont reconnues par le service en tant que valeurs numériques, elles sont indexées en tant que telles. Vous pouvez formuler des requêtes comportant des plages et des opérateurs de comparaison sur les valeurs numériques (par exemple,
"attribute.foo<5"
ou"shadow.reported.foo:[75 TO 80]"
). Pour être reconnue comme numérique, la valeur des données doit être un numéro JSON valide et littéral. La valeur peut être un entier compris entre -2 ^ 53...2 ^ 53-1, une virgule flottante double précision avec une notation exponentielle facultative ou une partie d'un tableau contenant uniquement ces valeurs. - Valeurs nulles
-
Les valeurs nulles ne sont pas indexées.
- Valeurs maximales
-
Le nombre maximal de champs personnalisés pour les requêtes d'agrégation est 5.
Le nombre maximal de centiles demandés pour les requêtes d'agrégation est 100.
Autorisation
Vous pouvez spécifier l'index des objets sous la forme d'un Amazon Resource Name (ARN) dans le cadre d'une action AWS IoT politique, comme suit.
Action | Ressource |
---|---|
|
Un ARN d'index (par exemple, |
|
Un ARN d'index (par exemple, |
Note
Si vous disposez d'autorisations pour interroger l'index de la flotte, vous pouvez accéder aux données d'objets dans la totalité de la flotte.