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:
- 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.
- 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