query example ec2 describe configurar cli awscli aws amazon-web-services amazon-ec2 aws-cli jmespath

amazon-web-services - example - default output format aws cli



Nombre de instancia de listado entre otros datos con aws-cli 1.3.6 (2)

La pregunta, por lo tanto, es: ¿hay alguna forma de elegir el primer elemento del resultado del filtro (? Key == XXXX) teniendo en cuenta que el sufijo con [0] parece no funcionar?

La forma en que formuló esta pregunta apunta hacia la solución de hecho, concretamente Pipe Expressions (solo disponible a partir de la versión 1.3.7 del aws-cli , por lo tanto, imposible de descifrar en el momento de la pregunta):

pipe-expression = expression "|" expression

Una expresión de tubería combina dos expresiones, separadas por | personaje. Es similar a una sub-expresión con dos distinciones importantes:

  1. Cualquier expresión se puede usar en el lado derecho. Una sub-expresión restringe el tipo de expresión que se puede usar en el lado derecho.
  2. Una expresión de tubería detiene proyecciones en el lado izquierdo para propagar hacia el lado derecho . Si la expresión izquierda crea una proyección, no se aplica al lado derecho.

La parte destacada es clave, como se muestra en los ejemplos siguientes, en particular:

Si, en cambio, solo deseaba la primera lista secundaria, ["first1", "second1"], puede usar una expresión-pipe:

foo[*].bar[0] -> ["first1", "first2"] foo[*].bar | [0] -> ["first1", "second1"]

Solución

Por lo tanto, la aplicación de una expresión de tubería produce el resultado deseado:

aws ec2 describe-instances --output table / --query ''Reservations[].Instances[].[Tags[?Key==`Name`] | [0].Value, State.Name]'' ---------------------------------- | DescribeInstances | +--------------------+-----------+ | Name1 | stopped | | Name2 | stopped | +--------------------+-----------+

Uso de aws-cli 1.3.6 Estoy tratando de obtener una tabla simple de mis instancias ec2 con el nombre y el estado. He estado consultando la documentación de --query y JMESpath y he podido seleccionar el elemento "Valor" de un Mapa cuyo elemento "Clave" es igual a Nombre. Esto es útil para obtener el nombre de instancia. Por lo tanto, el siguiente código parece funcionar

aws ec2 describe-instances --output table --query ''Reservations[].Instances[].Tags[?Key==`Name`].Value''

Y entrega esto:

------------------- |DescribeInstances| +-----------------+ | Name1 | | Name2 | +-----------------+

Sin embargo, si quiero agregar el estado, las cosas no salen como esperaba. Utilizando

aws ec2 describe-instances --output table --query ''Reservations[].Instances[].[Tags[?Key==`Name`].Value,State.Name]''

Entrega

------------------- |DescribeInstances| +-----------------+ | Name1 | | stopped | | Name2 | | stopped | +-----------------+

en lugar de una tabla de dos columnas con nombre y estado.

Si cambiamos el resultado a JSON, podemos ver que la selección de Etiquetas devuelve una lista (lista de un elemento) y ese es probablemente el problema:

[ [ [ "Name1" ], "stopped" ], [ [ "Name2" ], "stopped" ] ]

No he podido convertir esta lista en un escalar seleccionando el primer elemento. Esto no funciona. Devuelve una lista vacía como el Nombre.

aws ec2 describe-instances --output json --query ''Reservations[].Instances[].[Tags[?Key==`Name`].Value[0],State.Name]''

Lo mismo que esto

aws ec2 describe-instances --output json --query ''Reservations[].Instances[].[Tags[?Key==`Name`].Value[][0],State.Name]''

La única forma en que me he dado cuenta de esto es por medio de la función de unión. Como solo espero un elemento, está bien, pero parece ser un poco hacky.

aws ec2 describe-instances --output table --query ''Reservations[].Instances[].[join(`,`,Tags[?Key==`Name`].Value),State.Name]'' --------------------------- | DescribeInstances | +-------------+-----------+ | Name1 | stopped | | Name2 | stopped | +-------------+-----------+

La pregunta, por lo tanto, es: ¿hay alguna forma de elegir el primer elemento del resultado del filtro (?Key==XXXX) teniendo en cuenta que el sufijo con [0] parece no funcionar?

¡Gracias por adelantado!


Le dice a la ID de instancia junto con el estado del servidor

Comando: aws ec2 describe-instances --filter Name = tag: nombre, valores = eep --query ''Reservations [ ] .Instances [ ]. {Id: State, ID: InstanceId}'' --output table

Parte de consulta en el comando anterior Cambia según el requisito --query ''Reservations [ ] .Instances [ ]. {Id: State, ID: InstanceId}'' --output table