AWS CLI:如何实现描述实例的某些输出格式?

时间:2019-05-03 14:34:31

标签: amazon-web-services aws-cli

我正在尝试提取格式如下的所有实例的列表:

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

谢谢

2 个答案:

答案 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获取输入并将其通过管道传输到jqjq提取您感兴趣的位,并以您指定的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