我正在尝试提取格式如下的所有实例的列表:
Tag:Name.Value instance-id private-ip-address
这是我正在使用的命令:
aws ec2 describe-instances --query 'Reservations[*].Instances[*].[Tags[?Key==`Name`].Value[],InstanceId,PrivateIpAddress]' --output text
这就是我得到的输出:
instance-id private-ip-address
tag:name.value
即使我在其他所有内容之前都拥有Tag位,它仍然在对应的ID / IP下方的新行中列出。
有什么办法解决这个问题?还有任何一种检索格式的方法:
Tag:name.value,instance-id,private-ip-address
谢谢
答案 0 :(得分:3)
CLI
aws ec2 describe-instances --query 'Reservations[*].Instances[*].[[Tags[?Key==`Name`].Value[],InstanceId, PrivateIpAddress][]]' --output text | sed 's/\t/,/g'
仅使用aws cli查询语法就可以不使用jq
来实现。
您需要使用[]
运算符将标签名称与其他字段“拼合”。输出将按Tab键拆分,因此sed 's/\t/,/g'
会将Tab键替换为逗号。
注意:在Mac上sed 's/\t/,/g'
可能不起作用,因为\t
无法识别为制表符。要插入标签,请按Ctrl+V
,然后按Tab
答案 1 :(得分:2)
我发现jq
是使用AWS CLI的最灵活的方法。
以下内容从describe-instances
获取输入并将其通过管道传输到jq
。 jq
提取您感兴趣的位,并以您指定的CSV格式输出。
CLI
aws ec2 describe-instances |jq -r '.Reservations[].Instances[]| . as $i | [($i.Tags|from_entries|.Name)?, $i.InstanceId, $i.PrivateIpAddress] |@csv'
输出
“ ac02-01”,“ i-0123456789ABCDEF”,“ 10.0.0.214”
参考
How to extract a particular Key-Value Tag from ec2 describe-instances