

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.

# Indexación de flotas
<a name="iot-indexing"></a>

Puede utilizar la indexación de flotas para indexar, buscar y agregar los datos de sus dispositivos de los siguientes orígenes: [registro de AWS IoT](thing-registry.md), [AWS IoT Device Shadow](iot-device-shadows.md), [conectividad de AWS IoT](life-cycle-events.md), [Catálogo de paquetes de software de AWS IoT Device Management](software-package-catalog.md) e infracciones de [AWS IoT Device Defender](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/what-is-device-defender.html). Puede consultar un grupo de dispositivos y agregar estadísticas en los registros de dispositivos que se basen en diferentes combinaciones de atributos del dispositivo, como el estado, la conectividad y las infracciones de los dispositivos. Con la indexación de flotas, puede organizar, investigar y solucionar los problemas de su flota de dispositivos.

La indexación de flotas ofrece las siguientes funciones.

## Administración de actualizaciones de índices
<a name="iot-indexing-manage-index-update"></a>

Puede configurar un índice de flota para indexar las actualizaciones de sus grupos de objetos, registros de objetos, dispositivos ocultos, conectividad de dispositivos e infracciones de dispositivos. Cuando activa la indexación de flotas, AWS IoT crea un índice para sus objetos o grupos de objetos. `AWS_Things` es el índice creado para todos los objetos. `AWS_ThingGroups` es el índice que contiene todos los grupos de objetos. Una vez activa la indexación de flotas, puede ejecutar consultas en su índice. Por ejemplo, puede encontrar todos los dispositivos portátiles con una duración de batería superior al 70 por ciento. AWS IoT actualiza el índice continuamente con sus datos más recientes. Para obtener más información, consulte [Administración de la indexación de flotas](managing-fleet-index.md).

## Consulta de estado de conectividad de un dispositivo específico
<a name="querying-connectivity-status-for-specific-device"></a>

Esta API proporciona acceso de baja latencia y alto rendimiento a la información de conectividad específica del dispositivo más reciente. Para obtener más información, consulte [Estado de conexión del dispositivo](https://docs.aws.amazon.com/iot/latest/developerguide/device-connectivity-status.html).

## Buscar en todos los orígenes de datos
<a name="iot-indexing-search-data-source"></a>

Puede crear una cadena de consulta basada en [un lenguaje de consulta](query-syntax.md) y utilizarla para buscar en todos los orígenes de datos. También debe configurar los orígenes de datos en la configuración de indexación de flotas para que la configuración de indexación contenga los orígenes de datos en los que desea buscar. En la cadena de consulta se describen los elementos que desea buscar. Puede crear consultas mediante campos AWS gestionados, campos personalizados y cualquier atributo de sus fuentes de datos indexadas. Para obtener más información sobre los orígenes de datos que admiten la indexación de flotas, consulte [Administración de la indexación de objetos](managing-index.md).

## Consulta de datos agregados
<a name="iot-indexing-query-aggregate-data"></a>

Puede buscar en sus dispositivos datos agregados y obtener estadísticas, percentiles, cardinales o una lista de elementos con consultas de búsqueda sobre campos específicos. Puede ejecutar agregaciones en los campos AWS gestionados o en cualquier atributo que configure como campos personalizados en la configuración de indexación de la flota. Para obtener más información sobre las consultas de agregación, vaya a [Consulta de datos agregados](index-aggregate.md).

## Monitorización de datos agregados y creación alarmas mediante métricas de flota
<a name="iot-indexing-monitor-aggregate-date"></a>

Puedes usar las métricas de la flota para enviar datos agregados CloudWatch automáticamente, analizar tendencias y crear alarmas para monitorear el estado agregado de tu flota en función de umbrales predefinidos. Para obtener información sobre las métricas de la flota, consulte [Métricas de flota](iot-fleet-metrics.md).

# Administración de la indexación de flotas
<a name="managing-fleet-index"></a>

La indexación de flotas administra dos tipos de índices por usted: la indexación de objetos y la indexación de grupos de objetos. 

## Indexación de objetos
<a name="thing-index"></a>

El índice creado para todos sus objetos se llama `AWS_Things`. La indexación de objetos admite los siguientes orígenes de datos: datos de [registro de AWS IoT](thing-registry.md), datos de [AWS IoT Device Shadow](iot-device-shadows.md), datos de [conectividad de AWS IoT](life-cycle-events.md) y datos de infracciones de [AWS IoT Device Defender](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/what-is-device-defender.html). Al agregar estos orígenes de datos a la configuración de indexación de su flota, puede buscar objetos, consultar datos agregados y crear grupos de objetos dinámicos y métricas de flota basados en sus consultas de búsqueda.

**Registro**:AWS IoT proporciona un registro que le ayuda a gestionar las cosas. Puede agregar los datos de registro a la configuración de indexación de su flota para buscar dispositivos en función de los nombres, las descripciones y otros atributos del registro. Para obtener más información acerca del registro, consulte [Cómo administrar objetos con el registro](thing-registry.md).

**Sombra:** el [servicio AWS IoT Device Shadow](iot-device-shadows.md) proporciona sombras que le ayudan a almacenar los datos de estado del dispositivo. La indexación de objetos admite tanto las sombras clásicas sin nombre como las sombras con nombre. Para indexar sombras con nombre, active la configuración de sombras guardadas y especifique los nombres de las sombras en la configuración de indexación de objetos. De forma predeterminada, puede añadir hasta 10 nombres ocultos por cada uno Cuenta de AWS. Para ver cómo aumentar el límite del número de nombres ocultos, consulte [Cuotas de AWS IoT Device Management](https://docs.aws.amazon.com/general/latest/gr/iot_device_management.html#fleet-indexing-limits) en la *Referencia general de AWS *.

Para agregar sombras con nombre para la indexación:
+ Si utiliza la [consola de AWS IoT](https://console.aws.amazon.com/iot/home), active **Indexación de objetos**, seleccione **Agregar sombras con nombre** y agregue los nombres de las sombras en **Selección de sombra con nombre**. 
+ Si usa AWS Command Line Interface (AWS CLI), `namedShadowIndexingMode` configúrelo en be `ON` y especifique los nombres de las sombras en [https://docs.aws.amazon.com//iot/latest/apireference/API_IndexingFilter.html](https://docs.aws.amazon.com//iot/latest/apireference/API_IndexingFilter.html). Para ver ejemplos de comandos de la CLI, consulte [Administración de la indexación de objetos](managing-index.md#enable-index).

**importante**  
El 20 de julio de 2022 estará disponible para el público general (GA) de la integración de indexación de flotas de AWS IoT Device Management, que incluye sombras AWS IoT Core nombradas y AWS IoT Device Defender detección de infracciones. Con esta versión GA, puede indexar sombras con nombres específicos especificando nombres de sombras. Si ha agregado sombras con nombre para indexarlas durante el período de vista previa pública de esta característica, del 30 de noviembre de 2021 al 19 de julio de 2022, le recomendamos que vuelva a configurar los ajustes de indexación de su flota y elija nombres de sombras específicos para reducir los costes de indexación y optimizar el rendimiento. 

 Para obtener información sobre las sombras, consulte el servicio [AWS IoT Device Shadow](iot-device-shadows.md).

**Conectividad:** los datos de conectividad de los dispositivos le ayudan a identificar el estado de conexión de sus dispositivos. Estos datos de conectividad dependen de los [eventos del ciclo de vida](life-cycle-events.md). Cuando un cliente se conecta o se desconecta, AWS IoT publica los eventos del ciclo de vida con mensajes sobre temas de MQTT. Un mensaje de conexión o desconexión puede ser una lista de elementos JSON que proporcionan detalles del estado de la conexión. Para obtener información sobre la conectividad de los dispositivos, consulte [Eventos del ciclo de vida](life-cycle-events.md).

**Infracciones de Device Defender**: los datos sobre AWS IoT Device Defender infracciones ayudan a identificar los comportamientos anómalos de los dispositivos en comparación con los comportamientos normales que se definen en un perfil de seguridad. Un perfil de seguridad contiene un conjunto de comportamientos esperados del dispositivo. Cada comportamiento utiliza una métrica que especifica el comportamiento normal de los dispositivos. Para obtener más información sobre las infracciones de Device Defender, consulte [AWS IoT Device Defender detect](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/device-defender-detect.html).

Para obtener más información, consulte [Administración de la indexación de flotas](managing-index.md).

## Indexación de grupos de objetos
<a name="thing-group-index"></a>

`AWS_ThingGroups` es el índice que contiene todos sus grupos de objetos. Puede usar este índice para buscar grupos en función de su nombre, descripción, atributos y todos los nombres de grupos principales.

Para obtener más información, consulte [Administración de la indexación de grupos de objetos](thinggroup-index.md).

## Campos administrados
<a name="managed-field"></a>

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. Los valores de cada campo gestionado se especifican al crear cualquier AWS IoT cosa. 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`. Para obtener más información, consulte [Campos personalizados](#custom-field).

A continuación se enumeran los campos administrados para la indexación de objetos: 
+ Campos administrados del registro

  ```
  "managedFields" : [
    {name:thingId, type:String},
    {name:thingName, type:String},
    {name:registry.version, type:Number},
    {name:registry.thingTypeName, type:String},
    {name:registry.thingGroupNames, type:String},
  ]
  ```
+ Campos administrados para sombras clásicas sin nombre

  ```
  "managedFields" : [
    {name:shadow.version, type:Number},
    {name:shadow.hasDelta, type:Boolean}
  ]
  ```
+ Campos administrados para sombras con nombre

  ```
  "managedFields" : [
    {name:shadow.name.shadowName.version, type:Number},
    {name:shadow.name.shadowName.hasDelta, type:Boolean}
  ]
  ```
+ Campos administrados de conectividad de objetos

  ```
  "managedFields" : [
    {name:connectivity.timestamp, type:Number},
    {name:connectivity.version, type:Number},
    {name:connectivity.connected, type:Boolean},
    {name:connectivity.disconnectReason, type:String}
  ]
  ```
+ Campos administrados para Device Defender

  ```
  "managedFields" : [
    {name:deviceDefender.violationCount, type:Number},
    {name:deviceDefender.securityprofile.behaviorname.metricName, type:String},
    {name:deviceDefender.securityprofile.behaviorname.lastViolationTime, type:Number},
    {name:deviceDefender.securityprofile.behaviorname.lastViolationValue, type:String},
    {name:deviceDefender.securityprofile.behaviorname.inViolation, type:Boolean}
  ]
  ```
+ Campos administrados de grupos de objetos

  ```
  "managedFields" : [
    {name:description, type:String},
    {name:parentGroupNames, type:String},
    {name:thingGroupId, type:String},
    {name:thingGroupName, type:String},
    {name:version, type:Number},
  ]
  ```

En la siguiente tabla se muestran los campos administrados que no se pueden buscar. 


| Origen de datos | Campo administrado que no se puede buscar | 
| --- | --- | 
| Registro | registry.version | 
| Sombras sin nombre | shadow.version | 
| Sombras con nombre | shadow.name.\$1.version | 
| Device Defender | deviceDefender.version | 
| Grupos de objetos | version | 

## Campos personalizados
<a name="custom-field"></a>

Puede agregar atributos de objetos, 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 comando [update-indexing-configuration](https://docs.aws.amazon.com/cli/latest/reference/iot/update-indexing-configuration.html)CLI para crear o actualizar los campos personalizados (consulte un comando de ejemplo en [Actualización de ejemplos de configuración de indexación](managing-index.md#update-index-examples)). 
+ **Nombres de campos personalizados**

Los nombres de los campos personalizados para los atributos objetos y grupos de objetos comienzan por `attributes.` seguidos del nombre del atributo. Si la indexación de sombras sin nombre está activada, los objetos pueden tener nombres de campo personalizados que comiencen por `shadow.desired` o `shadow.reported`, seguidos del nombre del valor de los datos de sombras sin nombre. Si la indexación de sombras sin nombre está activada, los objetos pueden tener nombres de campo personalizados que comiencen por `shadow.name.*.desired.` o `shadow.name.*.reported.`, seguidos del valor de los datos de sombras sin nombre. Si la indexación de infracciones de Device Defender está activada, los objetos pueden tener nombres de campo personalizados que comiencen por `deviceDefender.`, seguidos del valor de los datos de infracciones de Device Defender.

El nombre de atributo o valor de datos que sigue al prefijo puede tener solo caracteres alfanuméricos, - (guion) y \$1 (guion bajo). No puede tener ningún espacio.

Si existe una incoherencia de tipo entre un campo personalizado de su configuración y el valor que se indexa, la indexación de flotas ignora el valor incoherente para las consultas de agregación. CloudWatch Los registros son útiles para solucionar problemas de consultas de agregación. Para obtener más información, consulte [Solución de problemas de consultas de agregación en el servicio de indexación de flotas](fleet-indexing-troubleshooting.md#aggregation-troubleshooting). 
+ **Tipos de campos personalizados**

Los tipos de campos personalizados tienen los siguientes valores admitidos: `Number`, `String` y `Boolean`.

# Administración de la indexación de objetos
<a name="managing-index"></a>

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](thing-registry.md), datos de [AWS IoT Device Shadow](iot-device-shadows.md), datos de [conectividad de AWS IoT](life-cycle-events.md) y datos de infracciones de [AWS IoT Device Defender](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/what-is-device-defender.html).

**Topics**
+ [Habilitación de la indexación de objetos](#enable-index)
+ [Descripción de un índice de objeto](#describe-index)
+ [Consulta de un índice de objeto](#search-index)
+ [Restricciones y limitaciones](#index-limitations)
+ [Autorización](#query-auth)

## Habilitación de la indexación de objetos
<a name="enable-index"></a>

Utilice el comando [update-indexing-configuration](https://docs.aws.amazon.com/cli/latest/reference/iot/update-indexing-configuration.html)CLI o la operación [UpdateIndexingConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateIndexingConfiguration.html)API 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
<a name="index-mode"></a>

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 [https://docs.aws.amazon.com//iot/latest/apireference/API_IndexingFilter.html](https://docs.aws.amazon.com//iot/latest/apireference/API_IndexingFilter.html).

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.


****  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/managing-index.html)

### Campos administrados y campos personalizados
<a name="managed-custom-field"></a>

**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 comando [update-indexing-configuration](https://docs.aws.amazon.com/cli/latest/reference/iot/update-indexing-configuration.html)CLI para crear o actualizar los campos personalizados (consulte un comando de ejemplo en [Actualización de ejemplos de configuración de indexación](#update-index-examples)). Para obtener más información, consulte [Campos personalizados](managing-fleet-index.md#custom-field).

### Filtro de indexación
<a name="thing-indexing-filter"></a>

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 sus datos de geolocalización se almacenan en una sombra clásica (sin nombre), establezca `thingIndexingMode` en REGISTRY\$1AND\$1SHADOW y especifique los datos de geolocalización en el filtro `geoLocations`.

  El siguiente filtro de ejemplo especifica un objeto geoLocation 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 objeto geoLocation 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 la *referencia [ IndexingFilter](https://docs.aws.amazon.com/iot/latest/apireference/API_IndexingFilter.html)de la *AWS IoT*API*.

### Actualización de ejemplos de configuración de indexación
<a name="update-index-examples"></a>

Para actualizar la configuración de indexación, utilice el comando AWS IoT **update-indexing-configuration** CLI. 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}]'
```

Sintaxis de 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} ] } }'
```

Este comando no proporciona ninguna salida.

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

```
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 `indexStatus` aparezca activo antes de usarla. 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](#describe-index).

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

```
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
<a name="describe-index"></a>

El comando siguiente muestra cómo utilizar el comando **describe-index** de la CLI para recuperar el estado actual del índice del objeto:

```
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 | Description (Descripción) | 
| --- | --- | 
| OFF | No hay ningún origen de datos configurado ni indexado. | 
| REGISTRY | Solo se indexan los datos de registro. | 
| REGISTRY\$1AND\$1SHADOW | Se indexan los datos del registro y los datos de sombras sin nombre (clásicos). | 
| REGISTRY\$1AND\$1CONNECTIVITY | Se indexan los datos de registro y conectividad. | 
| REGISTRY\$1AND\$1SHADOW\$1AND\$1CONNECTIVITY\$1STATUS | Se indexan los datos de registro, los datos de sombras sin nombre (clásicos) y los datos de conectividad. | 
| MULTI\$1INDEXING\$1MODE | 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
<a name="search-index"></a>

Puede utilizar el comando **search-index** de la CLI 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 respuesta JSON,`"connectivity"` (según lo permita configuración de `thingConnectivityIndexingMode=STATUS`) proporciona un valor booleano, una marca temporal y un parámetro disconnectReason que indica si el dispositivo está conectado a AWS IoT Core. El dispositivo `"mything1"` desconectado (`false`) en tiempo POSIX `1556649874716` debido a `CONNECTION_LOST`. Para obtener información sobre los motivos de desconexión, consulte [Eventos del ciclo de vida](life-cycle-events.md). 

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

El dispositivo `"mything2"` conectado (`true`) en tiempo POSIX `1556649855046`:

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

Las marcas temporales se indican en milisegundos desde la fecha de inicio, por lo que `1556649855046` representa 6:44:15.046 p.m. el 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
<a name="index-limitations"></a>

Estas son las restricciones y limitaciones de `AWS_Things`.

**Campos de sombra con tipos complejos**  
Un campo de sombra se indexa solo si el valor del campo es un tipo sencillo, como un objeto JSON que no incluya una matriz o una matriz que conste completamente de tipos sencillos. 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](https://docs.aws.amazon.com//iot/latest/developerguide/thing-registry.html).

**Sombras no registradas**  
Si antes [UpdateThingShadow](https://docs.aws.amazon.com/iot/latest/apireference/API_iotdata_UpdateThingShadow.html)creabas una sombra con el nombre de un objeto que no estaba registrado en tu AWS IoT cuenta, los campos de esa 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 número JSON válido y 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
<a name="query-auth"></a>

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.


****  

| Action | Recurso | 
| --- | --- | 
|  `iot:SearchIndex`  |  El ARN de un índice (por ejemplo, `arn:aws:iot:your-aws-regionyour-aws-account:index/AWS_Things`).  | 
|  `iot:DescribeIndex`  |  El ARN de un índice (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.

# Administración de la indexación de grupos de objetos
<a name="thinggroup-index"></a>

`AWS_ThingGroups` es el índice que contiene todos sus grupos de objetos. Puede usar este índice para buscar grupos en función de su nombre, descripción, atributos y todos los nombres de grupos principales.

## Habilitación de la indexación de grupos de objetos
<a name="enable-group-index"></a>

Puede utilizar la `thing-group-indexing-configuration` configuración de la [UpdateIndexingConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateIndexingConfiguration.html)API para crear el `AWS_ThingGroups` índice y controlar su configuración. Puede usar la [GetIndexingConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_GetIndexingConfiguration.html)API para recuperar la configuración de indexación actual. 

Para actualizar las configuraciones de indexación del grupo de objetos, ejecute el comando de la CLI **update-indexing-configuration**:

```
aws iot update-indexing-configuration --thing-group-indexing-configuration thingGroupIndexingMode=ON
```

También puede actualizar las configuraciones de la indexación de objetos y grupos de objetos en un único comando, como en el siguiente ejemplo.

```
aws iot update-indexing-configuration --thing-indexing-configuration thingIndexingMode=REGISTRY --thing-group-indexing-configuration thingGroupIndexingMode=ON
```

Los siguientes valores son válidos para `thingGroupIndexingMode`.

OFF  
Sin indexing/delete índice.

ON  
Cree o configure el índice `AWS_ThingGroups`.

Para recuperar las configuraciones actuales de indexación de objetos y grupos de objetos, ejecute el comando de la CLI **get-indexing-configuration**:

```
aws iot get-indexing-configuration
```

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

```
{
   "thingGroupIndexingConfiguration": {
        "thingGroupIndexingMode": "ON"
    }
}
```

## Descripción de índices de grupos
<a name="describe-group-index"></a>

Para recuperar el estado actual del índice `AWS_ThingGroups`, utilice el comando de la CLI **describe-index**:

```
aws iot describe-index --index-name "AWS_ThingGroups"
```

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

```
{
   "indexStatus": "ACTIVE", 
   "indexName": "AWS_ThingGroups", 
   "schema": "THING_GROUPS"
}
```

 AWS IoT crea el índice la primera vez que indexa. No se puede consultar el índice si `indexStatus` es `BUILDING`.

## Consulta de un índice de grupo de objetos
<a name="search-group-index"></a>

Para consultar los datos del índice, utilice el comando de la CLI **search-index**:

```
aws iot search-index --index-name "AWS_ThingGroups" --query-string "thingGroupName:mythinggroup*"
```

## Autorización
<a name="query-thinggroup-auth"></a>

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


****  

| Action | Recurso | 
| --- | --- | 
|  `iot:SearchIndex`  |  El ARN de un índice (por ejemplo, `arn:aws:iot:your-aws-region:index/AWS_ThingGroups`).  | 
|  `iot:DescribeIndex`  |  El ARN de un índice (por ejemplo, `arn:aws:iot:your-aws-region:index/AWS_ThingGroups`).  | 

# Consultas de estado de conectividad de los dispositivos
<a name="device-connectivity-status"></a>

AWS IoT La indexación de flotas admite consultas de conectividad de dispositivos individuales, lo que le permite recuperar de manera eficiente el estado de la conectividad y los metadatos relacionados para dispositivos específicos. Esta característica complementa las capacidades de indexación y consulta existentes en toda la flota.

## Funcionamiento
<a name="w2aac37c21b5"></a>

La compatibilidad con las consultas de conectividad de los dispositivos se puede utilizar para recuperar de forma optimizada el estado de la conectividad de un solo dispositivo. Esta API proporciona acceso de baja latencia y alto rendimiento a la información de conectividad específica del dispositivo más reciente. Una vez que habilite la indexación de conectividad, tendrá acceso a esta API de consultas, que se cobrará como consultas estándar. Para obtener más información, consulte [Precios de AWS IoT Device Management](https://aws.amazon.com/iot-device-management/pricing/#:~:text=Search%20queries%20(per%2010%2C000%20queries)).

## Características
<a name="w2aac37c21b7"></a>

Gracias a la compatibilidad con las consultas de conectividad de los dispositivos, puede:

1. Consultar el estado de conectividad actual (conectado o desconectado) de un dispositivo determinado mediante su `thingName`.

1. Recuperar metadatos de conectividad adicionales, como, por ejemplo:

   1. Motivo de desconexión

   1. Marcas de tiempo de los eventos de conexión o desconexión más recientes.

**nota**  
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](https://docs.aws.amazon.com/iot/latest/developerguide/thing-registry.html).

## Ventajas
<a name="w2aac37c21b9"></a>

1. **Baja latencia:** refleja el estado de conectividad del dispositivo más reciente y ofrece una latencia baja para reflejar los cambios en el estado de la conexión con respecto a IoT Core. IoT Core determina que un dispositivo está desconectado en cuanto recibe una solicitud de desconexión del dispositivo o en caso de que un dispositivo se desconecte sin enviar una solicitud de desconexión. IoT Core esperará 1,5 veces el tiempo de keep-alive configurado antes de que se determine que el cliente está desconectado. La API de estado de conectividad reflejará estos cambios normalmente en menos de un segundo después de que IoT Core determine el cambio de estado de conexión de un dispositivo.

1. **Alto rendimiento:** admite 350 transacciones por segundo (TPS) de forma predeterminada y se puede ajustar en un nivel superior si se solicita.

1. **Retención de datos:** almacena los datos de los eventos de forma indefinida cuando el ConnectivityIndexing modo de indexación de flotas (FI) está activado y el elemento no se elimina. Si deshabilita la opción Indexación de conectividad, los registros no se conservarán.

**nota**  
Si la indexación del estado de la conectividad estaba habilitada antes del lanzamiento de esta API, la opción Indexación de flotas comienza a realizar un seguimiento de los cambios en el estado de la conectividad después del lanzamiento de la API y refleja el estado actualizado en función de esos cambios.

## Requisitos previos
<a name="w2aac37c21c11"></a>

Cómo utilizar el soporte de consultas sobre conectividad de dispositivos:

1. [Configura una cuenta AWS](https://docs.aws.amazon.com/iot/latest/developerguide/setting-up.html)

1. Incorpora y registra dispositivos AWS IoT Core en la región que prefieras

1. [Habilitar Indexación de flotas](https://docs.aws.amazon.com/iot/latest/developerguide/managing-index.html) con Indexación de conectividad

**nota**  
No se requiere ninguna configuración adicional si ya tiene habilitada la indexación de conectividad.

Para obtener instrucciones detalladas de configuración, consulte la [Guía para desarrolladores de AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/setting-up.html).

## Ejemplos
<a name="w2aac37c21c13"></a>

```
aws iot get-thing-connectivity-data --thing-name myThingName
```

```
{
   "connected": true,
   "disconnectReason": "NONE",
   "thingName": "myThingName",
   "timestamp": "2024-12-19T10:00:00.000000-08:00"
}
```
+ `thingName`: el nombre del dispositivo, tal y como se indica en la solicitud. También coincide con el clientId utilizado para conectarse a AWS IoT Core.
+ `disconnectReason`: motivo de la desconexión. Será NONE para un dispositivo conectado.
+ `connected`: el valor booleano true indica que este dispositivo está conectado actualmente.
+ `timestamp`: la marca de tiempo que representa la última desconexión del dispositivo en milisegundos.

```
aws iot get-thing-connectivity-data --thing-name myThingName
```

```
{
   "connected": false,
   "disconnectReason": "CLIENT_INITIATED_DISCONNECT",
   "thingName": "myThingName",
   "timestamp": "2024-12-19T10:30:00.000000-08:00"
}
```
+ `thingName`: el nombre del dispositivo, tal y como se indica en la solicitud. También coincide con el clientId utilizado para conectarse a AWS IoT Core.
+ `disconnectReason`: El motivo de la desconexión es CLIENT\$1INITIATED\$1DISCONNECT, que indica el cliente que quiere desconectarse AWS IoT Core . 
+ `connected`: el valor booleano false indica que este dispositivo está desconectado actualmente.
+ `timestamp`: la marca de tiempo que representa la última desconexión del dispositivo en milisegundos.

```
aws iot get-thing-connectivity-data --thing-name neverConnectedThing
```

```
{
   "connected": false,
   "disconnectReason": "UNKNOWN",
   "thingName": "neverConnectedThing"
}
```
+ `thingName`: el nombre del dispositivo, tal y como se indica en la solicitud. También coincide con el clientId utilizado para conectarse a AWS IoT Core.
+ `disconnectReason`: motivo de la desconexión. Será “UNKNOWN” para un dispositivo que nunca se haya conectado o para el que la opción Indexación de flotas no tenga almacenado el motivo de la última desconexión. 
+ `connected`: el valor booleano false indica que este dispositivo está desconectado actualmente. 
+ `timestamp`: la marca de tiempo no se devuelve para un dispositivo que nunca se haya conectado o para el que la opción Indexación de flotas no tenga almacenada la última marca de tiempo. 

# Consulta de datos agregados
<a name="index-aggregate"></a>

AWS IoT proporciona cuatro APIs (`GetStatistics`, `GetCardinality``GetPercentiles`, y`GetBucketsAggregation`) que le permiten buscar datos agregados en su flota de dispositivos. 

**nota**  
 Si hay problemas relacionados con valores faltantes o inesperados en la agregación APIs, consulta la [guía de solución de problemas de indexación de flotas](fleet-indexing-troubleshooting.md). 

## GetStatistics
<a name="get-statistics"></a>

La [GetStatistics](https://docs.aws.amazon.com/iot/latest/apireference/API_GetStatistics.html)API y el comando **get-statistics** CLI devuelven el recuento, el promedio, la suma, el mínimo, el máximo, la suma de los cuadrados, la varianza y la desviación estándar del campo agregado especificado.

El comando **get-statistics** de la CLI usa los siguientes parámetros:

`index-name`  
El nombre del índice que se buscará. El valor predeterminado es `AWS_Things`.

`query-string`  
La consulta utilizada para buscar el índice. Puede especificar si desea `"*"` obtener el recuento de todos los elementos indexados de su. Cuenta de AWS

`aggregationField`  
(Opcional) El campo que se va a agregar. Este campo debe ser un campo administrado o personalizado definido al llamar a **update-indexing-configuration**. Si no especifica un campo de agregación, se utiliza `registry.version` como el campo de agregación.

`query-version`  
La versión de la consulta que se va a utilizar. El valor predeterminado es `2017-09-30`.

El tipo de campo de agregación puede afectar a las estadísticas devueltas. 

### GetStatistics con valores de cadena
<a name="string-aggregation"></a>

Si realiza la agregación en un campo de cadena, la llamada a `GetStatistics` devuelve el número de dispositivos que tienen atributos que coinciden con la consulta. Por ejemplo:

```
aws iot get-statistics --aggregation-field 'attributes.stringAttribute'
            --query-string '*'
```

Este comando devuelve el número de dispositivos que contienen un atributo llamado `stringAttribute`:

```
{
  "statistics": {
    "count": 3
  }
}
```

### GetStatistics con valores booleanos
<a name="boolean-aggregation"></a>

Cuando llama a `GetStatistics` con un campo de agregación booleano:
+ AVERAGE es el porcentaje de dispositivos que coinciden con la consulta.
+ MINIMUM es 0 o 1 de acuerdo con las siguientes reglas:
  + Si todos los valores del campo de agregación son `false`, MINIMUM es 0.
  + Si todos los valores del campo de agregación son `true`, MINIMUM es 1.
  + Si los valores del campo de agregación son una mezcla de `false` y `true`, MINIMUM es 0.
+ MAXIMUM es 0 o 1 de acuerdo con las siguientes reglas:
  + Si todos los valores del campo de agregación son `false`, MAXIMUM es 0.
  + Si todos los valores del campo de agregación son `true`, MAXIMUM es 1.
  + Si los valores del campo de agregación son una mezcla de `false` y `true`, MAXIMUM es 1.
+ SUM es la suma del entero equivalente de los valores booleanos.
+ COUNT es el recuento de objetos que coinciden con los criterios de la cadena de consulta y contienen un valor de campo de agregación válido.

### GetStatistics con valores numéricos
<a name="numerical-aggregation"></a>

Cuando se llama a `GetStatistics` y se especifica un campo de agregación de tipo `Number`, `GetStatistics` devuelve los siguientes valores:

count  
El número de objetos que coinciden con los criterios de la cadena de consulta y contienen un valor de campo de agregación válido.

average  
El promedio de los valores numéricos que coinciden con la consulta.

sum  
La suma de los valores numéricos que coinciden con la consulta.

minimum  
El menor de los valores numéricos que coinciden con la consulta.

maximum  
El mayor de los valores numéricos que coinciden con la consulta.

sumOfSquares  
La suma de los cuadrados de los valores numéricos que coinciden con la consulta.

variance  
La varianza de los valores numéricos que coinciden con la consulta. La varianza de un conjunto de valores es la media de los cuadrados de las diferencias de cada valor con respecto al valor medio del conjunto.

stdDeviation  
La desviación estándar de los valores numéricos que coinciden con la consulta. La desviación estándar de un conjunto de valores es una medida de la distribución de los valores.

El siguiente ejemplo muestra cómo llamar a **get-statistics** con un campo numérico personalizado.

```
aws iot get-statistics --aggregation-field 'attributes.numericAttribute2'
            --query-string '*'
```

```
{
  "statistics": {
    "count": 3,
    "average": 33.333333333333336,
    "sum": 100.0,
    "minimum": -125.0,
    "maximum": 150.0,
    "sumOfSquares": 43750.0,
    "variance": 13472.22222222222,
    "stdDeviation": 116.06990230986766
  }
}
```

Para los campos de agregación numérica, si los valores del campo superan el valor «double» máximo, los valores de las estadísticas están vacíos.

## GetCardinality
<a name="get-cardinality"></a>

La [GetCardinality](https://docs.aws.amazon.com/iot/latest/apireference/API_GetCardinality.html)API y el comando **get-cardinality** CLI devuelven el recuento aproximado de valores únicos que coinciden con la consulta. Por ejemplo, es posible que desee encontrar el número de dispositivos con niveles de batería inferiores al 50 por ciento:

```
aws iot get-cardinality --index-name AWS_Things --query-string "batterylevel
          > 50" --aggregation-field "shadow.reported.batterylevel"
```

Este comando devuelve el número de objetos con niveles de batería de más del 50 por ciento:

```
{
    "cardinality": 100
}
```

**get-cardinality** siempre devuelve `cardinality`, aunque no haya campos coincidentes. Por ejemplo:

```
aws iot get-cardinality --query-string "thingName:Non-existent*"
          --aggregation-field "attributes.customField_STR"
```

```
{
    "cardinality": 0
}
```

El comando **get-cardinality** de la CLI usa los siguientes parámetros:

`index-name`  
El nombre del índice que se buscará. El valor predeterminado es `AWS_Things`.

`query-string`  
La consulta utilizada para buscar el índice. Puede especificar si desea `"*"` obtener el recuento de todos los elementos indexados de su Cuenta de AWS.

`aggregationField`  
El campo que se va a agregar.

`query-version`  
La versión de la consulta que se va a utilizar. El valor predeterminado es `2017-09-30`.

## GetPercentiles
<a name="get-percentiles"></a>

La [GetPercentiles](https://docs.aws.amazon.com/iot/latest/apireference/API_GetPercentiles.html)API y el comando **get-percentiles** CLI agrupan los valores agregados que coinciden con la consulta en grupos de percentiles. Los grupos de percentiles predeterminados son: 1,5,25,50,75,95,99, aunque puede especificar los suyos propios cuando llame a `GetPercentiles`. Esta función devuelve un valor para cada grupo de percentiles especificado (o para los grupos de percentiles predeterminados). El grupo de percentiles "1" contiene el valor agregado del campo que se obtiene aproximadamente en el uno por ciento de los valores que coinciden con la consulta. El grupo de percentiles "5" contiene el valor agregado del campo que se obtiene en aproximadamente el cinco por ciento de los valores que coinciden con la consulta, y así sucesivamente. El resultado es una aproximación: cuantos más valores coincidan con la consulta, más precisos serán los valores de percentil.

El siguiente ejemplo muestra cómo llamar al comando **get-percentiles** de la CLI.

```
aws iot get-percentiles --query-string "thingName:*" --aggregation-field
          "attributes.customField_NUM" --percents 10 20 30 40 50 60 70 80 90 99
```

```
{
    "percentiles": [
        {
            "value": 3.0,
            "percent": 80.0
        },
        {
            "value": 2.5999999999999996,
            "percent": 70.0
        },
        {
            "value": 3.0,
            "percent": 90.0
        },
        {
            "value": 2.0,
            "percent": 50.0
        },
        {
            "value": 2.0,
            "percent": 60.0
        },
        {
            "value": 1.0,
            "percent": 10.0
        },
        {
            "value": 2.0,
            "percent": 40.0
        },
        {
            "value": 1.0,
            "percent": 20.0
        },
        {
            "value": 1.4,
            "percent": 30.0
        },
        {
            "value": 3.0,
            "percent": 99.0
        }
    ]
}
```

El siguiente comando muestra la salida devuelta **get-percentiles** cuando no hay documentos coincidentes.

```
aws iot get-percentiles --query-string "thingName:Non-existent*"
          --aggregation-field "attributes.customField_NUM"
```

```
{
    "percentiles": []
}
```

El comando **get-percentile** de la CLI usa los siguientes parámetros:

`index-name`  
El nombre del índice que se buscará. El valor predeterminado es `AWS_Things`.

`query-string`  
La consulta utilizada para buscar el índice. Puede especificar si desea `"*"` obtener el recuento de todos los elementos indexados de su. Cuenta de AWS

`aggregationField`  
El campo que se va a agregar, que debe ser del tipo `Number`.

`query-version`  
La versión de la consulta que se va a utilizar. El valor predeterminado es `2017-09-30`.

`percents`  
(Opcional) Puede utilizar este parámetro para especificar grupos de percentiles personalizados.

## GetBucketsAggregation
<a name="get-buckets"></a>

La [GetBucketsAggregation](https://docs.aws.amazon.com/iot/latest/apireference/API_GetBucketsAggregation.html)API y el comando **get-buckets-aggregation** CLI devuelven una lista de depósitos y el número total de elementos que se ajustan a los criterios de la cadena de consulta.

El siguiente ejemplo muestra cómo llamar al comando get-buckets-aggregation de la CLI.

```
aws iot get-buckets-aggregation --query-string '*' --index-name AWS_Things --aggregation-field 'shadow.reported.batterylevelpercent' --buckets-aggregation-type 'termsAggregation={maxBuckets=5}'
```

Este comando devuelve la siguiente salida: 

```
{
    "totalCount": 20,
    "buckets": [
        {
            "keyValue": "100",
            "count": 12
        },
        {
            "keyValue": "90",
            "count": 5
        },
        {
            "keyValue": "75",
            "count": 3
        }
    ]
}
```

El comando get-buckets-aggregation de la CLI usa los siguientes parámetros:

`index-name`  
El nombre del índice que se buscará. El valor predeterminado es `AWS_Things`.

`query-string`  
La consulta utilizada para buscar el índice. Puede especificar si desea `"*"` obtener el recuento de todos los elementos indexados de su. Cuenta de AWS

`aggregation-field`  
El campo que se va a agregar.

`buckets-aggregation-type`  
El control básico de la forma de la respuesta y el tipo de agregación de buckets que se va a realizar.

## Autorización
<a name="index-aggregate-authorization"></a>

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


| Action | Recurso | 
| --- | --- | 
|  `iot:GetStatistics`  |  El ARN de un índice (por ejemplo, `arn:aws:iot:your-aws-region:index/AWS_Things` o `arn:aws:iot:your-aws-region:index/AWS_ThingGroups`).  | 

# Sintaxis de la consulta
<a name="query-syntax"></a>

En la indexación de flotas, se utiliza una sintaxis de consulta para especificar las consultas.

## Características admitidas
<a name="supported-query-syntax"></a>

La sintaxis de consulta es compatible con las siguientes características.
+ Términos y frases
+ Búsqueda de campos
+ Búsqueda de prefijos
+ Búsqueda de intervalos
+ Operadores booleanos `AND`, `OR`, `NOT` y `–`. El guion se utiliza para excluir algo de los resultados de la búsqueda (por ejemplo, `thingName:(tv* AND -plasma)`).
+ Agrupación
+ Agrupación de campos
+ Utilizar secuencias de escape con caracteres especiales (por ejemplo, con *\$1*)
+ El uso de caracteres comodín al principio está limitado a un término de consulta por consulta. Por ejemplo, no puede buscar `thingName:*my` ni `thingGroupNames:*echo` en la misma consulta. Las consultas que incluyen un carácter comodín al principio tienen una longitud máxima de 100 caracteres.
**nota**  
 Las cuentas con un límite de consultas en la API de indexación de flotas superior a 30 solicitudes por segundo están sujetas a restricciones cuando se utilizan los primeros términos de consulta con caracteres comodín. Este requests-per-second límite de 30 se aplica a nivel de cuenta en todas las consultas de indexación de Fleet. APIs 

## Características no admitidas
<a name="unsupported-query-syntax"></a>

La sintaxis de consulta no es compatible con las siguientes características:
+ Expresiones regulares
+ Impulso
+ Clasificación
+ Búsquedas confusas
+ Búsqueda de proximidad
+ Ordenar
+ Agregación
+ Caracteres especiales: ```, `@`, `#`, `%`, `\`, `/`, `'`, `;` y `,`. Tenga en cuenta que `,` solo se admite en las geoconsultas.

## Notas
<a name="query-syntax-limitations"></a>

Algunas cosas que tener en cuenta acerca del idioma de consulta:
+ El operador predeterminado es AND. La consulta `"thingName:abc thingType:xyz"` es igual que `"thingName:abc AND thingType:xyz"`.
+ Si no se especifica ningún campo, AWS IoT busca el término en todos los campos del registro, Device Shadow y Device Defender.
+ Todos los nombres de campo distinguen entre mayúsculas y minúsculas.
+ La búsqueda distingue entre mayúsculas y minúsculas. Las palabras están separadas por caracteres de espacio en blanco, tal como define la especificación `Character.isWhitespace(int)` de Java.
+ La indexación de los datos de Device Shadow (sombras sin nombre y sombras con nombre) incluye las secciones reported, desired, delta, y de metadatos.
+ Las versiones de Device Shadow y del registro no permiten búsquedas, pero están presentes en la respuesta.
+ El número máximo de términos en una consulta es 12.
+ El carácter especial `,` solo se admite en las geoconsultas.

# Ejemplo de consultas de objetos
<a name="example-queries"></a>

Especifique las consultas en una cadena de consulta mediante una sintaxis de consulta. Las consultas se pasan a la API [https://docs.aws.amazon.com/iot/latest/apireference/API_SearchIndex.html](https://docs.aws.amazon.com/iot/latest/apireference/API_SearchIndex.html). En la siguiente tabla se enumeran algunas cadenas de consulta de ejemplo.


| Cadena de consulta | Resultado | 
| --- | --- | 
|  abc  |  Consulta “abc” en cualquier campo de registro, sombra (la clásica sombra sin nombre y sombra con nombre) o Device Defender.  | 
|  thingName:myThingName  |  Consulta un elemento con el nombre "myThingName».  | 
|  thingName:my\$1  |  Consulta los objetos cuyos nombres que comienzan por "my".  | 
|  thingName:\$1my  |  Consultas de objetos cuyos nombres finalizan por “my”. El uso de caracteres comodín al principio está limitado a un término de consulta por consulta. Las consultas que incluyen un carácter comodín al principio tienen una longitud máxima de 100 caracteres.  | 
|  thingName:\$1my\$1  |  Consultas de objetos que incluyen la subcadena “my”. El uso de caracteres comodín al principio está limitado a un término de consulta por consulta. Las consultas que incluyen un carácter comodín al principio tienen una longitud máxima de 100 caracteres.  | 
|  thingName:ab?  |  Consulta los objetos cuyos nombres tienen “ab“ además de un carácter adicional (por ejemplo: “aba”, “abb”, “abc”, etc.)  | 
|  thingTypeName:aa  |  Consulta los objetos que están asociados con el tipo “aa”.  | 
|  thingGroupNames:a  | Consulta los objetos con nombre de grupo de objetos principal o grupo de facturación “a”. | 
|  thingGroupNames:a\$1  | Consulta los objetos con nombre de grupo de objetos principal o grupo de facturación que coincide con el patrón “a\$1”. | 
|  attributes.myAttribute:75  |  Consulta los objetos con un atributo denominado "myAttribute" que tiene el valor 75.  | 
|  attributes.myAttribute:[75 TO 80]  |  Consulta los objetos con un atributo denominado “myAttribute”, cuyo valor se encuentra dentro de un rango numérico (entre 75-80, ambos inclusive).  | 
|  attributes.myAttribute:\$175 TO 80]  |  Consulta los objetos con un atributo denominado “myAttribute”, cuyo valor se encuentra dentro del rango numérico (>75 y <=80).  | 
|  attributes.serialNumber:["abcd" TO "abcf"]  |  Consulta los objetos con un atributo llamado “serialNumber”, cuyo valor se encuentra dentro del rango de cadenas alfanuméricas. Esta consulta devuelve objetos con un atributo "serialNumber" con valores "abcd", "abce" o "abcf".  | 
|  attributes.myAttribute:i\$1t |  Consulta los objetos con un atributo llamado “MyAttribute” cuyo valor es 'i', seguido de un número de caracteres, seguido por 't'.  | 
|  attributes.attr1:abc AND attributes.attr2<5 NOT attributes.attr3>10  |  Consultas de objetos que combinan términos mediante expresiones booleanas. Esta consulta devuelve objetos que tengan un atributo llamado “attr1” con un valor “abc”, un atributo denominado “attr2” inferior a 5 y un atributo llamado “attr3” que no sea superior a 10.  | 
|  shadow.hasDelta:true  |  Consulta los objetos con una sombra sin nombre que tenga un elemento delta.  | 
|  NOT attributes.model:legacy  |  Consultas de objetos donde el atributo llamado "model" no es "legacy".  | 
|  shadow.reported.stats.battery:\$170 TO 100\$1 (v2 OR v3) NOT attributes.model:legacy  |  Consulta los objetos que cumplen lo siguiente: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/example-queries.html)  | 
|  shadow.reported.myvalues:2  |  Consulta los objetos cuya matriz `myvalues` de la sección reported de la sombra contiene el valor 2.  | 
|  shadow.reported.location:\$1 NOT shadow.desired.stats.battery:\$1  |  Consulta los objetos que cumplen lo siguiente: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/example-queries.html)  | 
|  shadow.name.<shadowName>.hasDelta:true  |  Consulta los objetos que tienen una sombra con el nombre dado y también un elemento delta.   | 
|  shadow.name.<shadowName>.desired.filament:\$1  |  Consulta los objetos que tienen una sombra con el nombre dado y también una propiedad de “filament” deseada.   | 
|  shadow.name.<shadowName>.reported.location:\$1  |  Consulta los elementos que tienen una sombra con el nombre dado y donde existe el atributo `location` en la sección de informes de la sombra con nombre.  | 
|  connectivity.connected:true  |  Consulta sobre todos los dispositivos conectados.  | 
|  connectivity.connected:false  | Consulta de todos los dispositivos desconectados. | 
|  connectivity.connected:true AND connectivity.timestamp : [1557651600000 TO 1557867600000]  | Consulta de todos los dispositivos conectados con una marca temporal de conexión >= 1557651600000 y <= 1557867600000. Las marcas temporales se indican en milisegundos desde la fecha de inicio. | 
|  connectivity.connected:false AND connectivity.timestamp : [1557651600000 TO 1557867600000]  | Consulta de todos los dispositivos desconectados con una marca temporal de desconexión >= 1557651600000 y <= 1557867600000. Las marcas temporales se indican en milisegundos desde la fecha de inicio. | 
|  connectivity.connected:true AND connectivity.timestamp > 1557651600000  | Consulta de todos los dispositivos conectados con una marca temporal de conexión > 1557651600000. Las marcas temporales se indican en milisegundos desde la fecha de inicio. | 
|  connectivity.connected:\$1  | Consulta todos los dispositivos para los que hay información de conectividad. | 
|  connectivity.disconnectReason:\$1  | Consulta todos los dispositivos con conectividad disconnectReason presentes. | 
|  connectivity.disconnectReason:CLIENT\$1INITIATED\$1DISCONNECT  | Consulta todos los dispositivos desconectados debido a CLIENT\$1INITIATED\$1DISCONNECT. | 
|  deviceDefender.violationCount:[0 TO 100]  | Consultas los objetos con un número de infracciones de Device Defender dentro del rango numérico (0-100, ambos inclusive).  | 
|  deviceDefender.<device-SecurityProfile>.disconnectBehavior.inViolation:true  | Consulta los objetos que infringen el comportamiento disconnectBehavior definido en el perfil de seguridad device-SecurityProfile. Tenga en cuenta que inViolation:false no es una consulta válida.  | 
|  deviceDefender.<device-SecurityProfile>.disconnectBehavior.lastViolationValue.number>2  | Busca elementos que infrinjan el comportamiento disconnectBehavior definido en el dispositivo del perfil de seguridad, SecurityProfile con un valor de última infracción superior a 2.  | 
|  deviceDefender.<device-SecurityProfile>.disconnectBehavior.lastViolationTime>1634227200000  |  Realiza consultas sobre elementos que infringen el comportamiento `disconnectBehavior` definido en el dispositivo del perfil de seguridad, SecurityProfile con un evento de última infracción transcurrido un período de tiempo especificado.   | 
|  shadow.name.gps-tracker.reported.coordinates:geo\$1distance,47.6204,-122.3491,15.5km | Consulta objetos que se encuentran dentro de una distancia radial de 15,5 km desde las coordenadas 47.6204, -122.3491. Esta cadena de consulta se aplica cuando los datos de ubicación se almacenan en una sombra con nombre. | 
|  shadow.reported.coordinates:geo\$1distance,47.6204,-122.3491,15.5km | Consulta objetos que se encuentran dentro de una distancia radial de 15,5 km desde las coordenadas 47.6204, -122.3491. Esta cadena de consulta se aplica cuando los datos de ubicación se almacenan en una sombra clásica. | 

# Ejemplo de consultas de grupo de objetos
<a name="example-thinggroup-queries"></a>

Las consultas se especifican en una cadena de consulta mediante una sintaxis de consulta y se trasladan a la API de [https://docs.aws.amazon.com/iot/latest/apireference/API_SearchIndex.html](https://docs.aws.amazon.com/iot/latest/apireference/API_SearchIndex.html). En la siguiente tabla se enumeran algunas cadenas de consulta de ejemplo.


| Cadena de consulta | Resultado | 
| --- | --- | 
|  abc  |  Consulta "abc" en cualquier campo.  | 
|  thingGroupName:myGroupThingName  |  Consultas para un grupo de cosas con el nombre "myGroupThingNombre».  | 
|  thingGroupName:my\$1  |  Consulta los grupos de objetos cuyos nombres que comienzan por "my".  | 
|  thingGroupName:ab?  |  Consulta los grupos de objetos cuyos nombres tienen “ab“ además de un carácter adicional (por ejemplo: “aba”, “abb”, “abc”, etc.)  | 
|  attributes.myAttribute:75  |  Consulta los grupos de con un atributo llamado "MyAttribute" que tiene el valor de 75.  | 
|  attributes.myAttribute:[75 TO 80]  |  Consulta los grupos de con un atributo llamado “MyAttribute”, cuyo valor se encuentra dentro de un rango numérico (75-80, ambos inclusive).  | 
|  attributes.myAttribute:[75 TO 80]  |  Consulta los grupos de objetos con un atributo llamado "MyAttribute", cuyo valor se encuentra dentro del rango numérico (>75 y <=80).  | 
|  attributes.myAttribute:["abcd" TO "abcf"]  |  Consulta los grupos de con un atributo llamado "myAttribute", cuyo valor se encuentra dentro del rango de cadenas alfanuméricas. Esta consulta devuelve grupos de objetos con un atributo "serialNumber" con valores "abcd", "abce" o "abcf".  | 
|  attributes.myAttribute:i\$1t  |  Consulta los grupos de objetos con un atributo llamado "MyAttribute" cuyo valor es 'i', seguido de un número de caracteres, seguido por 't'.  | 
|  attributes.attr1:abc AND attributes.attr2<5 NOT attributes.attr3>10  |  Consultas de grupos de objetos que combinan términos mediante expresiones booleanas. Esta consulta devuelve grupos de objetos que tengan un atributo denominado “attr1” con un valor “abc”, un atributo denominado “attr2” inferior a 5 y un atributo denominado “attr3” que no sea superior a 10.  | 
|  NOT attributes.myAttribute:cde  |  Consulta los grupos de objetos donde el atributo llamado "MyAttribute" no es "cde".  | 
|  parentGroupNames:(myParentThingGroupName)  |   Consultas para grupos de cosas cuyo nombre de grupo principal coincide con "myParentThingGroupName».  | 
|  parentGroupNames:(myParentThingGroupName OR myRootThingGroupName)  |  Consultas para grupos de cosas cuyo nombre de grupo principal coincide con myParentThing GroupName "" o "myRootThingGroupName».  | 
|  parentGroupNames:(myParentThingGroupNa\$1)  |  Consultas para grupos de cosas cuyo nombre de grupo principal comienza por "myParentThingGroupNa».  | 

# Indexación de datos de ubicación
<a name="location-indexing-geoquery"></a>

Puede usar la [indexación de flotas de AWS IoT](https://docs.aws.amazon.com//iot/latest/developerguide/iot-indexing.html) para indexar los últimos datos de ubicación enviados por sus dispositivos y buscar dispositivos realizando consultas geográficas. Esta característica resuelve los casos de uso de la supervisión y la administración de dispositivos, como el seguimiento de la ubicación y la búsqueda de proximidad. La indexación de ubicaciones funciona de manera similar a otras características de indexación de flotas y con configuraciones adicionales que puede especificar en la [indexación de objetos](managing-fleet-index.md). 

Los casos de uso más comunes son: buscar y añadir dispositivos ubicados dentro de los límites geográficos deseados, obtener información específica de la ubicación mediante términos de consulta relacionados con los metadatos y el estado del dispositivo a partir de orígenes de datos indexados, proporcionar una vista granular, como filtrar los resultados según un área geográfica específica para reducir los retrasos de representación en los mapas de supervisión de la flota y rastrear la ubicación del último dispositivo notificado, e identificar los dispositivos que están fuera de los límites deseados y generar alarmas utilizando las [métricas de flota](iot-fleet-metrics.md). Para empezar a utilizar la indexación de ubicaciones y las geoconsultas, consulte [Tutorial introductorio](location-indexing-tutorial.md).

## Formatos de datos admitidos
<a name="location-indexing-format"></a>

AWS IoT La indexación de flotas admite los siguientes formatos de datos de ubicación:

1. 

**Una representación de texto muy conocida de sistemas de coordenadas de referencia**

   Es una cadena que sigue el formato [Geographic information - Well-known text representation of coordinate reference systems](https://docs.ogc.org/is/12-063r5/12-063r5.html). Por ejemplo, `"POINT(long lat)"`.

1. 

**Una cadena que representa las coordenadas**

   Es una cadena con el formato `"latitude, longitude"` o `"longitude, latitude"`. Si usa `"longitude, latitude"`, también debe especificar `order` en `geoLocations`. Por ejemplo, `"41.12,-71.34"`.

1. 

**Un objeto con claves de lat (latitud) y lon (longitud)**

   Este formato se aplica tanto a la sombra clásica como a la sombra con nombre. Claves admitidas: `lat`, `latitude`, `lon`, `long` y `longitude`. Por ejemplo, `{"lat": 41.12, "lon": -71.34}`.

1. 

**Una matriz que representa las coordenadas**

   Una matriz con el formato `[lat,lon]` o `[lon,lat]`. Si utiliza el formato `[lon,lat]`, que es el mismo que el de las coordenadas de [GeoJSON](https://geojson.org/) (aplicable a la sombra clásica y a la sombra con nombre), también debe especificar `order` y `geoLocations`.

   Por ejemplo:

   ```
   {
     "location": {
       "coordinates": [
         **Longitude**,
         **Latitude**
       ],
       "type": "Point",
       "properties": {
         "country": "United States",
         "city": "New York",
         "postalCode": "*****",
         "horizontalAccuracy": 20,
         "horizontalConfidenceLevel": 0.67,
         "state": "New York",
         "timestamp": "2023-01-04T20:59:13.024Z"
       }
     }
   }
   ```

## Cómo indexar los datos de ubicación
<a name="location-indexing-steps"></a>

Los siguientes pasos muestran cómo actualizar la configuración de indexación de los datos de ubicación y cómo usar consultas geográficas para buscar dispositivos.

1. 

**Saber dónde se almacenan los datos de ubicación**

   Actualmente, la indexación de flotas permite indexar los datos de ubicación almacenados en sombras clásicas o sombras con nombre.

1. 

**Utilizar los formatos de datos de ubicación compatibles**

   Asegúrese de que el formato de los datos de ubicación siga uno de los [formatos de datos compatibles](#location-indexing-format).

1. 

**Actualizar la configuración de indexación**

   Como mínimo, active la configuración de indexación de objetos (registro). También debe activar la indexación en la sombra clásica o en la sombra con nombre que contenga sus datos de ubicación. Al actualizar la indexación de objetos, debe incluir los datos de ubicación en la configuración de indexación.

1. 

**Crear y ejecutar geoconsultas**

   Según los casos de uso, cree geoconsultas y ejecútelas para buscar dispositivos. La geoconsulta que componga debe seguir la [sintaxis de consulta](https://docs.aws.amazon.com//iot/latest/developerguide/query-syntax.html). Encontrará algunos ejemplos en [Ejemplo de geoconsultas](#location-indexing-geoqueries).

## Actualización de la configuración de indexación de objetos
<a name="location-indexing-configuration"></a>

Para indexar los datos de ubicación, debe actualizar la configuración de indexación e incluir los datos de ubicación. Según dónde estén almacenados los datos de ubicación, siga los pasos para actualizar la configuración de indexación:

### Los datos de ubicación se almacenan en sombras clásicas
<a name="location-indexing-shadow-configuration"></a>

Si los datos de ubicación se almacenan en una sombra clásica, debe establecer el `thingIndexingMode` en `REGISTRY_AND_SHADOW` y especificar los datos de ubicación en los campos `geoLocations` (`name` y `order`) de [https://docs.aws.amazon.com//iot/latest/apireference/API_IndexingFilter.html](https://docs.aws.amazon.com//iot/latest/apireference/API_IndexingFilter.html).

En el siguiente ejemplo de configuración de indexación de objetos, se especifica la ruta de los datos de ubicación `shadow.reported.coordinates` como `name` y `LonLat` como `order`.

```
{
	"thingIndexingMode": "REGISTRY_AND_SHADOW",
	"filter": {
		"geoLocations": [
			{
				"name": "shadow.reported.coordinates",
				"order": "LonLat"
			}
		]
	}
}
```
+ `thingIndexingMode`

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

  Para indexar los datos de ubicación almacenados en una sombra clásica, debe configurar el `thingIndexingMode` en `REGISTRY_AND_SHADOW`. Para obtener más información, consulte [Modos de indexación de objetos](managing-index.md#index-mode).
+ `filter`

  El filtro de indexación proporciona selecciones adicionales para las sombras con nombre y los datos de geolocalización. Para obtener más información, consulte [Filtro de indexación](managing-index.md#thing-indexing-filter).
+ `geoLocations`

  Es la lista de objetivos de geolocalización que selecciona para indexar. El número máximo predeterminado de objetivos de geolocalización para la indexación es `1`. Para solicitar un aumento de límite, consulte [AWS IoT Device Management Quotas](https://docs.aws.amazon.com//general/latest/gr/iot_device_management.html#fleet-indexing-limits).
+ `name`

  Es el nombre del campo objetivo de geolocalización. Un ejemplo de valor de `name` puede ser la ruta de los datos de ubicación de la sombra: `shadow.reported.coordinates`.
+ `order`

  Es el orden del campo objetivo de geolocalización. Los valores válidos son `LatLon` y `LonLat`. `LatLon` significa latitud y longitud. `LonLat` significa longitud y latitud. Este campo es opcional. El valor predeterminado es `LatLon`.

### Los datos de ubicación se almacenan en sombras con nombre
<a name="location-indexing-named-shadow-configuration"></a>

Si los datos de ubicación se almacenan en una sombra con nombre, defina el `namedShadowIndexingMode` en `ON`, añada los nombres de la sombra con nombre al campo `namedShadowNames` en [https://docs.aws.amazon.com//iot/latest/apireference/API_IndexingFilter.html](https://docs.aws.amazon.com//iot/latest/apireference/API_IndexingFilter.html) y especifique la ruta de los datos de ubicación en el campo `geoLocations` en [https://docs.aws.amazon.com//iot/latest/apireference/API_IndexingFilter.html](https://docs.aws.amazon.com//iot/latest/apireference/API_IndexingFilter.html).

En el siguiente ejemplo de configuración de indexación de objetos, se especifica la ruta de los datos de ubicación `shadow.name.namedShadow1.reported.coordinates` como `name` y `LonLat` como `order`.

```
{
	"thingIndexingMode": "REGISTRY",
	"namedShadowIndexingMode": "ON",
	"filter": {
		"namedShadowNames": [
			"namedShadow1"
		],
		"geoLocations": [
			{
				"name": "shadow.name.namedShadow1.reported.coordinates",
				"order": "LonLat"
			}
		]
	}
}
```
+ `thingIndexingMode`

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

  Para indexar los datos de ubicación almacenados en una sombra con nombre, debe configurar el `thingIndexingMode` en `REGISTRY` (o `REGISTRY_AND_SHADOW`). Para obtener más información, consulte [Modos de indexación de objetos](managing-index.md#index-mode).
+ `filter`

  El filtro de indexación proporciona selecciones adicionales para las sombras con nombre y los datos de geolocalización. Para obtener más información, consulte [Filtro de indexación](managing-index.md#thing-indexing-filter).
+ `geoLocations`

  Es la lista de objetivos de geolocalización que selecciona para indexar. El número máximo predeterminado de objetivos de geolocalización para la indexación es `1`. Para solicitar un aumento de límite, consulte [AWS IoT Device Management Quotas](https://docs.aws.amazon.com//general/latest/gr/iot_device_management.html#fleet-indexing-limits).
+ `name`

  Es el nombre del campo objetivo de geolocalización. Un ejemplo de valor de `name` puede ser la ruta de los datos de ubicación de la sombra: `shadow.name.namedShadow1.reported.coordinates`.
+ `order`

  Es el orden del campo objetivo de geolocalización. Los valores válidos son `LatLon` y `LonLat`. `LatLon` significa latitud y longitud. `LonLat` significa longitud y latitud. Este campo es opcional. El valor predeterminado es `LatLon`.

## Ejemplo de geoconsultas
<a name="location-indexing-geoqueries"></a>

Tras completar la configuración de indexación de los datos de ubicación, ejecute geoconsultas para buscar dispositivos. También puede combinar las geoconsultas con otras cadenas de consulta. Para obtener más información, consulte [Sintaxis de la consulta](query-syntax.md) y [Ejemplo de consultas de objetos](example-queries.md).

**Ejemplo de consulta 1**

En este ejemplo, se parte de la base de que los datos de ubicación se almacenan en una sombra con nombre `gps-tracker`. El resultado de este comando es la lista de dispositivos que se encuentran a una distancia radial de 15,5 km del punto central de las coordenadas (47.6204, -122.3491).

```
aws iot search-index --query-string \
"shadow.name.gps-tracker.reported.coordinates:geo_distance,47.6204,-122.3491,15.5km"
```

**Ejemplo de consulta 2**

En este ejemplo, se parte de la base de que los datos de ubicación se almacenan en una sombra clásica. El resultado de este comando es la lista de dispositivos que se encuentran a una distancia radial de 15,5 km del punto central de las coordenadas (47.6204, -122.3491).

```
aws iot search-index --query-string \
"shadow.reported.coordinates:geo_distance,47.6204,-122.3491,15.5km"
```

**Ejemplo de consulta 3**

En este ejemplo, se parte de la base de que los datos de ubicación se almacenan en una sombra clásica. El resultado de este comando es la lista de dispositivos que no están conectados y se encuentran fuera de la distancia radial de 15,5 km del punto central de las coordenadas (47.6204, -122.3491).

```
aws iot search-index --query-string \
"connectivity.connected:false AND (NOT shadow.reported.coordinates:geo_distance,47.6204,-122.3491,15.5km)"
```

# Tutorial introductorio
<a name="location-indexing-tutorial"></a>

En este tutorial se explica cómo utilizar la [indexación de flotas](iot-indexing.md) para [indexar los datos de ubicación](location-indexing-geoquery.md). Para simplificar, puede crear un objeto que represente su dispositivo y almacenar los datos de ubicación en una sombra con nombre, actualizar la configuración de indexación de objetos para la indexación de ubicaciones y ejecutar geoconsultas de ejemplo para buscar dispositivos dentro de un límite radial.

Para completar este tutorial se necesitan aproximadamente 15 minutos.

**Topics**
+ [Requisitos previos](#location-indexing-tutorial-prerequisites)
+ [Creación de objetos y sombras](#location-indexing-create-resources)
+ [Actualización de la configuración de indexación de objetos](#location-indexing-update-configuration)
+ [Ejecución de una geoconsulta](#location-indexing-run-geoquery)

## Requisitos previos
<a name="location-indexing-tutorial-prerequisites"></a>
+ Instale la versión más reciente de [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html).
+ Familiarícese con la [indexación de ubicaciones y las geoconsultas](https://docs.aws.amazon.com/iot/latest/developerguide/location-indexing-geoquery.html), la [administración de la indexación de objetos](https://docs.aws.amazon.com/iot/latest/developerguide/managing-index.html) y la [sintaxis de las consultas](https://docs.aws.amazon.com/iot/latest/developerguide/query-syntax.html).

## Creación de objetos y sombras
<a name="location-indexing-create-resources"></a>

Cree un objeto para representar su dispositivo y una sombra con nombre para almacenar sus datos de ubicación (coordenadas 47.61564, -122.33584).

1. Ejecute el siguiente comando para crear un objeto que represente la bicicleta llamada Bike-1. *Para obtener más información sobre cómo crear algo mediante el uso AWS CLI, consulte [create-thing](https://docs.aws.amazon.com//cli/latest/reference/iot/create-thing.html) from Reference. *AWS CLI**

   ```
   aws iot create-thing --thing-name "Bike-1" \
   --attribute-payload '{"attributes": {"model":"OEM-2302-12", "battery":"35", "acqDate":"06/09/23"}}'
   ```

   El resultado de este comando puede tener un aspecto similar al siguiente.

   ```
   {
       "thingName": "Bike-1",
       "thingArn": "arn:aws:iot:us-east-1:123456789012:thing/Bike-1",
       "thingId": "df9cf01d-b0c8-48fe-a2e2-e16cff6b23df"
   }
   ```

1. Ejecute el siguiente comando para crear una sombra con nombre para almacenar los datos de ubicación de Bike-1 (coordenadas 47.61564, -122.33584). *Para obtener más información sobre cómo crear una sombra con nombre utilizando AWS CLI, consulte [update-thing-shadow](https://docs.aws.amazon.com//cli/latest/reference/iot-data/update-thing-shadow.html)From *AWS CLI*Reference.*

   ```
   aws iot-data update-thing-shadow \
   --thing-name Bike-1 \
   --shadow-name Bike1-shadow \
   --cli-binary-format raw-in-base64-out \
   --payload '{"state":{"reported":{"coordinates":{"lat": 47.6153, "lon": -122.3333}}}}' \
   "output.txt" \
   ```

   Este comando no proporciona ninguna salida. Para ver la sombra con nombre que ha creado, puede ejecutar el comando CLI [list-named-shadows-for-thing](https://docs.aws.amazon.com//cli/latest/reference/iot-data/list-named-shadows-for-thing.html).

   ```
   aws iot-data list-named-shadows-for-thing --thing-name Bike-1
   ```

   El resultado de este comando puede tener un aspecto similar al siguiente.

   ```
   {
       "results": [
           "Bike1-shadow"
       ],
       "timestamp": 1699574309
   }
   ```

## Actualización de la configuración de indexación de objetos
<a name="location-indexing-update-configuration"></a>

Para indexar los datos de ubicación, debe actualizar la configuración de indexación de objetos para incluir los datos de ubicación. Como en este tutorial los datos de ubicación se almacenan en una sombra con nombre, defina el `thingIndexingMode` en `REGISTRY` (con un requisito mínimo), defina el `namedShadowIndexingMode` en `ON` y añada los datos de ubicación a la configuración. En este ejemplo, debe añadir el nombre de la sombra con nombre y la ruta de los datos de ubicación de la sombra al `filter`.

1. Ejecute el comando para actualizar la configuración de indexación para indexar las ubicaciones.

   ```
   aws iot update-indexing-configuration --cli-input-json '{
   "thingIndexingConfiguration": { "thingIndexingMode": "REGISTRY",
   "thingConnectivityIndexingMode": "OFF",
   "deviceDefenderIndexingMode": "OFF",
   "namedShadowIndexingMode": "ON",
   "filter": {
       "namedShadowNames": ["Bike1-shadow"],
       "geoLocations":[{
           "name":"shadow.name.Bike1-shadow.reported.coordinates"
       }]
   },
   "customFields": [
   { "name":"attributes.battery",
   "type":"Number"}] } }'
   ```

   El comando no genera ningún resultado. Puede que tenga que esperar un momento hasta que se complete la actualización. Para comprobar el estado, ejecute el comando de la CLI [describe-index](https://docs.aws.amazon.com//cli/latest/reference/iot/describe-index.html). Si ve que `indexStatus` muestra `ACTIVE`, significa que se ha completado la actualización de la indexación de objetos.

1. Ejecute el comando para comprobar la configuración de la indexación. Este paso es opcional.

   ```
   aws iot get-indexing-configuration
   ```

   El resultado puede ser similar al siguiente:

   ```
   {
       "thingIndexingConfiguration": {
           "thingIndexingMode": "REGISTRY",
           "thingConnectivityIndexingMode": "OFF",
           "deviceDefenderIndexingMode": "OFF",
           "namedShadowIndexingMode": "ON",
           "managedFields": [
               {
                   "name": "shadow.name.*.hasDelta",
                   "type": "Boolean"
               },
               {
                   "name": "registry.version",
                   "type": "Number"
               },
               {
                   "name": "registry.thingTypeName",
                   "type": "String"
               },
               {
                   "name": "registry.thingGroupNames",
                   "type": "String"
               },
               {
                   "name": "shadow.name.*.version",
                   "type": "Number"
               },
               {
                   "name": "thingName",
                   "type": "String"
               },
               {
                   "name": "thingId",
                   "type": "String"
               }
           ],
           "customFields": [
               {
                   "name": "attributes.battery",
                   "type": "Number"
               }
           ],
           "filter": {
               "namedShadowNames": [
                   "Bike1-shadow"
               ],
               "geoLocations": [
                   {
                       "name": "shadow.name.Bike1-shadow.reported.coordinates",
                       "order": "LatLon"
                   }
               ]
           }
       },
       "thingGroupIndexingConfiguration": {
           "thingGroupIndexingMode": "OFF"
       }
   }
   ```

## Ejecución de una geoconsulta
<a name="location-indexing-run-geoquery"></a>

Ahora ha actualizado su configuración de indexación de objetos para incluir los datos de ubicación. Intente crear algunas geoconsultas y ejecútelas para ver si puede obtener los resultados de búsqueda deseados. Una geoconsulta debe seguir la [sintaxis de consulta](query-syntax.md). Puede consultar algunos ejemplos útiles de geoconsultas en [Ejemplo de geoconsultas](location-indexing-geoquery.md#location-indexing-geoqueries).

En el siguiente comando de ejemplo, se utiliza la geoconsulta `shadow.name.Bike1-shadow.reported.coordinates:geo_distance,47.6204,-122.3491,15.5km` para buscar dispositivos que se encuentren dentro de una distancia radial de 15,5 km desde el punto central de las coordenadas (47.6204, -122.3491). 

```
aws iot search-index --query-string "shadow.name.Bike1-shadow.reported.coordinates:geo_distance,47.6204,-122.3491,15.5km"
```

Como tiene un dispositivo ubicado en las coordenadas lat: 47.6153, lon: -122.3333, que se encuentra a una distancia de 15,5 km del punto central, debería ver este dispositivo (Bike-1) en el resultado. El resultado puede ser similar al siguiente:

```
{
    "things": [
        {
            "thingName": "Bike-1",
            "thingId": "df9cf01d-b0c8-48fe-a2e2-e16cff6b23df",
            "attributes": {
                "acqDate": "06/09/23",
                "battery": "35",
                "model": "OEM-2302-12"
            },
            "shadow": "{\"reported\":{\"coordinates\":{\"lat\":47.6153,\"lon\":-122.3333}},\"metadata\":{\"reported\":{\"coordinates\":{\"lat\":{\"timestamp\":1699572906},\"lon\":{\"timestamp\":1699572906}}}},\"hasDelta\":false,\"version\":1}"
        }
    ]
}
```

Para obtener más información, consulte [Indexación de datos de ubicación](location-indexing-geoquery.md).

# Métricas de flota
<a name="iot-fleet-metrics"></a>

Las métricas de flota son una función de la [indexación de flotas](iot-indexing.md), un servicio gestionado que te permite indexar, buscar y agregar los datos de tus dispositivos. AWS IoT Puedes usar las métricas de la flota para monitorear el estado agregado de los dispositivos de tu flota a [CloudWatch](https://console.aws.amazon.com/cloudwatch/)lo largo del tiempo, lo que incluye revisar la tasa de desconexión de los dispositivos de tu flota o los cambios promedio en el nivel de batería durante un período específico.

Con las métricas de la flota, puedes crear [consultas de agregación](index-aggregate.md) cuyos resultados se emitan continuamente [CloudWatch](https://console.aws.amazon.com/cloudwatch/)como métricas para analizar tendencias y crear alarmas. Para sus tareas de monitorización, puede especificar las consultas de agregación de diferentes tipos de agregación (**estadísticas**, **cardinalidad** y **percentil**). Puede guardar todas sus consultas de agregación para crear métricas de flota para reutilizarlas en el futuro. 

# Tutorial introductorio
<a name="fleet-metrics-get-started"></a>

En este tutorial, creará una [métrica de flota](iot-fleet-metrics.md) para monitorizar las temperaturas de sus sensores y detectar posibles anomalías. Al crear la métrica de flota, defina una [consulta de agregación](index-aggregate.md) que detecte el número de sensores con temperaturas superiores a 80 grados Fahrenheit. Usted especifica que la consulta se ejecute cada 60 segundos y los resultados de la consulta se CloudWatch emitirán allí, donde podrá ver la cantidad de sensores que presentan posibles riesgos de alta temperatura y configurar las alarmas. Para completar este tutorial utilizará la [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html). 

En este tutorial, aprenderá a:
+ [Configurar](#fleet-metrics-tutorial-setup).
+ [Crear métricas de flota](#fleet-metrics-tutorial-create)
+ [Vea las métricas en CloudWatch](#fleet-metrics-tutorial-view-data)
+ [Limpiar recursos](#fleet-metrics-tutorial-delete-fleet-metrics)

Para completar este tutorial se necesitan aproximadamente 15 minutos.

## Requisitos previos
<a name="fleet-metrics-tutorial-prerequisites"></a>
+ Instale la versión más reciente de [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)
+ Familiarícese con las [consultas de datos agregados](https://docs.aws.amazon.com/iot/latest/developerguide/index-aggregate.html)
+ Familiarízate con el [uso de CloudWatch las métricas de Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html) 

## Configuración
<a name="fleet-metrics-tutorial-setup"></a>

Para utilizar las métricas de flota, active la indexación de flotas. Para habilitar la indexación de flotas de sus objetos o grupos de objetos con orígenes de datos específicos y configuraciones asociadas, siga las instrucciones de [Administrar la indexación de objetos](managing-index.md#enable-index) y [Administrar la indexación de grupos de objetos](thinggroup-index.md#enable-group-index).

**Para configurar**

1. Ejecute el siguiente comando para habilitar la indexación de flotas y especifique los orígenes de datos en los que realizar la búsqueda. 

   ```
   aws iot update-indexing-configuration \
   --thing-indexing-configuration "thingIndexingMode=REGISTRY_AND_SHADOW,customFields=[{name=attributes.temperature,type=Number},{name=attributes.rackId,type=String},{name=attributes.stateNormal,type=Boolean}],thingConnectivityIndexingMode=STATUS" \
   ```

   El comando de la CLI del ejemplo anterior permite que la indexación de flotas admita la búsqueda de datos de registro, datos de sombras y el estado de conectividad de las objetos mediante el índice `AWS_Things`. 

   El cambio de la configuración puede tardar algunos minutos en completarse. Compruebe que la indexación de flotas esté habilitada antes de crear las métricas de flota. 

   Para comprobar si la indexación de flotas está habilitada, ejecute el siguiente comando de la CLI: 

   ```
   aws --region us-east-1 iot describe-index --index-name "AWS_Things"
   ```

   Para obtener más información, consulte [Habilitar la indexación de objetos](managing-index.md#enable-index).

1. Ejecute el siguiente script bash para crear diez objetos y describirlos. 

   ```
   # Bash script. Type `bash` before running in other shells.
   
   Temperatures=(70 71 72 73 74 75 47 97 98 99)
   Racks=(Rack1 Rack1 Rack2 Rack2 Rack3 Rack4 Rack5 Rack6 Rack6 Rack6)
   IsNormal=(true true true true true true false false false false)
   
   for ((i=0; i < 10; i++))
   do
     thing=$(aws iot create-thing --thing-name "TempSensor$i" --attribute-payload attributes="{temperature=${Temperatures[@]:$i:1},rackId=${Racks[@]:$i:1},stateNormal=${IsNormal[@]:$i:1}}")
     aws iot describe-thing --thing-name "TempSensor$i"
   done
   ```

   Este script crea diez objetos para representar diez sensores. Cada objeto tiene los atributos de `temperature`, `rackId`, y `stateNormal`, tal como se describe en la siguiente tabla:    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/fleet-metrics-get-started.html)

   La salida de este script contiene diez archivos JSON. Uno de los archivos JSON tiene el siguiente aspecto:

   ```
   {
       "version": 1, 
       "thingName": "TempSensor0", 
       "defaultClientId": "TempSensor0", 
       "attributes": {
           "rackId": "Rack1", 
           "stateNormal": "true", 
           "temperature": "70"
       }, 
       "thingArn": "arn:aws:iot:region:account:thing/TempSensor0", 
       "thingId": "example-thing-id"
   }
   ```

   Para obtener más información, consulte la sección [Crear un objeto](https://docs.aws.amazon.com/iot/latest/developerguide/thing-registry.html#create-thing).

## Crear métricas de flota
<a name="fleet-metrics-tutorial-create"></a>

**Para crear una métrica de flota**

1. Ejecute el siguiente comando para crear una métrica de flota llamada*high\$1temp\$1FM*. Debe crear la métrica de flota para monitorear la cantidad de sensores con temperaturas superiores a 80 grados Fahrenheit in. CloudWatch 

   ```
   aws iot create-fleet-metric --metric-name "high_temp_FM" --query-string "thingName:TempSensor* AND attributes.temperature >80" --period 60 --aggregation-field "attributes.temperature" --aggregation-type name=Statistics,values=count
   ```

   --metric-name 

   Tipo de datos: cadena. El parámetro `--metric-name` especifica el nombre de una métrica de flota. En este ejemplo, va a crear una métrica de flota llamada *high\$1temp\$1FM*.

   --query-string

   Tipo de datos: cadena. El parámetro `--query-string` especifica la cadena de consulta. En este ejemplo, la cadena de consulta significa consultar todos los elementos cuyos nombres comiencen por *TempSensor*y con temperaturas superiores a 80 grados Fahrenheit. Para obtener más información, consulte [Sintaxis de consultas](query-syntax.md).

   --period 

   Tipo de datos: entero. El parámetro `--period` especifica el tiempo necesario para recuperar los datos agregados en segundos. En este ejemplo, se especifica que la métrica de flota que está creando recupera los datos agregados cada 60 segundos.

   --aggregation-field

   Tipo de datos: cadena. El parámetro `--aggregation-field` especifica el atributo que se va a evaluar. En este ejemplo, se va a evaluar el atributo de temperatura.

   --aggregation-type

   El parámetro `--aggregation-type` especifica el resumen estadístico que se mostrará en la métrica de la flota. Para sus tareas de monitorización, puede personalizar las propiedades de consulta de agregación para los diferentes tipos de agregación (**estadísticas**, **cardinalidad** y **percentil**). En este ejemplo, se especifica el **recuento** para el tipo de agregación y **Statistics** para que devuelva el recuento de dispositivos que tienen atributos que coinciden con la consulta, es decir, para devolver el recuento de los dispositivos cuyos nombres comiencen por *TempSensor*y con temperaturas superiores a 80 grados Fahrenheit. Para obtener mas información, consulte [Consulta de datos agregados](index-aggregate.md).

   El resultado de este comando tendrá un aspecto similar al siguiente.

   ```
   {
       "metricArn": "arn:aws:iot:region:111122223333:fleetmetric/high_temp_FM", 
       "metricName": "high_temp_FM"
   }
   ```
**nota**  
Los puntos de datos pueden tardar un momento en mostrarse. CloudWatch

   Para obtener más información sobre cómo crear una métrica de flota, consulte [Administración de métricas de flota](managing-fleet-metrics.md).

   Si no puede crear una métrica de flota, vaya a [Solución de problemas de métricas de flota](fleet-indexing-troubleshooting.md#fleet-metrics-troubleshooting). 

1. (Opcional) Ejecute el siguiente comando para describir su métrica de flota llamada *high\$1temp\$1FM*:

   ```
   aws iot describe-fleet-metric --metric-name "high_temp_FM"
   ```

   El resultado de este comando tendrá un aspecto similar al siguiente.

   ```
   {
       "queryVersion": "2017-09-30", 
       "lastModifiedDate": 1625249775.834, 
       "queryString": "*", 
       "period": 60, 
       "metricArn": "arn:aws:iot:region:111122223333:fleetmetric/high_temp_FM", 
       "aggregationField": "registry.version", 
       "version": 1, 
       "aggregationType": {
           "values": [
               "count"
           ], 
           "name": "Statistics"
       }, 
       "indexName": "AWS_Things", 
       "creationDate": 1625249775.834, 
       "metricName": "high_temp_FM"
   }
   ```

## Vea las métricas de la flota en CloudWatch
<a name="fleet-metrics-tutorial-view-data"></a>

Tras crear la métrica de flota, puede ver los datos de la métrica en CloudWatch. En este tutorial, verá la métrica que muestra el número de sensores cuyos nombres comienzan por *TempSensor*y con temperaturas superiores a 80 grados Fahrenheit.

**Para ver los puntos de datos en CloudWatch**

1. Abra la CloudWatch consola en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/). 

1. En el CloudWatch menú del panel izquierdo, selecciona **Métricas** para expandir el submenú y, a continuación, selecciona **Todas las métricas**. Esto abre la página con la mitad superior para mostrar el gráfico y la mitad inferior contiene cuatro secciones con pestañas.

1. La primera sección con pestañas **Todas las métricas** muestra todas las métricas que puedes ver en grupos. Selecciona **Io TFleet** Metrics. Contiene todas las métricas de su flota.

1. En la sección **Tipo de agregación** de la pestaña **Todas las métricas**, seleccione **Tipo de agregación** para ver todas las métricas de flota que ha creado. 

1. Elija la métrica de flota para mostrar el gráfico a la izquierda de la sección **Tipos de agregación**. Verás el valor *count* a la izquierda del **nombre de tu métrica**, que es el valor del tipo de agregación que especificaste en la sección [Crear métricas de flota](#fleet-metrics-tutorial-create) de este tutorial.

1. Seleccione la segunda pestaña, denominada **Métricas graficadas**, a la derecha de la pestaña **Todas las métricas** para ver la métrica de flota que eligió en el paso anterior.

   Debería poder ver un gráfico que muestre el número de sensores con temperaturas superiores a 80 grados Fahrenheit, como el siguiente:  
![\[AWS IoT métricas de flota\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/fm-metric-in-cloudwatch.png)
**nota**  
El atributo **Periodo** CloudWatch por defecto es de 5 minutos. Es el intervalo de tiempo entre los puntos de datos que aparecen CloudWatch. Puede cambiar la configuración de **Period** en función de sus necesidades.

1. (Opcional) Puede configurar una alarma métrica. 

   1. En el CloudWatch menú del panel izquierdo, selecciona **Alarmas** para expandir el submenú y, a continuación, selecciona **Todas las alarmas**.

   1. En la página **Alarmas**, seleccione **Crear alarma** en la esquina superior derecha. Sigue las instrucciones **Crear alarma** en la consola para crear una alarma según sea necesario. Para obtener más información, consulta Cómo [usar CloudWatch las alarmas de Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html).

Para obtener más información, consulta Cómo [usar CloudWatch las métricas de Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html). 

Si no puedes ver los puntos de datos CloudWatch, lee [Solución de problemas con las métricas de flota](fleet-indexing-troubleshooting.md#fleet-metrics-troubleshooting).

## Limpieza
<a name="fleet-metrics-tutorial-delete-fleet-metrics"></a>

**Para eliminar métricas de flota**

El comando de la CLI **delete-fleet-metric** se utiliza para eliminar las métricas de flota.

Para eliminar la métrica de flota denominada *high\$1temp\$1FM*, ejecute el comando siguiente.

```
aws iot delete-fleet-metric --metric-name "high_temp_FM"
```

**Para limpiar objetos**

Puede utilizar el comando de la CLI **delete-thing** para eliminar objetos.

Para eliminar los diez objetos que ha creado, ejecute el siguiente script:

```
# Bash script. Type `bash` before running in other shells.

for ((i=0; i < 10; i++))
do
  thing=$(aws iot delete-thing --thing-name "TempSensor$i")
done
```

**Para limpiar las métricas en CloudWatch**

CloudWatch no admite la eliminación de métricas. Las métricas caducan en función de sus programas de retención. Para obtener más información, consulta Cómo [usar CloudWatch las métricas de Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html).

# Administración de métricas de flota
<a name="managing-fleet-metrics"></a>

En este tema se muestra cómo utilizar la AWS IoT consola y cómo AWS CLI gestionar las métricas de tu flota.

**Topics**
+ [Administración de métricas de flota (consola)](#managing-fleet-metrics-console)
+ [Administración de métricas de flota (CLI)](#managing-fleet-metrics-cli)
+ [Autorización del etiquetado de los recursos de IoT](#managing-fleet-metrics-policy)

## Administración de métricas de flota (consola)
<a name="managing-fleet-metrics-console"></a>

En las siguientes secciones, se muestra cómo utilizar la AWS IoT consola para gestionar las métricas de la flota. Asegúrese de activar la indexación de flotas con los orígenes de datos y las configuraciones asociadas antes de crear las métricas de flota.

### Habilitar la indexación de flotas
<a name="setup-steps-console"></a>

Si ya ha habilitado la indexación de flotas, puede omitir esta sección.

Si no ha habilitado la indexación de flotas, siga estas instrucciones.

1. Abre la AWS IoT consola en [https://console.aws.amazon.com/iot/](https://console.aws.amazon.com/iot/).

1. En el AWS IoT menú, selecciona **Configuración**. 

1. Para ver la configuración detallada, en la página **Configuración** desplácese hacia abajo hasta la sección **Indexación de flotas**.

1. Para actualizar la configuración de indexación de flotas, a la derecha de la sección **Indexación de flotas**, seleccione **Administrar indexación**. 

1. En la página **Administrar indexación de flotas**, actualice la configuración de indexación de flotas en función de sus necesidades. 
   + **Configuración**

     Para activar la indexación de objetos, active **Indexación de objetos** y, a continuación, seleccione los orígenes de datos desde los que desee indexar. 

     Para activar la indexación de grupos de objetos, active **Indexación de grupo de objetos**.
   + **Campos personalizados para la agregación: *opcional***

     Los campos personalizados son una lista de pares de nombres y tipos de campo. 

     Para agregar un par de campos personalizados, seleccione **Agregar un campo nuevo**. Introduzca un nombre de campo personalizado, por ejemplo `attributes.temperature`, y, a continuación, seleccione un tipo de campo en el menú **Tipo de campo**. Tenga en cuenta que el nombre de un campo personalizado comienza por `attributes.` y se guardará como un atributo para ejecutar [consultas de agregación de objetos](https://docs.aws.amazon.com/iot/latest/developerguide/index-aggregate.html).

     Para actualizar y guardar la configuración, seleccione **Actualizar**.

### Crear una métrica de flota
<a name="create-fleet-metrics-console"></a>

1. Abre la AWS IoT consola en [https://console.aws.amazon.com/iot/](https://console.aws.amazon.com/iot/). 

1. En el AWS IoT menú, selecciona **Administrar** y, a continuación, selecciona **Estadísticas de flota**.

1. En la página **Métricas de flota**, seleccione **Crear métrica de flota** y complete los pasos de creación.

1. En el paso 1, **Configurar las métricas de flota**
   + En la sección **Consulta**, introduzca una cadena de consulta para especificar los objetos o grupos de objetos que quiere que realicen la búsqueda agregada. La cadena de consulta consta de un atributo y un valor. En **Propiedades**, elija el atributo que desee o, si no aparece en la lista, introdúzcalo en el campo. Especifique el valor después de `:`. Un ejemplo de cadena de consulta puede ser `thingName:TempSensor*`. Para cada cadena de consulta que introduzca, pulse **Intro** en el teclado. Si introduce varias cadenas de consulta, especifique su relación seleccionando los operadores **and**, **or**, **and not** u **or not**. 
   + En **Propiedades del informe**, elija las opciones **Nombre del índice**, **Tipo de agregación** y **Campo de agregación** en sus respectivas listas. A continuación, seleccione los datos que desee agregar en **Seleccionar datos**, donde puede seleccionar varios valores de datos.
   + Elija **Siguiente**.

1. En el paso 2, **Especificar las propiedades de las métricas de flota**
   + En el campo **Nombre de la métrica de flota**, introduzca un nombre para la métrica de flota que está creando.
   + En el campo **Descripción: *opcional***, introduzca una descripción para la métrica de flota que está creando. Este campo es opcional. 
   + En los campos **Horas** y **Minutos**, introduce la hora (con qué frecuencia) quieres que la métrica de flota emita datos CloudWatch.
   + Elija **Siguiente**.

1. En el paso 3, **Revisar y crear**
   + Revise la configuración de los pasos 1 y 2. Para editar esta configuración, elija **Editar**.
   + Seleccione **Crear métrica de flota**.

Una vez creada correctamente, la métrica de flota aparece en la página **Métrica de flota**.

### Actualizar una métrica de flota
<a name="update-fleet-metrics-console"></a>

1. En la página **Métricas de flota**, seleccione la métrica de flota que quiera actualizar.

1. En la página **Detalles** de la métrica de flota, seleccione **Editar**. Se abren los pasos de creación, en los que puede actualizar la métrica de su flota en cualquiera de los tres pasos. 

1. Cuando termine de actualizar la métrica de flota, seleccione **Actualizar métrica de flota**.

### Eliminar una métrica de flota
<a name="delete-fleet-metrics-console"></a>

1. En la página **Métricas de flota**, seleccione la métrica de flota que quiera eliminar.

1. En la página siguiente que muestra los detalles de la métrica de su flota, seleccione **Eliminar**.

1. En el cuadro de diálogo, escriba el nombre de la métrica de flota para confirmar la eliminación.

1. Elija **Eliminar**. Este paso elimina la métrica de flota de forma permanente.

## Administración de métricas de flota (CLI)
<a name="managing-fleet-metrics-cli"></a>

En las siguientes secciones, se muestra cómo utilizarlos AWS CLI para gestionar las métricas de la flota. Asegúrese de activar la indexación de flotas con los orígenes de datos y las configuraciones asociadas antes de crear las métricas de flota. Para habilitar la indexación de flotas de sus objetos o grupos de objetos, siga las instrucciones de [Administrar la indexación de objetos](managing-index.md#enable-index) o [Administrar la indexación de grupos de objetos](thinggroup-index.md#enable-group-index).

### Crear una métrica de flota
<a name="create-fleet-metrics"></a>

Puede usar el comando create-fleet-metric CLI para crear una métrica de flota. 

```
aws iot create-fleet-metric --metric-name "YourFleetMetricName" --query-string "*" --period 60 --aggregation-field "registry.version" --aggregation-type name=Statistics,values=sum
```

La salida de este comando contiene el nombre y el nombre de recurso de Amazon (ARN) de su métrica de flota. El resultado es similar al siguiente:

```
{
    "metricArn": "arn:aws:iot:us-east-1:111122223333:fleetmetric/YourFleetMetricName", 
    "metricName": "YourFleetMetricName"
}
```

### Enumerar métricas de flota
<a name="list-fleet-metrics"></a>

Puede usar el comando list-fleet-metric CLI para enumerar todas las métricas de la flota de su cuenta. 

```
aws iot list-fleet-metrics
```

La salida de este comando contiene todas las métricas de flota. El resultado es similar al siguiente:

```
{
    "fleetMetrics": [
        {
            "metricArn": "arn:aws:iot:us-east-1:111122223333:fleetmetric/YourFleetMetric1", 
            "metricName": "YourFleetMetric1"
        }, 
        {
            "metricArn": "arn:aws:iot:us-east-1:111122223333:fleetmetric/YourFleetMetric2", 
            "metricName": "YourFleetMetric2"
        }
    ]
}
```

### Describir una métrica de flota
<a name="describe-fleet-metrics"></a>

Puede usar el comando describe-fleet-metric CLI para mostrar información más detallada sobre una métrica de flota. 

```
aws iot describe-fleet-metric --metric-name "YourFleetMetricName"
```

La salida del comando contiene información acerca de la métrica de flota especificada. El resultado es similar al siguiente:

```
{
    "queryVersion": "2017-09-30", 
    "lastModifiedDate": 1625790642.355, 
    "queryString": "*", 
    "period": 60, 
    "metricArn": "arn:aws:iot:us-east-1:111122223333:fleetmetric/YourFleetMetricName", 
    "aggregationField": "registry.version", 
    "version": 1, 
    "aggregationType": {
        "values": [
            "sum"
        ], 
        "name": "Statistics"
    }, 
    "indexName": "AWS_Things", 
    "creationDate": 1625790642.355, 
    "metricName": "YourFleetMetricName"
}
```

### Actualizar una métrica de flota
<a name="update-fleet-metrics"></a>

Puede usar el comando update-fleet-metric CLI para actualizar una métrica de flota. 

```
aws iot update-fleet-metric --metric-name "YourFleetMetricName" --query-string "*" --period 120 --aggregation-field "registry.version" --aggregation-type name=Statistics,values=sum,count --index-name AWS_Things
```

El comando update-fleet-metric no genera ninguna salida. Puede usar el comando describe-fleet-metric CLI para ver el resultado.

```
{
    "queryVersion": "2017-09-30", 
    "lastModifiedDate": 1625792300.881, 
    "queryString": "*", 
    "period": 120, 
    "metricArn": "arn:aws:iot:us-east-1:111122223333:fleetmetric/YourFleetMetricName", 
    "aggregationField": "registry.version", 
    "version": 2, 
    "aggregationType": {
        "values": [
            "sum", 
            "count"
        ], 
        "name": "Statistics"
    }, 
    "indexName": "AWS_Things", 
    "creationDate": 1625792300.881, 
    "metricName": "YourFleetMetricName"
}
```

### Eliminar una métrica de flota
<a name="delete-fleet-metrics"></a>

Utilice el comando delete-fleet-metric CLI para eliminar una métrica de flota. 

```
aws iot delete-fleet-metric --metric-name "YourFleetMetricName"
```

Este comando no produce ningún resultado si la eliminación se realiza correctamente o si se especifica una métrica de flota que no existe.

Para obtener más información, consulte la [Solución de problemas de métricas de flota](fleet-indexing-troubleshooting.md#fleet-metrics-troubleshooting).

## Autorización del etiquetado de los recursos de IoT
<a name="managing-fleet-metrics-policy"></a>

Para controlar mejor las métricas de flota que puede crear, modificar o usar, puede asociarles etiquetas.

Para etiquetar las métricas de flota que cree utilizando Consola de administración de AWS o AWS CLI, debe incluir la `iot:TagResource` acción en su política de IAM para conceder permisos al usuario. Si la política de IAM no incluye la acción `iot:TagResource`, cualquier acción para crear una métrica de flota con una etiqueta devolverá un error `AccessDeniedException`.

Para obtener más información general sobre los recursos, consulte [Tagging your AWS IoT resources](https://docs.aws.amazon.com//iot/latest/developerguide/tagging-iot.html).

### Ejemplo de política de IAM
<a name="managing-fleet-metrics-policy-example"></a>

Consulte el siguiente ejemplo de política de IAM que concede permisos de etiquetado al crear una métrica de flota:

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Action": [
				"iot:TagResource"
			],
			"Effect": "Allow",
			"Resource": [
				"arn:aws:iot:*:*:fleetmetric/*"
			]
		},
		{
			"Action": [
				"iot:CreateFleetMetric"
			],
			"Effect": "Allow",
			"Resource": [
				"arn:aws:iot:*:*:index/*",
				"arn:aws:iot:*:*:fleetmetric/*"
			]
		}
	]
}
```

Para obtener información, consulte [Acciones, recursos y claves de condición para AWS IoT](https://docs.aws.amazon.com//service-authorization/latest/reference/list_awsiot.html).