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.
Temas
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:
-
--filters
tales como ec2, autoescalado y rds . -
Nombres que empiezan por la palabra
filter
, por ejemplo--filter-expression
para el comandoaws 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
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
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 comohead
otail
. -
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.
Temas de filtrado del lado del cliente
- Antes de comenzar
- Identificadores
- Cómo seleccionar de una lista
- Filtrado de datos anidados
- Aplanamiento de los resultados
- Filtrado para valores específicos
- Expresiones de canalización
- Filtrado para varios valores de identificador
- Agregado de etiquetas a valores de identificador
- Funciones
- Ejemplos --query avanzados
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
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*
.
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
$
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
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 Attachments
para 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 SubExpressions
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
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 Attached
State
.
$
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
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
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
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
Funciones
La JMESPath sintaxis contiene muchas funciones que puede utilizar para sus consultas. Para obtener información sobre JMESPath las funciones, consulte Funciones integradas
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
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ónjq
e instrucciones de instalación, consulte jqon GitHub.