Filtrar la salida en el AWS CLI - AWS Command Line Interface

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.

Filtrar la salida en el AWS CLI

El AWS Command Line Interface (AWS CLI) tiene filtros tanto del lado del servidor como del lado del cliente que puede usar individualmente o en conjunto para filtrar la salida. AWS CLI El filtrado del lado del servidor se procesa primero y devuelve su salida para el filtrado del lado del cliente.

  • El filtrado del lado del servidor es compatible con el yAPI, por lo general, se implementa con un parámetro. --filter El servicio solo devuelve resultados coincidentes, lo que puede acelerar los tiempos de HTTP respuesta para conjuntos de datos de gran tamaño.

  • El cliente que utiliza el parámetro admite el filtrado del lado del AWS CLI cliente. --query Este parámetro tiene capacidades que el filtrado del servidor puede no tener.

Filtrado en el servidor

El filtrado del lado del servidor lo proporciona AWS CLI el servicio. AWS API El AWS servicio solo devuelve los registros de la HTTP respuesta que coinciden con su filtro, lo que puede acelerar los tiempos de HTTP respuesta para conjuntos de datos de gran tamaño. Como el servicio define el filtrado del lado del servidorAPI, los nombres y funciones de los parámetros varían de un servicio a otro. Algunos nombres de parámetros comunes utilizados para filtrar son:

  • --filter tales como ses y ‎ce.

  • --filters tales como ec2, ‎autoescalado y rds.

  • ‎Nombres que empiezan por la palab‎ra filter‎, ‎por ejemplo --filter-expression‎ para el comando aws dynamodb scan.

Para obtener información sobre si un comando específico tiene filtrado del lado del servidor y cuáles son las reglas de filtrado, consulte la guía de referencia de la AWS CLI versión 2 de la .

Filtrado del lado del cliente

AWS CLI Proporciona funciones de filtrado integradas JSON en el lado del cliente con el parámetro. --query El parámetro --query es una potente herramienta que se puede utilizar para personalizar el contenido y el estilo de la salida. El --query parámetro toma la HTTP respuesta que llega del servidor y filtra los resultados antes de mostrarlos. Como la HTTP respuesta completa se envía al cliente antes de filtrarla, el filtrado del lado del cliente puede ser más lento que el filtrado del lado del servidor para conjuntos de datos grandes.

Las consultas utilizan la JMESPathsintaxis para crear expresiones con las que filtrar los resultados. Para aprender la JMESPath sintaxis, consulte el tutorial en el JMESPathsitio web.

importante

El tipo de salida que especifique cambia cómo opera la opción --query:

  • Si lo especifica--output text, el resultado se pagina antes de aplicar el --query filtro y AWS CLI ejecuta la consulta una vez en cada página del resultado. Debido a esto, la consulta incluye el primer elemento que coincide en cada página, lo que puede dar lugar a una salida adicional inesperada. Para filtrar más la salida, puede usar otras herramientas de la línea de comandos como head o tail.

  • Si especifica --output json, --output yaml o‎ --output yaml-stream la salida se procesará por completo como‎ una única estructura nativa antes de aplicar el filtro --query. AWS CLI Ejecuta la consulta solo una vez en toda la estructura, lo que produce un resultado filtrado que, a continuación, se muestra.

Antes de comenzar

Cuando utilice las expresiones de filtro utilizadas en estos ejemplos, asegúrese de utilizar las reglas de entrecomillado correctas para el shell de terminal. Para obtener más información, consulte Usar comillas y literales con cadenas en AWS CLI.

El siguiente JSON resultado muestra un ejemplo de lo que puede producir el --query parámetro. El resultado describe tres EBS volúmenes de Amazon adjuntos a distintas EC2 instancias de Amazon.

$ aws ec2 describe-volumes { "Volumes": [ { "AvailabilityZone": "us-west-2a", "Attachments": [ { "AttachTime": "2013-09-17T00:55:03.000Z", "InstanceId": "i-a071c394", "VolumeId": "vol-e11a5288", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-e11a5288", "State": "in-use", "SnapshotId": "snap-f23ec1c8", "CreateTime": "2013-09-17T00:55:03.000Z", "Size": 30 }, { "AvailabilityZone": "us-west-2a", "Attachments": [ { "AttachTime": "2013-09-18T20:26:16.000Z", "InstanceId": "i-4b41a37c", "VolumeId": "vol-2e410a47", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-2e410a47", "State": "in-use", "SnapshotId": "snap-708e8348", "CreateTime": "2013-09-18T20:26:15.000Z", "Size": 8 }, { "AvailabilityZone": "us-west-2a", "Attachments": [ { "AttachTime": "2020-11-20T19:54:06.000Z", "InstanceId": "i-1jd73kv8", "VolumeId": "vol-a1b3c7nd", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-a1b3c7nd", "State": "in-use", "SnapshotId": "snap-234087fb", "CreateTime": "2020-11-20T19:54:05.000Z", "Size": 15 } ] }

Identificadores

Los identificadores son las etiquetas de los valores de salida. Al crear filtros, se utilizan identificadores para reducir los resultados de la consulta. En el siguiente ejemplo de salida, se resaltan todos los identificadores como Volumes, AvailabilityZone y AttachTime.

$ aws ec2 describe-volumes { "Volumes": [ { "AvailabilityZone": "us-west-2a", "Attachments": [ { "AttachTime": "2013-09-17T00:55:03.000Z", "InstanceId": "i-a071c394", "VolumeId": "vol-e11a5288", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-e11a5288", "State": "in-use", "SnapshotId": "snap-f23ec1c8", "CreateTime": "2013-09-17T00:55:03.000Z", "Size": 30 }, { "AvailabilityZone": "us-west-2a", "Attachments": [ { "AttachTime": "2013-09-18T20:26:16.000Z", "InstanceId": "i-4b41a37c", "VolumeId": "vol-2e410a47", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-2e410a47", "State": "in-use", "SnapshotId": "snap-708e8348", "CreateTime": "2013-09-18T20:26:15.000Z", "Size": 8 }, { "AvailabilityZone": "us-west-2a", "Attachments": [ { "AttachTime": "2020-11-20T19:54:06.000Z", "InstanceId": "i-1jd73kv8", "VolumeId": "vol-a1b3c7nd", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-a1b3c7nd", "State": "in-use", "SnapshotId": "snap-234087fb", "CreateTime": "2020-11-20T19:54:05.000Z", "Size": 15 } ] }

Para obtener más información, consulte Identificadores en el sitio JMESPathweb.

Cómo seleccionar de una lista

Una lista o matriz es un identificador que va seguido de un corchete “[” como Volumes y Attachments en la Antes de comenzar.

Sintaxis

<listName>[ ]

Para filtrar todos los resultados de una matriz, puede usar la notación comodín. Las expresiones comodín son expresiones utilizadas para devolver elementos utilizando la notación *.

En el siguiente ejemplo se consulta todo el contenido de Volumes.

$ aws ec2 describe-volumes \ --query 'Volumes[*]' [ { "AvailabilityZone": "us-west-2a", "Attachments": [ { "AttachTime": "2013-09-17T00:55:03.000Z", "InstanceId": "i-a071c394", "VolumeId": "vol-e11a5288", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-e11a5288", "State": "in-use", "SnapshotId": "snap-f23ec1c8", "CreateTime": "2013-09-17T00:55:03.000Z", "Size": 30 }, { "AvailabilityZone": "us-west-2a", "Attachments": [ { "AttachTime": "2020-11-20T19:54:06.000Z", "InstanceId": "i-1jd73kv8", "VolumeId": "vol-a1b3c7nd", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-a1b3c7nd", "State": "in-use", "SnapshotId": "snap-234087fb", "CreateTime": "2020-11-20T19:54:05.000Z", "Size": 15 } ]

Para ver un volumen específico en la matriz por índice, se llama al índice de matriz. Por ejemplo, el primer elemento de la matriz Volumes tiene un índice de 0, lo que resulta en la consulta Volumes[0]. Para obtener más información sobre los índices de matriz, consulte las expresiones de índice en el JMESPath sitio web.

$ aws ec2 describe-volumes \ --query 'Volumes[0]' { "AvailabilityZone": "us-west-2a", "Attachments": [ { "AttachTime": "2013-09-17T00:55:03.000Z", "InstanceId": "i-a071c394", "VolumeId": "vol-e11a5288", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-e11a5288", "State": "in-use", "SnapshotId": "snap-f23ec1c8", "CreateTime": "2013-09-17T00:55:03.000Z", "Size": 30 }

Para ver un rango específico de volúmenes por índice, utilice slice con la siguiente sintaxis, donde ‎‎iniciar es el índice de matriz inicial, detener es el índice en el que el filtro deja de procesarse y paso es el intervalo de omisión.

Sintaxis

<arrayName>[<start>:<stop>:<step>]

Si se omite cualquiera de estos elementos de la expresión de sector, utilizan los siguientes valores predeterminados:

  • Iniciar: el primer índice de la lista, 0.

  • Detener: el último índice de la lista.

  • Paso: sin saltar paso, donde el valor es 1.

Para devolver solo los dos primeros volúmenes, utilice un valor inicial de 0, un valor de detención de 2 y un valor de paso de 1, como se muestra en el siguiente ejemplo.

$ aws ec2 describe-volumes \ --query 'Volumes[0:2:1]' [ { "AvailabilityZone": "us-west-2a", "Attachments": [ { "AttachTime": "2013-09-17T00:55:03.000Z", "InstanceId": "i-a071c394", "VolumeId": "vol-e11a5288", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-e11a5288", "State": "in-use", "SnapshotId": "snap-f23ec1c8", "CreateTime": "2013-09-17T00:55:03.000Z", "Size": 30 }, { "AvailabilityZone": "us-west-2a", "Attachments": [ { "AttachTime": "2013-09-18T20:26:16.000Z", "InstanceId": "i-4b41a37c", "VolumeId": "vol-2e410a47", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-2e410a47", "State": "in-use", "SnapshotId": "snap-708e8348", "CreateTime": "2013-09-18T20:26:15.000Z", "Size": 8 } ]

Dado que este ejemplo contiene valores predeterminados, puede acortar el segmento de Volumes[0:2:1] a Volumes[:2].

En el ejemplo siguiente se omiten los valores predeterminados y se devuelve cada dos volúmenes de toda la matriz.

$ aws ec2 describe-volumes \ --query 'Volumes[::2]' [ { "AvailabilityZone": "us-west-2a", "Attachments": [ { "AttachTime": "2013-09-17T00:55:03.000Z", "InstanceId": "i-a071c394", "VolumeId": "vol-e11a5288", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-e11a5288", "State": "in-use", "SnapshotId": "snap-f23ec1c8", "CreateTime": "2013-09-17T00:55:03.000Z", "Size": 30 }, { "AvailabilityZone": "us-west-2a", "Attachments": [ { "AttachTime": "2020-11-20T19:54:06.000Z", "InstanceId": "i-1jd73kv8", "VolumeId": "vol-a1b3c7nd", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-a1b3c7nd", "State": "in-use", "SnapshotId": "snap-234087fb", "CreateTime": "2020-11-20T19:54:05.000Z", "Size": 15 } ]

Los pasos también pueden utilizar números negativos para filtrar en el orden inverso de una matriz como se muestra en el siguiente ejemplo.

$ aws ec2 describe-volumes \ --query 'Volumes[::-2]' [ { "AvailabilityZone": "us-west-2a", "Attachments": [ { "AttachTime": "2020-11-20T19:54:06.000Z", "InstanceId": "i-1jd73kv8", "VolumeId": "vol-a1b3c7nd", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-a1b3c7nd", "State": "in-use", "SnapshotId": "snap-234087fb", "CreateTime": "2020-11-20T19:54:05.000Z", "Size": 15 }, { "AvailabilityZone": "us-west-2a", "Attachments": [ { "AttachTime": "2013-09-17T00:55:03.000Z", "InstanceId": "i-a071c394", "VolumeId": "vol-e11a5288", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], "VolumeType": "standard", "VolumeId": "vol-e11a5288", "State": "in-use", "SnapshotId": "snap-f23ec1c8", "CreateTime": "2013-09-17T00:55:03.000Z", "Size": 30 } ]

Para obtener más información, consulte Slices en el JMESPathsitio web.

Filtrado de datos anidados

Para restringir el filtrado de Volumes[*] para los valores anidados, se utilizan subexpresiones agregando un punto y sus criterios de filtro.

Sintaxis

<expression>.<expression>

En el siguiente ejemplo se muestra toda la información de Attachmentspara todos los volúmenes.

$ aws ec2 describe-volumes \ --query 'Volumes[*].Attachments' [ [ { "AttachTime": "2013-09-17T00:55:03.000Z", "InstanceId": "i-a071c394", "VolumeId": "vol-e11a5288", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], [ { "AttachTime": "2013-09-18T20:26:16.000Z", "InstanceId": "i-4b41a37c", "VolumeId": "vol-2e410a47", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ], [ { "AttachTime": "2020-11-20T19:54:06.000Z", "InstanceId": "i-1jd73kv8", "VolumeId": "vol-a1b3c7nd", "State": "attached", "DeleteOnTermination": true, "Device": "/dev/sda1" } ] ]

Para filtrar más los valores anidados, agregue la expresión para cada indentificador anidado. En el ejemplo siguiente, se muestran los State para todos los Volumes.

$ aws ec2 describe-volumes \ --query 'Volumes[*].Attachments[*].State' [ [ "attached" ], [ "attached" ], [ "attached" ] ]

Aplanamiento de los resultados

Para obtener más información, consulte SubExpressionsen el JMESPathsitio web.

Puede aplanar los resultados de Volumes[*].Attachments[*].State eliminando la notación comodín que resulta en la consulta Volumes[*].Attachments[].State. El aplanamiento a menudo es útil para mejorar la legibilidad de los resultados.

$ aws ec2 describe-volumes \ --query 'Volumes[*].Attachments[].State' [ "attached", "attached", "attached" ]

Para obtener más información, consulte Flatten en el sitio JMESPathweb.

Filtrado para valores específicos

Para filtrar valores específicos de una lista, utilice una expresión de filtro como se muestra en la siguiente sintaxis.

Sintaxis

? <expression> <comparator> <expression>]

Los comparadores de expresiones incluyen ==, !=, <, <=, > y >=. En el ejemplo siguiente se filtra para el VolumeIds, para todos los Volumes en un AttachedState.

$ aws ec2 describe-volumes \ --query 'Volumes[*].Attachments[?State==`attached`].VolumeId' [ [ "vol-e11a5288" ], [ "vol-2e410a47" ], [ "vol-a1b3c7nd" ] ]

Esto se puede aplanar, lo que resulta en el siguiente ejemplo.

$ aws ec2 describe-volumes \ --query 'Volumes[*].Attachments[?State==`attached`].VolumeId[]' [ "vol-e11a5288", "vol-2e410a47", "vol-a1b3c7nd" ]

En el ejemplo siguiente se filtra para el VolumeIds, de todos los Volumes que tienen un tamaño inferior a 20.

$ aws ec2 describe-volumes \ --query 'Volumes[?Size < `20`].VolumeId' [ "vol-2e410a47", "vol-a1b3c7nd" ]

Para obtener más información, consulte Filtrar expresiones en el JMESPathsitio web.

Expresiones de canalización

Puede canalizar los resultados de un filtro a una nueva lista y, a continuación, filtrar el resultado con otra expresión utilizando la siguiente sintaxis:

Sintaxis

<expression> | <expression>]

En el siguiente ejemplo se toman los resultados del filtro de la expresión Volumes[*].Attachments[].InstanceId y genera el primer resultado en la matriz.

$ aws ec2 describe-volumes \ --query 'Volumes[*].Attachments[].InstanceId | [0]' "i-a071c394"

En este ejemplo, se crea primero la matriz a partir de la siguiente expresión.

$ aws ec2 describe-volumes \ --query 'Volumes[*].Attachments[].InstanceId' "i-a071c394", "i-4b41a37c", "i-1jd73kv8"

Y luego devuelve el primer elemento de esa matriz.

"i-a071c394"

Para obtener más información, consulte Pipe Expressions en el JMESPathsitio web.

Filtrado para varios valores de identificador

Para filtrar por varios identificadores, utilice una lista de selección múltiple mediante la siguiente sintaxis:

Sintaxis

<listName>[].[<expression>, <expression>]

En el siguiente ejemplo, VolumeId y VolumeType se filtran en la lista Volumes lo que resulta en la siguiente expresión.

$ aws ec2 describe-volumes \ --query 'Volumes[].[VolumeId, VolumeType]' [ [ "vol-e11a5288", "standard" ], [ "vol-2e410a47", "standard" ], [ "vol-a1b3c7nd", "standard" ] ]

Para agregar datos anidados a la lista, agregue otra lista de selección múltiple. El siguiente ejemplo amplía el ejemplo anterior al filtrar también InstanceId y State en la lista de Attachments anidada. Esto da como resultado la siguiente expresión.

$ aws ec2 describe-volumes \ --query 'Volumes[].[VolumeId, VolumeType, Attachments[].[InstanceId, State]]' [ [ "vol-e11a5288", "standard", [ [ "i-a071c394", "attached" ] ] ], [ "vol-2e410a47", "standard", [ [ "i-4b41a37c", "attached" ] ] ], [ "vol-a1b3c7nd", "standard", [ [ "i-1jd73kv8", "attached" ] ] ] ]

Para que sea más legible, aplane la expresión como se muestra en el siguiente ejemplo.

$ aws ec2 describe-volumes \ --query 'Volumes[].[VolumeId, VolumeType, Attachments[].[InstanceId, State][]][]' [ "vol-e11a5288", "standard", [ "i-a071c394", "attached" ], "vol-2e410a47", "standard", [ "i-4b41a37c", "attached" ], "vol-a1b3c7nd", "standard", [ "i-1jd73kv8", "attached" ] ]

Para obtener más información, consulte la lista de selección múltiple en el JMESPathsitio web.

Agregado de etiquetas a valores de identificador

Para facilitar la lectura de este resultado, utilice un hash de selección múltiple con la siguiente sintaxis.

Sintaxis

<listName>[].{<label>: <expression>, <label>: <expression>}

No es necesario que la etiqueta de identificación sea la misma que el nombre del identificador. En el ejemplo siguiente se utiliza la etiqueta VolumeType para los valores VolumeType.

$ aws ec2 describe-volumes \ --query 'Volumes[].{VolumeType: VolumeType}' [ { "VolumeType": "standard", }, { "VolumeType": "standard", }, { "VolumeType": "standard", } ]

Para mayor simplicidad, en el siguiente ejemplo se conservan los nombres de los identificadores de cada etiqueta y se muestra el VolumeId, VolumeType, InstanceId y State de todos los volúmenes:

$ aws ec2 describe-volumes \ --query 'Volumes[].{VolumeId: VolumeId, VolumeType: VolumeType, InstanceId: Attachments[0].InstanceId, State: Attachments[0].State}' [ { "VolumeId": "vol-e11a5288", "VolumeType": "standard", "InstanceId": "i-a071c394", "State": "attached" }, { "VolumeId": "vol-2e410a47", "VolumeType": "standard", "InstanceId": "i-4b41a37c", "State": "attached" }, { "VolumeId": "vol-a1b3c7nd", "VolumeType": "standard", "InstanceId": "i-1jd73kv8", "State": "attached" } ]

Para obtener más información, consulte el hash de selección múltiple en el JMESPath sitio web.

Funciones

La JMESPath sintaxis contiene muchas funciones que puede utilizar para sus consultas. Para obtener información sobre JMESPath las funciones, consulte Funciones integradas en el JMESPathsitio web.

Para demostrar cómo puede incorporar una función a sus consultas, en el siguiente ejemplo se utiliza la función sort_by. La función sort_by ordena una matriz utilizando una expresión como clave de ordenación utilizando la siguiente sintaxis:

Sintaxis

sort_by(<listName>, <sort expression>)[].<expression>

En el ejemplo siguiente se utiliza el ejemplo de hash de selección múltiple y ordena la salida por VolumeId.

$ aws ec2 describe-volumes \ --query 'sort_by(Volumes, &VolumeId)[].{VolumeId: VolumeId, VolumeType: VolumeType, InstanceId: Attachments[0].InstanceId, State: Attachments[0].State}' [ { "VolumeId": "vol-2e410a47", "VolumeType": "standard", "InstanceId": "i-4b41a37c", "State": "attached" }, { "VolumeId": "vol-a1b3c7nd", "VolumeType": "standard", "InstanceId": "i-1jd73kv8", "State": "attached" }, { "VolumeId": "vol-e11a5288", "VolumeType": "standard", "InstanceId": "i-a071c394", "State": "attached" } ]

Para obtener más información, consulte sort_by en el sitio web. JMESPath

Ejemplos --query avanzados

Para extraer información de un elemento específico

En el siguiente ejemplo, se usa el parámetro --query para encontrar un elemento específico en una lista y, a continuación, extrae la información de ese elemento. En el ejemplo, se muestran todas las AvailabilityZones asociadas con el punto de enlace de servicio especificado. Extrae el elemento de la lista ServiceDetails que tiene el ServiceName especificado; a continuación, genera el campo AvailabilityZones a partir de ese elemento seleccionado.

$ aws --region us-east-1 ec2 describe-vpc-endpoint-services \ --query 'ServiceDetails[?ServiceName==`com.amazonaws.us-east-1.ecs`].AvailabilityZones' [ [ "us-east-1a", "us-east-1b", "us-east-1c", "us-east-1d", "us-east-1e", "us-east-1f" ] ]

Para mostrar instantáneas después de la fecha de creación especificada

En el siguiente ejemplo se muestra cómo enumerar todas las instantáneas que se han creado después de una fecha especificada, incluidos solo algunos de los campos disponibles en la salida.

$ aws ec2 describe-snapshots --owner self \ --output json \ --query 'Snapshots[?StartTime>=`2018-02-07`].{Id:SnapshotId,VId:VolumeId,Size:VolumeSize}' [ { "id": "snap-0effb42b7a1b2c3d4", "vid": "vol-0be9bb0bf12345678", "Size": 8 } ]

Para mostrar las más recientes AMIs

En el siguiente ejemplo, se muestran las cinco imágenes de máquina de Amazon (AMIs) más recientes que ha creado, ordenadas de la más reciente a la más antigua.

$ aws ec2 describe-images \ --owners self \ --query 'reverse(sort_by(Images,&CreationDate))[:5].{id:ImageId,date:CreationDate}' [ { "id": "ami-0a1b2c3d4e5f60001", "date": "2018-11-28T17:16:38.000Z" }, { "id": "ami-0a1b2c3d4e5f60002", "date": "2018-09-15T13:51:22.000Z" }, { "id": "ami-0a1b2c3d4e5f60003", "date": "2018-08-19T10:22:45.000Z" }, { "id": "ami-0a1b2c3d4e5f60004", "date": "2018-05-03T12:04:02.000Z" }, { "id": "ami-0a1b2c3d4e5f60005", "date": "2017-12-13T17:16:38.000Z" } ]

Para mostrar instancias de escalado automático en mal estado

El siguiente ejemplo muestra solo la InstanceId para las instancias en mal estado en el grupo de Auto Scaling especificado.

$ aws autoscaling describe-auto-scaling-groups \ --auto-scaling-group-name My-AutoScaling-Group-Name \ --output text \ --query 'AutoScalingGroups[*].Instances[?HealthStatus==`Unhealthy`].InstanceId'

Para incluir volúmenes con la etiqueta especificada

En el siguiente ejemplo se describen todas las instancias con una etiqueta test. Siempre y cuando haya otra etiqueta al lado de test adjunta al volumen, el volumen se sigue devolviendo en los resultados.

La siguiente expresión para devolver todas las etiquetas con la etiqueta test en una matriz. Cualquier etiqueta de que no sea la etiqueta test contiene un valor null.

$ aws ec2 describe-volumes \ --query 'Volumes[*].Tags[?Value == `test`]'

Para excluir volúmenes con la etiqueta especificada

El siguiente ejemplo describe todas las instancias sin una etiqueta test. El uso de una expresión ?Value != `test` simple no funciona para excluir un volumen ya que los volúmenes pueden tener varias etiquetas. Siempre y cuando haya otra etiqueta al lado de test adjunta al volumen, el volumen se sigue devolviendo en los resultados.

Para excluir todos los volúmenes con la etiqueta test, comience con la siguiente expresión para devolver todas las etiquetas con la etiqueta test en una matriz. Cualquier etiqueta de que no sea la etiqueta test contiene un valor null.

$ aws ec2 describe-volumes \ --query 'Volumes[*].Tags[?Value == `test`]'

Luego, filtre todos los resultados positivos test con la función not_null.

$ aws ec2 describe-volumes \ --query 'Volumes[!not_null(Tags[?Value == `test`].Value)]'

Canalice los resultados para aplanar los que resultan en la siguiente consulta.

$ aws ec2 describe-volumes \ --query 'Volumes[!not_null(Tags[?Value == `test`].Value)] | []'

Combinación del filtrado del lado del cliente y del servidor

Se puede utilizar el filtrado del lado del cliente y del servidor juntos. El filtrado del lado del servidor se completa primero y envía los datos al cliente que luego el parámetro --query filtra. Si utiliza conjuntos de datos de gran tamaño, utilizar primero el filtrado del lado del servidor puede reducir la cantidad de datos que se envían al cliente por cada AWS CLI llamada y, al mismo tiempo, conservar la potente personalización que proporciona el filtrado del lado del cliente.

En el siguiente ejemplo, se enumeran los EC2 volúmenes de Amazon que utilizan filtros tanto del lado del servidor como del lado del cliente. El servicio filtra una lista de todos los volúmenes asociados de la zona de disponibilidad us-west-2a. El parámetro --query limita aún más la salida a solo los volúmenes con un valor de Size mayor que 50 y muestra solo los campos especificados con nombres definidos por el usuario.

$ aws ec2 describe-volumes \ --filters "Name=availability-zone,Values=us-west-2a" "Name=status,Values=attached" \ --query 'Volumes[?Size > `50`].{Id:VolumeId,Size:Size,Type:VolumeType}' [ { "Id": "vol-0be9bb0bf12345678", "Size": 80, "VolumeType": "gp2" } ]

El siguiente ejemplo recupera una lista de imágenes que cumplen varios criterios. A continuación, utiliza el parámetro --query para ordenar la salida por CreationDate, que selecciona solo las más recientes. Finalmente, muestra el valor de ImageId de esa imagen.

$ aws ec2 describe-images \ --owners amazon \ --filters "Name=name,Values=amzn*gp2" "Name=virtualization-type,Values=hvm" "Name=root-device-type,Values=ebs" \ --query "sort_by(Images, &CreationDate)[-1].ImageId" \ --output text ami-00ced3122871a4921

El siguiente ejemplo muestra el número de volúmenes disponibles que son superiores a 1000 IOPS y se utiliza length para contar cuántos hay en una lista.

$ aws ec2 describe-volumes \ --filters "Name=status,Values=available" \ --query 'length(Volumes[?Iops > `1000`])' 3

Recursos adicionales de

Solicitud automática de AWS CLI

Al empezar a utilizar expresiones de filtro, puede utilizar la función de solicitud automática de la AWS CLI versión 2. La característica de solicitud automática proporciona una vista previa al presionar la tecla F5. Para obtener más información, consulte Activación y uso de las solicitudes de comando en el AWS CLI.

JMESPathTerminal

JMESPathTerminal es un comando de terminal interactivo para experimentar con JMESPath expresiones que se utilizan para el filtrado del lado del cliente. al usar el comando jpterm, el terminal muestra los resultados inmediatos de la consulta a medida que usted escribe. Puede canalizar la AWS CLI salida directamente a la terminal, lo que permite experimentar con consultas avanzadas.

El siguiente ejemplo canaliza la aws ec2 describe-volumes salida directamente a la JMESPath Terminal.

$ aws ec2 describe-volumes | jpterm

Para obtener más información sobre la JMESPath Terminal y las instrucciones de instalación, consulte JMESPathTerminal on GitHub.

Utilidad jq

La utilidad jq le proporciona una forma de transformar su salida en el lado del cliente a un formato de salida que desee. Para obtener más información jq e instrucciones de instalación, consulte jq on GitHub.