Filtrado de la salida AWS CLI - AWS Command Line Interface

Python 2.7, 3.4 y 3.5 están obsoletas para la versión 1 de AWS CLI. Para obtener más información, consulte la sección de la versión 1 de AWS CLI de Acerca de las versiones de AWS CLI.

Filtrado de la salida AWS CLI

La AWS Command Line Interface (AWS CLI) tiene filtrado tanto del lado del servidor como del cliente que usted puede usar en forma individual o juntos para filtrar su 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 la API, y generalmente lo implementa con un parámetro --filter. El servicio solo devuelve resultados coincidentes que pueden acelerar los tiempos de respuesta HTTP para conjuntos de datos grandes.

  • El filtrado del lado del cliente es respaldado por el cliente AWS CLI mediante el uso del parámetro --query. Este parámetro tiene capacidades que el filtrado del lado del servidor puede no tener.

Filtrado en el servidor

El filtrado en el servidor en el AWS CLI se proporciona a través del API de servicio AWS. El servicio AWS solo devuelve los registros de la respuesta HTTP que coinciden con el filtro, lo que puede acelerar los tiempos de respuesta HTTP para conjuntos de datos grandes. Dado que el filtrado del lado del servidor está definido por la API del servicio, los nombres de los parámetros y las funciones varían entre los servicios. Algunos nombres de parámetros comunes utilizados para filtrar son:

Para obtener información acerca de si un comando específico tiene filtrado del lado del servidor y las reglas de filtrado, consulte la Referencia de los comandos de la AWS CLI.

Filtrado del lado del cliente

La AWS CLI ofrece capacidades de filtrado de salida basadas en JSON integradas 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 parámetro --query toma la respuesta HTTP que regresa del servidor y filtra los resultados antes de mostrarlos. Dado que toda la respuesta HTTP se envía al cliente antes del filtrado, el filtrado del lado del cliente puede ser más lento que el filtrado del lado del servidor para grandes conjuntos de datos.

Las consultas usan sintaxis JMESPath para crear expresiones para filtrar la salida. Para obtener más información acerca de la sintaxis de JMesPath, consulte el Tutorial del sitio web JMESPath.

importante

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

  • Si especifica --output text, la salida se pagina antes de que se aplique el filtro --query y la AWS CLI ejecuta la consulta una vez en cada página de la salida. 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 solucionar este resultado adicional, puede especificar --no-paginate para aplicar el filtro solo al conjunto completo de resultados, pero puede dar lugar a una salida larga. 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. La AWS CLI ejecuta la consulta solo una vez en toda la estructura y produce un resultado filtrado que luego se ofrece como salida.

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 Entrecomillado de cadenas en la AWS CLI.

En la siguiente salida JSON se muestra un ejemplo de lo que el parámetro --query puede producir. La salida describe tres volúmenes de Amazon EBS conectados a instancias independientes de Amazon EC2.

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

Identifiers

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 web JMESPath.

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 acerca de los índices de matriz, consulte Expresiones de índice en el Sitio web JMESPath.

$ 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, iniciar es el índice de matriz inicial, detener es el índice donde 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 Sectores en el Sitio web JMESPath.

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 SubExpresiones en elSitio web JMESPath.

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 Aplanar en el Sitio web JMESPath.

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 Expresiones de filtro en el Sitio web JMESPath.

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 Expresiones de canalización en el Sitio web JMESPath.

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, VolumeId][]][]' [ "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 Sitio web JMESPath.

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 Type para los valores VolumeType.

$ aws ec2 describe-volumes \ --query 'Volumes[].{VolumeType: VolumeType}' [ { "Type": "standard", }, { "Type": "standard", }, { "Type": "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 Hash de selección múltiple en el Sitio web JMESPath.

Functions

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

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 AMI más recientes

En el siguiente ejemplo, se muestran las cinco imágenes de Amazon Machine (AMI) más reciente que ha creado, ordenadas de la más reciente y 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 Auto Scaling 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 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 está utilizando conjuntos de datos grandes, usar primero el filtrado del lado del servidor puede reducir la cantidad de datos que se envían al cliente para cada AWS CLI, sin dejar de mantener la potente personalización que proporciona el filtrado del lado del cliente.

En el siguiente ejemplo se muestran los volúmenes de Amazon EC2 con el filtrado tanto del lado del cliente como del servidor. 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, "Type": "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

En el ejemplo siguiente, se muestra el número de volúmenes disponibles que son más de 1000 IOPS utilizando 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

Solicitud automática de AWS CLI

Cuando comience a usar expresiones de filtro, puede usar la función de solicitud automática en la versión 2 de la AWS CLI. La característica de solicitud automática proporciona una vista previa al presionar la tecla F5. Para obtener más información, consulte Como tener una solicitud de AWS CLI para los comandos.

Terminal JMESPath

Terminal JMesPath es un comando de terminal interactivo para experimentar con expresiones JMesPath 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 directamente la salida AWS CLI a la terminal, lo que permite la experimentación avanzada de consultas.

El siguiente ejemplo de canalizaciones aws ec2 describe-volumes sale directamente al terminal JMESPath.

$ aws ec2 describe-volumes | jpterm

Para obtener más información acerca del terminal JMESPath y las instrucciones de instalación, consulte Terminal JMESPath en 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 sobre jq e instrucciones sobre la instalación, consulte jq en GitHub.