AWS CLI Salida de filtro - 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.

AWS CLI Salida de filtro

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 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 cliente admite el filtrado del lado del cliente mediante el parámetro. AWS CLI --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 la AWS CLI API del 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:

  • --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 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 integradas de filtrado del lado del cliente basadas en JSON 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 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 luego 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 Entrecomillar con 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 } ] }

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 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, 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 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 SubExpressionsel sitio web de 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, 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 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 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 Hash de selección múltiple en el Sitio web JMESPath.

Funciones

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

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 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 Tener una solicitud de la 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 la AWS CLI salida directamente al terminal, lo que permite experimentar con consultas avanzadas.

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 sobre el terminal JMEspath y las instrucciones de instalación, consulte el 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 e instrucciones de instalación, consulte jq jq on. GitHub