Administración de la indexación de objetos - AWS IoT Core

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Administración de la indexación de objetos

El índice creado para todos sus objetos es AWS_Things. Puede controlar qué indexar de los siguientes orígenes de datos: datos de registro de AWS IoT, datos de AWS IoT Device Shadow, datos de conectividad de AWS IoT y datos de infracciones de AWS IoT Device Defender.

Habilitación de la indexación de objetos

El update-indexing-configurationCLIcomando o la UpdateIndexingConfigurationAPIoperación se utilizan para crear el AWS_Things índice y controlar su configuración. Utilizando el parámetro --thing-indexing-configuration (thingIndexingConfiguration), controla qué tipo de datos se indexan (por ejemplo, registro, sombra, datos de conectividad del dispositivo y datos de infracciones de Device Defender).

El parámetro --thing-indexing-configuration toma una cadena con la siguiente estructura:

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

Modos de indexación de objetos

Puede especificar distintos modos de indexación en su configuración de indexación, en función de los orígenes de datos que desee indexar y de los dispositivos desde los que desee buscar:

  • thingIndexingMode: controla si el registro o la sombra están indexados. Cuando thingIndexingMode se establece en OFF, la indexación de objetos está desactivada.

  • thingConnectivityIndexingMode: especifica si los datos de conectividad de objetos están indexados.

  • deviceDefenderIndexingMode: especifica si los datos de infracciones de Device Defender están indexados.

  • namedShadowIndexingMode: especifica si los datos ocultos con nombre están indexados. Para seleccionar sombras con nombre y agregarlas a la configuración de indexación de su flota, establezca namedShadowIndexingMode en ON y especifique los nombres de las sombras con nombre en filter.

La siguiente tabla muestra los valores válidos para cada modo de indexación y el origen de datos que está indexado para cada valor.

Atributo Valores válidos Registro Sombra Conectividad Infracciones de DD Sombra con nombre
thingIndexingMode OFF
REGISTRY
REGISTRY_AND_SHADOW
thingConnectivityIndexingMode No especificado.
OFF
STATUS
deviceDefenderIndexingMode No especificado.
OFF
VIOLATIONS
namedShadowIndexingMode No especificado.
OFF
ON

Campos administrados y campos personalizados

Campos administrados

Los campos gestionados contienen datos asociados a cosas, grupos de cosas, dispositivos ocultos, conectividad de los dispositivos e infracciones de Device Defender. AWS IoT define el tipo de datos en los campos gestionados. El usuario especifica los valores de cada campo administrado cuando se crea un objeto de AWS IoT . Por ejemplo, los nombres de objetos, los grupos de objetos y las descripciones de objetos son todos campos administrados. La indexación de flotas indexa los campos administrados en función del modo de indexación que usted especifique. Los campos administrados no se pueden cambiar ni pueden aparecer en customFields.

Campos personalizados

Puede agregar atributos, datos de Device Shadow y datos de infracciones de Device Defender creando campos personalizados para indexarlos. El atributo customFields es una lista de pares de campos y tipos de datos con nombre. Puede realizar consultas de agregación en función del tipo de datos. El modo de indexación que elija afecta a los campos se puede especificar en customFields. Por ejemplo, si especifica el modo de indexación REGISTRY, no puede especificar un campo personalizado de una sombra de objeto. Puede usar el update-indexing-configurationCLIcomando para crear o actualizar los campos personalizados (consulte un comando de ejemplo en Actualización de los ejemplos de configuración de indexación). Para obtener más información, consulte Campos personalizados.

Filtro de indexación

El filtro de indexación proporciona selecciones adicionales para las sombras con nombre y los datos de geolocalización.

namedShadowNames

Para añadir sombras con nombre a su configuración de indexación de flotas, establezca namedShadowIndexingMode en ON y especifique los nombres de las sombras con nombre con el filtro namedShadowNames.

Ejemplo

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

geoLocations

Para añadir datos de geolocalización a su configuración de indexación de flotas:

  • Si los datos de geolocalización se almacenan en una sombra clásica (sin nombre), thingIndexingMode establézcala en REGISTRY _ AND _ SHADOW y especifique los datos de geolocalización en el filtro. geoLocations

    El siguiente filtro de ejemplo especifica un geoLocation objeto en una sombra clásica (sin nombre):

    "filter": { "geoLocations": [ { "name": "shadow.reported.location", "order": "LonLat" } ] }
  • Si los datos de geolocalización están almacenados en una sombra con nombre, establezca namedShadowIndexingMode en ON, añada el nombre de la sombra al filtro namedShadowNames y especifique los datos de geolocalización en el filtro geoLocations.

    El siguiente filtro de ejemplo especifica un geoLocation objeto en una sombra con nombre (nameShadow1):

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

Para obtener más información, consulte IndexingFilterAWS IoT APIReference.

Actualización de ejemplos de configuración de indexación

Para actualizar la configuración de indexación, utilice el AWS IoT update-indexing-configuration CLI comando. En los siguientes ejemplos se muestra cómo utilizar update-indexing-configuration.

Sintaxis corta:

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

JSONsintaxis:

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

Este comando no proporciona ninguna salida.

Para comprobar el estado del índice de cosas, ejecute el describe-index CLI comando:

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

El resultado del comando describe-index tendrá un aspecto similar al siguiente:

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

La indexación de la flota puede tardar un momento en actualizar el índice de la flota. Recomendamos esperar a que se indexStatus muestre ACTIVE antes de usarlo. Puede tener valores diferentes en el campo de esquema en función de los orígenes de datos que haya configurado. Para obtener más información, consulte Descripción de un índice de objeto.

Para obtener los detalles de la configuración de indexación, ejecute el get-indexing-configuration CLI comando:

aws iot get-indexing-configuration

El resultado del comando get-indexing-configuration tendrá un aspecto similar al siguiente:

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

Para actualizar los campos personalizados, puede ejecutar el comando update-indexing-configuration. A continuación tiene un ejemplo:

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

Este comando se agregó shadow.desired.intensity a la configuración de indexación.

nota

La actualización de los campos personalizados en la configuración de indexación sobrescribe todos los campos personalizados existentes. Asegúrese de especificar todos los campos personalizados cuando llame a update-indexing-configuration.

Después de reconstruir el índice, puede utilizar una consulta de agregación en los campos recién agregados, los datos de registro de búsqueda, los datos de sombras y los datos de estado de conectividad de objetos.

Al cambiar el modo de indexación, asegúrese de que todos los campos personalizados son válidos en el nuevo modo de indexación. Por ejemplo, si utiliza el modo REGISTRY_AND_SHADOW con un campo personalizado llamado shadow.desired.temperature, debe eliminar el campo personalizado shadow.desired.temperature antes de cambiar el modo de indexación a REGISTRY. Si la configuración de indexación contiene campos personalizados que no están indexados por el modo de indexación, se producirá un error en la actualización.

Descripción de un índice de objeto

El siguiente comando le muestra cómo utilizar el describe-index CLI comando para recuperar el estado actual del índice de cosas.

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

La respuesta del comando tendrá un aspecto similar al siguiente:

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

La primera vez que indexa la flota, AWS IoT crea su índice. Cuando indexStatus está en el estado BUILDING, no se puede consultar el índice. El valor schema del índice de objetos indica qué tipo de datos (REGISTRY_AND_SHADOW_AND_CONNECTIVITY_STATUS) se indexan.

Si se cambia la configuración del índice, el índice se vuelve a compilar. Durante este proceso, indexStatus es REBUILDING. Puede ejecutar consultas en los datos del índice de objetos mientras se está generando. Por ejemplo, si cambia la configuración del índice de REGISTRY a REGISTRY_AND_SHADOW, cuando el índice se vuelve a generar, puede consultar los datos del registro, incluidas las últimas actualizaciones. Sin embargo, no puede consultar los datos de sombra hasta que se complete la recompilación. El tiempo que tarda en compilar o recompilar el índice depende de la cantidad de datos.

Puede ver diferentes valores en el campo de esquema en función de los orígenes de datos que haya configurado. En la siguiente tabla, se muestran los diferentes valores de esquema y las descripciones correspondientes:

Esquema Descripción
OFF No hay ningún origen de datos configurado ni indexado.
REGISTRY Solo se indexan los datos de registro.
REGISTRY_AND_SHADOW Se indexan los datos del registro y los datos de sombras sin nombre (clásicos).
REGISTRY_AND_CONNECTIVITY Se indexan los datos de registro y conectividad.
REGISTRY_AND_SHADOW_AND_CONNECTIVITY_STATUS Se indexan los datos de registro, los datos de sombras sin nombre (clásicos) y los datos de conectividad.
MULTI_INDEXING_MODE

Se indexan los datos de sombras con nombre o las infracciones de Device Defender, además de los datos de registro, de sombras sin nombre (clásicos) o de conectividad.

Consulta de un índice de objeto

Utilice el search-index CLI comando para consultar los datos del índice.

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

En la JSON respuesta, "connectivity" (según lo habilite la thingConnectivityIndexingMode=STATUS configuración), proporciona un valor booleano, una marca de tiempo y una disconnectReason que indica si el dispositivo está conectado a. AWS IoT Core El dispositivo se "mything1" desconectó (false) en algún momento debido aPOSIX. 1556649874716 CONNECTION_LOST Para obtener información sobre los motivos de desconexión, consulte Eventos del ciclo de vida.

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

El dispositivo "mything2" conectado (true) en POSIX ese momento1556649855046:

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

Las marcas horarias se muestran en milisegundos desde la época, por lo que 1556649855046 representan las 18:44:15 046 p. m. del martes 30 de abril de 2019 (). UTC

importante

Si un dispositivo se ha desconectado durante aproximadamente una hora, el valor "timestamp" y el valor "disconnectReason" del estado de conectividad podrían no aparecer.

Restricciones y limitaciones

Estas son las restricciones y limitaciones de AWS_Things.

Campos de sombra con tipos complejos

Un campo oculto se indexa solo si el valor del campo es de un tipo simple, como un JSON objeto que no contiene una matriz o una matriz que consta exclusivamente de tipos simples. Un tipo sencillo es una cadena, un número o uno de los literales true o false. Por ejemplo, dado el siguiente estado de sombra, el valor del campo "palette" no se indexa porque es una matriz que incluye elementos de tipos complejos. El valor del campo "colors" sí se indexará porque cada valor de la matriz es una cadena.

{ "state": { "reported": { "switched": "ON", "colors": [ "RED", "GREEN", "BLUE" ], "palette": [ { "name": "RED", "intensity": 124 }, { "name": "GREEN", "intensity": 68 }, { "name": "BLUE", "intensity": 201 } ] } } }
Nombres de campos de sombra anidados

Los nombres de los campos de sombra anidados se almacenan como una cadena delimitada por punto (.). Por ejemplo, dado un documento de sombra:

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

El nombre del campo three se almacena como desired.one.two.three. Si también tiene un documento de sombra, se guarda del modo siguiente:

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

Ambos coinciden con una consulta para shadow.desired.one.two.three:v2. La práctica recomendada es no utilizar puntos en los nombres de campos de sombra.

Metadatos de sombra

Un campo en una sección de metadatos de sombra se indexa, pero solo si se indexa el campo correspondiente en la sección "state" de la sombra. (En el ejemplo anterior, el campo "palette" de la sección de metadatos de la sombra tampoco se indexa).

Dispositivos no registrados

La indexación de flotas indexa el estado de conectividad de un dispositivo cuya conexión clientId es la misma que la thingName de un dispositivo registrado en el Registro.

Sombras no registradas

Si antes UpdateThingShadowcreabas una sombra con el nombre de un objeto que no estaba registrado en tu AWS IoT cuenta, los campos de esta sombra no se indexarán. Esto se aplica tanto a la sombra sin nombre clásica como a la sombra con nombre.

Valores numéricos

Si el servicio reconoce como valor numérico algún dato de sombra o de registro, se indexa como tal. Puede formar consultas que impliquen rangos y operadores de comparación en valores numéricos (por ejemplo "attribute.foo<5" o "shadow.reported.foo:[75 TO 80]"). Para que se reconozca como numérico, el valor de los datos debe ser un JSON número válido de tipo literal. El valor puede ser un entero en el rango -2^53...2^53-1, un punto flotante de doble precisión con notación exponencial opcional, o parte de una matriz que contenga solo estos valores.

Valores nulos

Los valores nulos no se indexan.

Valores máximos

El número máximo de campos personalizados para consultas de agregación es 5.

El número máximo de percentiles solicitados para consultas de agregación es 100.

Autorización

Puede especificar el índice de cosas como un nombre de recurso de Amazon (ARN) en una acción AWS IoT política, de la siguiente manera.

Acción Recurso

iot:SearchIndex

Un índice ARN (por ejemplo,arn:aws:iot:your-aws-regionyour-aws-account:index/AWS_Things).

iot:DescribeIndex

Un índice ARN (por ejemplo,arn:aws:iot:your-aws-region:index/AWS_Things).

nota

Si tiene los permisos para consultar el índice de la flota, podrá obtener acceso a los datos de los objetos en toda la flota.