Amazon web services AWS CLI:如何实现描述实例的特定输出格式?

Amazon web services AWS CLI:如何实现描述实例的特定输出格式?,amazon-web-services,aws-cli,Amazon Web Services,Aws Cli,我正在尝试提取所有实例的列表,格式如下: Tag:Name.Value实例id私有ip地址 这是我正在使用的命令: aws ec2 describe-instances --query 'Reservations[*].Instances[*].[Tags[?Key==`Name`].Value[],InstanceId,PrivateIpAddress]' --output text 这就是我得到的输出: instance-id private-ip-address tag:name.val

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

Tag:Name.Value实例id私有ip地址

这是我正在使用的命令:

aws ec2 describe-instances --query 'Reservations[*].Instances[*].[Tags[?Key==`Name`].Value[],InstanceId,PrivateIpAddress]' --output text
这就是我得到的输出:

instance-id private-ip-address
tag:name.value
尽管我在所有内容之前就有了标记位,但它仍然在相应的ID/IP下面的新行上列出

有办法解决这个问题吗?还有检索以下格式的任何方法:

标记:名称、值、实例id、私有ip地址


感谢我发现
jq
是使用AWS CLI最灵活的方法

下面从
descripe 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'
aws ec2 describe-instances --query 'Reservations[*].Instances[*].[[Tags[?Key==`Name`].Value[],InstanceId, PrivateIpAddress][]]' --output text | sed 's/\t/,/g' 

输出

“ac02-01”、“i-0123456789ABCDEF”、“10.0.0.214”

参考资料

CLI

aws ec2 describe-instances  |jq -r '.Reservations[].Instances[]| . as $i | [($i.Tags|from_entries|.Name)?, $i.InstanceId, $i.PrivateIpAddress] |@csv'
aws ec2 describe-instances --query 'Reservations[*].Instances[*].[[Tags[?Key==`Name`].Value[],InstanceId, PrivateIpAddress][]]' --output text | sed 's/\t/,/g' 

只需使用aws cli查询语法,无需使用
jq

您需要使用
[]
运算符将标记名与其他字段“展平”。输出将按制表符拆分,因此
sed's/\t/,/g'
将制表符替换为逗号


注意:在Mac
sed's/\t/,/g'
可能不起作用,因为
\t
不被识别为制表符。要插入制表符,请按Ctrl+V,然后按tab,这太棒了。然而,我现在遇到的一个问题是,
jq
在一个短列表之后失败,错误是:“不能在null上迭代(null)”您有没有没有没有标记的实例?嗯……这可能是一种可能性。我不确定,tho。我们有400多个实例,但我还没有看到所有实例。“标记是否存在?”有什么魔法吗?哈哈。@Mike这可以不用
jq
命令来完成,请看我的回答在标记块后添加了一个
,它将跳过空值。这就成功了。有没有办法格式化为CSV/逗号分隔的项目?@Mike I更新了答案。不幸的是,我们必须使用
sed