jq解析aws ec2实例标签

时间:2015-08-04 16:23:54

标签: amazon-ec2 aws-cli jq

我需要转换此输出

$ aws ec2 describe-instances --instance-ids i-xxxxxxxx | jq -r '.Reservations[].Instances[].Tags[]' | jq -s 'from_entries | del(..|.["aws:autoscaling:groupName"]?)'

{
  "Key": "ssh_user",
  "Value": "abc"
}
{
  "Key": "ssh_port",
  "Value": "2200"
}
{
  "Key": "aws:autoscaling:groupName",
  "Value": "ASG-Api"
}
{
  "Key": "Name",
  "Value": "SV-V3-API"
}

使用jq进入这个:

{
 "ssh_user":"abc",
 "ssh_port":"2200",
 "Name":"SV-V3-API"
}

请注意,我需要删除此密钥: aws:autoscaling:groupName

2 个答案:

答案 0 :(得分:1)

我认为@ peak关于sed的评论非常重要,可以单独回答。

jq版本1.4及更低版本无法使用from_entries原生使用亚马逊的键/值对,因为亚马逊大写字母键而jq期望使用小写字母键。版本为1.5的jq团队addressed this

要将您的EC2实例标记设为key: value对,而不是{key, value}条目,请使用:

aws ... | \
  sed -e 's/"Key":/"key":/g' -e 's/"Value":/"value":/g' | \
  jq '.Reservations[]|.Instances[]|.Tags|from_entries'

答案 1 :(得分:0)

使用jq 1.5:

$ jq -cs 'from_entries | del(.["aws:autoscaling:groupName"])' 

使用jq 1.3或1.4:

$ jq -M -c -s 'reduce .[] as $x
   ([]; . + [{"key" : $x.Key, "value": $x.Value}])
 | from_entries
 | del(.["aws:autoscaling:groupName"])'

在Windows上,您需要修改引用,或将jq命令放入文件中。